/** * Compute the sort ID. Similar to {@link Object#hashCode()} but used * for sorting geometries for rendering. * * @return the sort ID for this technique instance. */ public int getSortId() { int hash = 17; hash = hash * 23 + def.getSortId(); hash = hash * 23 + paramDefines.hashCode(); return hash; } }
@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); 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() == 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 testDeepClone() { DefineList dl1 = new DefineList(NUM_DEFINES); DefineList dl2 = dl1.deepClone(); assertNotSame(dl1, dl2); assertEquals(dl1, dl2); assertEquals(dl1.hashCode(), dl2.hashCode()); dl1.set(BOOL_VAR, true); dl2 = dl1.deepClone(); 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); assertNotEquals(dl1, dl2); assertNotEquals(dl1.hashCode(), dl2.hashCode()); dl2 = dl1.deepClone(); assertEquals(dl1, dl2); assertEquals(dl1.hashCode(), dl2.hashCode()); }
assertEquals(0, dl1.hashCode()); assertEquals(0, dl2.hashCode()); assertEquals(dl1, dl2); assertEquals(1, dl1.hashCode()); assertEquals(0, dl2.hashCode()); assertNotEquals(dl1, dl2); assertEquals(1, dl1.hashCode()); assertEquals(1, dl2.hashCode()); assertEquals(dl1, dl2); assertEquals(1 | 2, dl1.hashCode()); assertEquals(1, dl2.hashCode()); assertNotEquals(dl1, dl2); assertEquals(1 | 2, dl1.hashCode()); assertEquals(1 | 2, dl2.hashCode()); assertEquals(dl1, dl2); assertEquals(2, dl1.hashCode()); assertEquals(1 | 2, dl2.hashCode()); assertNotEquals(dl1, dl2); assertEquals(2, dl1.hashCode()); assertEquals(2, dl2.hashCode()); assertEquals(2, dl1.hashCode()); assertEquals(2, dl2.hashCode());
@Test 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); }
/** * Compute the sort ID. Similar to {@link Object#hashCode()} but used * for sorting geometries for rendering. * * @return the sort ID for this technique instance. */ public int getSortId() { int hash = 17; hash = hash * 23 + def.getSortId(); hash = hash * 23 + paramDefines.hashCode(); return hash; } }