|
|
|
@ -40,7 +40,7 @@ import org.junit.Test; |
|
|
|
|
import static org.junit.Assert.*; |
|
|
|
|
|
|
|
|
|
public class DefineListTest { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private static final List<String> DEFINE_NAMES = Arrays.asList("BOOL_VAR", "INT_VAR", "FLOAT_VAR"); |
|
|
|
|
private static final List<VarType> DEFINE_TYPES = Arrays.asList(VarType.Boolean, VarType.Int, VarType.Float); |
|
|
|
|
private static final int NUM_DEFINES = DEFINE_NAMES.size(); |
|
|
|
@ -53,49 +53,49 @@ public class DefineListTest { |
|
|
|
|
public void testHashCollision() { |
|
|
|
|
DefineList dl1 = new DefineList(64); |
|
|
|
|
DefineList dl2 = new DefineList(64); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Try to cause a hash collision
|
|
|
|
|
// (since bit #32 is aliased to bit #1 in 32-bit ints)
|
|
|
|
|
dl1.set(0, 123); |
|
|
|
|
dl1.set(32, 0); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dl2.set(32, 0); |
|
|
|
|
dl2.set(0, 123); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assert dl1.hashCode() == dl2.hashCode(); |
|
|
|
|
assert dl1.equals(dl2); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void testGetSet() { |
|
|
|
|
DefineList dl = new DefineList(NUM_DEFINES); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assertFalse(dl.getBoolean(BOOL_VAR)); |
|
|
|
|
assertEquals(dl.getInt(INT_VAR), 0); |
|
|
|
|
assertEquals(dl.getFloat(FLOAT_VAR), 0f, 0f); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dl.set(BOOL_VAR, true); |
|
|
|
|
dl.set(INT_VAR, -1); |
|
|
|
|
dl.set(FLOAT_VAR, Float.NaN); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assertTrue(dl.getBoolean(BOOL_VAR)); |
|
|
|
|
assertEquals(dl.getInt(INT_VAR), -1); |
|
|
|
|
assertTrue(Float.isNaN(dl.getFloat(FLOAT_VAR))); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private String generateSource(DefineList dl) { |
|
|
|
|
StringBuilder sb = new StringBuilder(); |
|
|
|
|
dl.generateSource(sb, DEFINE_NAMES, DEFINE_TYPES); |
|
|
|
|
return sb.toString(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void testSourceInitial() { |
|
|
|
|
DefineList dl = new DefineList(NUM_DEFINES); |
|
|
|
|
assert dl.hashCode() == 0; |
|
|
|
|
assert generateSource(dl).equals(""); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void testSourceBooleanDefine() { |
|
|
|
|
DefineList dl = new DefineList(NUM_DEFINES); |
|
|
|
@ -103,35 +103,47 @@ public class DefineListTest { |
|
|
|
|
dl.set(BOOL_VAR, true); |
|
|
|
|
assert dl.hashCode() == 1; |
|
|
|
|
assert generateSource(dl).equals("#define BOOL_VAR 1\n"); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dl.set(BOOL_VAR, false); |
|
|
|
|
assert dl.hashCode() == 0; |
|
|
|
|
assert generateSource(dl).equals(""); |
|
|
|
|
|
|
|
|
|
dl.set(BOOL_VAR, true); |
|
|
|
|
assert dl.hashCode() == 1; |
|
|
|
|
assert generateSource(dl).equals("#define BOOL_VAR 1\n"); |
|
|
|
|
|
|
|
|
|
dl.unset(BOOL_VAR); |
|
|
|
|
assert dl.hashCode() == 0; |
|
|
|
|
assert generateSource(dl).equals(""); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void testSourceIntDefine() { |
|
|
|
|
DefineList dl = new DefineList(NUM_DEFINES); |
|
|
|
|
|
|
|
|
|
int hashCodeWithInt = 1 << INT_VAR; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dl.set(INT_VAR, 123); |
|
|
|
|
assert dl.hashCode() == hashCodeWithInt; |
|
|
|
|
assert generateSource(dl).equals("#define INT_VAR 123\n"); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dl.set(INT_VAR, 0); |
|
|
|
|
assert dl.hashCode() == 0; |
|
|
|
|
assert generateSource(dl).equals(""); |
|
|
|
|
|
|
|
|
|
assert dl.hashCode() == hashCodeWithInt; |
|
|
|
|
assert generateSource(dl).equals("#define INT_VAR 0\n"); |
|
|
|
|
|
|
|
|
|
dl.set(INT_VAR, -99); |
|
|
|
|
assert dl.hashCode() == hashCodeWithInt; |
|
|
|
|
assert generateSource(dl).equals("#define INT_VAR -99\n"); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dl.set(INT_VAR, Integer.MAX_VALUE); |
|
|
|
|
assert dl.hashCode() == hashCodeWithInt; |
|
|
|
|
assert generateSource(dl).equals("#define INT_VAR 2147483647\n"); |
|
|
|
|
|
|
|
|
|
dl.unset(INT_VAR); |
|
|
|
|
assert dl.hashCode() == 0; |
|
|
|
|
assert generateSource(dl).equals(""); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void testSourceFloatDefine() { |
|
|
|
|
DefineList dl = new DefineList(NUM_DEFINES); |
|
|
|
@ -139,162 +151,193 @@ public class DefineListTest { |
|
|
|
|
dl.set(FLOAT_VAR, 1f); |
|
|
|
|
assert dl.hashCode() == (1 << FLOAT_VAR); |
|
|
|
|
assert generateSource(dl).equals("#define FLOAT_VAR 1.0\n"); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dl.set(FLOAT_VAR, 0f); |
|
|
|
|
assert dl.hashCode() == 0; |
|
|
|
|
assert generateSource(dl).equals(""); |
|
|
|
|
|
|
|
|
|
assert dl.hashCode() == (1 << FLOAT_VAR); |
|
|
|
|
assert generateSource(dl).equals("#define FLOAT_VAR 0.0\n"); |
|
|
|
|
|
|
|
|
|
dl.set(FLOAT_VAR, -1f); |
|
|
|
|
assert generateSource(dl).equals("#define FLOAT_VAR -1.0\n"); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dl.set(FLOAT_VAR, FastMath.FLT_EPSILON); |
|
|
|
|
assert generateSource(dl).equals("#define FLOAT_VAR 1.1920929E-7\n"); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dl.set(FLOAT_VAR, FastMath.PI); |
|
|
|
|
assert generateSource(dl).equals("#define FLOAT_VAR 3.1415927\n"); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
try { |
|
|
|
|
dl.set(FLOAT_VAR, Float.NaN); |
|
|
|
|
generateSource(dl); |
|
|
|
|
assert false; |
|
|
|
|
} catch (IllegalArgumentException ex) { } |
|
|
|
|
|
|
|
|
|
} catch (IllegalArgumentException ex) { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
try { |
|
|
|
|
dl.set(FLOAT_VAR, Float.POSITIVE_INFINITY); |
|
|
|
|
generateSource(dl); |
|
|
|
|
assert false; |
|
|
|
|
} catch (IllegalArgumentException ex) { } |
|
|
|
|
|
|
|
|
|
} catch (IllegalArgumentException ex) { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
try { |
|
|
|
|
dl.set(FLOAT_VAR, Float.NEGATIVE_INFINITY); |
|
|
|
|
generateSource(dl); |
|
|
|
|
assert false; |
|
|
|
|
} catch (IllegalArgumentException ex) { } |
|
|
|
|
} catch (IllegalArgumentException ex) { |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void testEqualsAndHashCode() { |
|
|
|
|
DefineList dl1 = new DefineList(NUM_DEFINES); |
|
|
|
|
DefineList dl2 = new DefineList(NUM_DEFINES); |
|
|
|
|
|
|
|
|
|
assertTrue(dl1.hashCode() == 0); |
|
|
|
|
|
|
|
|
|
assertEquals(0, dl1.hashCode()); |
|
|
|
|
assertEquals(0, dl2.hashCode()); |
|
|
|
|
assertEquals(dl1, dl2); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dl1.set(BOOL_VAR, true); |
|
|
|
|
|
|
|
|
|
assertTrue(dl1.hashCode() == 1); |
|
|
|
|
assertNotSame(dl1, dl2); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assertEquals(1, dl1.hashCode()); |
|
|
|
|
assertEquals(0, dl2.hashCode()); |
|
|
|
|
assertNotEquals(dl1, dl2); |
|
|
|
|
|
|
|
|
|
dl2.set(BOOL_VAR, true); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assertEquals(1, dl1.hashCode()); |
|
|
|
|
assertEquals(1, dl2.hashCode()); |
|
|
|
|
assertEquals(dl1, dl2); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dl1.set(INT_VAR, 2); |
|
|
|
|
|
|
|
|
|
assertTrue(dl1.hashCode() == (1|2)); |
|
|
|
|
assertNotSame(dl1, dl2); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assertEquals(1 | 2, dl1.hashCode()); |
|
|
|
|
assertEquals(1, dl2.hashCode()); |
|
|
|
|
assertNotEquals(dl1, dl2); |
|
|
|
|
|
|
|
|
|
dl2.set(INT_VAR, 2); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assertEquals(1 | 2, dl1.hashCode()); |
|
|
|
|
assertEquals(1 | 2, dl2.hashCode()); |
|
|
|
|
assertEquals(dl1, dl2); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dl1.set(BOOL_VAR, false); |
|
|
|
|
|
|
|
|
|
assertTrue(dl1.hashCode() == 2); |
|
|
|
|
assertNotSame(dl1, dl2); |
|
|
|
|
|
|
|
|
|
assertEquals(2, dl1.hashCode()); |
|
|
|
|
assertEquals(1 | 2, dl2.hashCode()); |
|
|
|
|
assertNotEquals(dl1, dl2); |
|
|
|
|
|
|
|
|
|
dl2.unset(BOOL_VAR); |
|
|
|
|
|
|
|
|
|
assertEquals(2, dl1.hashCode()); |
|
|
|
|
assertEquals(2, dl2.hashCode()); |
|
|
|
|
assertEquals(dl1, dl2); // unset is the same as false
|
|
|
|
|
|
|
|
|
|
dl1.unset(BOOL_VAR); |
|
|
|
|
assertEquals(2, dl1.hashCode()); |
|
|
|
|
assertEquals(2, dl2.hashCode()); |
|
|
|
|
assertEquals(dl1, dl2); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void testDeepClone() { |
|
|
|
|
DefineList dl1 = new DefineList(NUM_DEFINES); |
|
|
|
|
DefineList dl2 = dl1.deepClone(); |
|
|
|
|
|
|
|
|
|
assertFalse(dl1 == dl2); |
|
|
|
|
assertTrue(dl1.equals(dl2)); |
|
|
|
|
assertTrue(dl1.hashCode() == dl2.hashCode()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assertNotSame(dl1, dl2); |
|
|
|
|
assertEquals(dl1, dl2); |
|
|
|
|
assertEquals(dl1.hashCode(), dl2.hashCode()); |
|
|
|
|
|
|
|
|
|
dl1.set(BOOL_VAR, true); |
|
|
|
|
dl2 = dl1.deepClone(); |
|
|
|
|
|
|
|
|
|
assertTrue(dl1.equals(dl2)); |
|
|
|
|
assertTrue(dl1.hashCode() == dl2.hashCode()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assertEquals(dl1, dl2); |
|
|
|
|
assertEquals(dl1.hashCode(), dl2.hashCode()); |
|
|
|
|
|
|
|
|
|
dl1.set(BOOL_VAR, false); |
|
|
|
|
dl2 = dl1.deepClone(); |
|
|
|
|
|
|
|
|
|
assertEquals(dl1, dl2); |
|
|
|
|
assertEquals(dl1.hashCode(), dl2.hashCode()); |
|
|
|
|
|
|
|
|
|
dl1.set(INT_VAR, 123); |
|
|
|
|
|
|
|
|
|
assertFalse(dl1.equals(dl2)); |
|
|
|
|
assertFalse(dl1.hashCode() == dl2.hashCode()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assertNotEquals(dl1, dl2); |
|
|
|
|
assertNotEquals(dl1.hashCode(), dl2.hashCode()); |
|
|
|
|
|
|
|
|
|
dl2 = dl1.deepClone(); |
|
|
|
|
|
|
|
|
|
assertTrue(dl1.equals(dl2)); |
|
|
|
|
assertTrue(dl1.hashCode() == dl2.hashCode()); |
|
|
|
|
|
|
|
|
|
assertEquals(dl1, dl2); |
|
|
|
|
assertEquals(dl1.hashCode(), dl2.hashCode()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void testGenerateSource() { |
|
|
|
|
DefineList dl = new DefineList(NUM_DEFINES); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assertEquals("", generateSource(dl)); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dl.set(BOOL_VAR, true); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assertEquals("#define BOOL_VAR 1\n", generateSource(dl)); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dl.set(INT_VAR, 123); |
|
|
|
|
|
|
|
|
|
assertEquals("#define BOOL_VAR 1\n" + |
|
|
|
|
"#define INT_VAR 123\n", generateSource(dl)); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assertEquals("#define BOOL_VAR 1\n" |
|
|
|
|
+ "#define INT_VAR 123\n", generateSource(dl)); |
|
|
|
|
|
|
|
|
|
dl.set(BOOL_VAR, false); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assertEquals("#define INT_VAR 123\n", generateSource(dl)); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dl.set(BOOL_VAR, true); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// should have predictable ordering based on defineId
|
|
|
|
|
assertEquals("#define BOOL_VAR 1\n" + |
|
|
|
|
"#define INT_VAR 123\n", generateSource(dl)); |
|
|
|
|
assertEquals("#define BOOL_VAR 1\n" |
|
|
|
|
+ "#define INT_VAR 123\n", generateSource(dl)); |
|
|
|
|
|
|
|
|
|
dl.unset(BOOL_VAR); |
|
|
|
|
assertEquals("#define INT_VAR 123\n", generateSource(dl)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private static String doLookup(HashMap<DefineList, String> map, boolean boolVal, int intVal, float floatVal) { |
|
|
|
|
|
|
|
|
|
private static String doLookup(HashMap<DefineList, String> map, Boolean boolVal, Integer intVal, Float floatVal) { |
|
|
|
|
DefineList dl = new DefineList(NUM_DEFINES); |
|
|
|
|
dl.set(BOOL_VAR, boolVal); |
|
|
|
|
dl.set(INT_VAR, intVal); |
|
|
|
|
dl.set(FLOAT_VAR, floatVal); |
|
|
|
|
dl.set(BOOL_VAR, VarType.Boolean, boolVal); |
|
|
|
|
dl.set(INT_VAR, VarType.Int, intVal); |
|
|
|
|
dl.set(FLOAT_VAR, VarType.Float, floatVal); |
|
|
|
|
return map.get(dl); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void testHashLookup() { |
|
|
|
|
String STR_EMPTY = "This is an empty define list"; |
|
|
|
|
String STR_INT = "This define list has an int value"; |
|
|
|
|
String STR_BOOL = "This define list just has boolean value set"; |
|
|
|
|
String STR_BOOL_INT = "This define list has both a boolean and int value"; |
|
|
|
|
String STR_EMPTY = "This is an empty define list"; |
|
|
|
|
String STR_INT = "This define list has an int value"; |
|
|
|
|
String STR_BOOL = "This define list just has boolean value set"; |
|
|
|
|
String STR_BOOL_INT = "This define list has both a boolean and int value"; |
|
|
|
|
String STR_BOOL_INT_FLOAT = "This define list has a boolean, int, and float value"; |
|
|
|
|
|
|
|
|
|
HashMap<DefineList, String> map = new HashMap<DefineList, String>(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
HashMap<DefineList, String> map = new HashMap<>(); |
|
|
|
|
|
|
|
|
|
DefineList lookup = new DefineList(NUM_DEFINES); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
map.put(lookup.deepClone(), STR_EMPTY); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
lookup.set(BOOL_VAR, true); |
|
|
|
|
map.put(lookup.deepClone(), STR_BOOL); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
lookup.set(BOOL_VAR, false); |
|
|
|
|
lookup.set(INT_VAR, 123); |
|
|
|
|
map.put(lookup.deepClone(), STR_INT); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
lookup.set(BOOL_VAR, true); |
|
|
|
|
map.put(lookup.deepClone(), STR_BOOL_INT); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
lookup.set(FLOAT_VAR, FastMath.PI); |
|
|
|
|
map.put(lookup.deepClone(), STR_BOOL_INT_FLOAT); |
|
|
|
|
|
|
|
|
|
assertEquals(doLookup(map, false, 0, 0f), STR_EMPTY); |
|
|
|
|
assertEquals(doLookup(map, false, 123, 0f), STR_INT); |
|
|
|
|
assertEquals(doLookup(map, true, 0, 0f), STR_BOOL); |
|
|
|
|
assertEquals(doLookup(map, true, 123, 0f), STR_BOOL_INT); |
|
|
|
|
assertEquals(doLookup(map, true, 123, FastMath.PI), STR_BOOL_INT_FLOAT); |
|
|
|
|
|
|
|
|
|
assertEquals(STR_EMPTY, doLookup(map, null, null, null)); |
|
|
|
|
assertEquals(STR_INT, doLookup(map, false, 123, null)); |
|
|
|
|
assertEquals(STR_BOOL, doLookup(map, true, null, null)); |
|
|
|
|
assertEquals(STR_BOOL_INT, doLookup(map, true, 123, null)); |
|
|
|
|
assertEquals(STR_BOOL_INT_FLOAT, doLookup(map, true, 123, FastMath.PI)); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|