@@ -895,6 +895,12 @@ protected List getFieldOrder() {
895
895
assertEquals ("Non-volatile field should be written" , 1 , s .getPointer ().getInt (4 ));
896
896
s .writeField ("counter" );
897
897
assertEquals ("Explicit volatile field write failed" , 1 , s .getPointer ().getInt (0 ));
898
+
899
+ s .equals (s );
900
+ assertEquals ("Structure equals should leave volatile field unchanged" , 1 , s .getPointer ().getInt (0 ));
901
+
902
+ s .hashCode ();
903
+ assertEquals ("Structure equals should leave volatile field unchanged" , 1 , s .getPointer ().getInt (0 ));
898
904
}
899
905
900
906
public static class StructureWithPointers extends Structure {
@@ -1542,53 +1548,27 @@ class TestStructure extends Structure {
1542
1548
protected List getFieldOrder () {
1543
1549
return Arrays .asList (new String [] { "first" , "second" , "third" });
1544
1550
}
1551
+ public TestStructure () { }
1552
+ public TestStructure (Pointer p ) { super (p ); }
1545
1553
}
1546
1554
OtherStructure s0 = new OtherStructure ();
1547
1555
TestStructure s1 = new TestStructure ();
1548
- TestStructure s2 = new TestStructure ();
1549
- TestStructure s3 = new TestStructure ();
1550
- int VALUE = 99 ;
1551
- s1 .first = s2 .first = s3 .first = VALUE ;
1556
+ TestStructure s2 = new TestStructure (s1 .getPointer ());
1557
+ TestStructure s3 = new TestStructure (s2 .getPointer ());
1558
+ TestStructure s4 = new TestStructure ();
1552
1559
1553
1560
assertFalse ("Structures of different classes with same fields are not equal" , s1 .equals (s0 ));
1554
1561
assertFalse ("Structures of different classes with same fields are not equal (reflexive)" , s0 .equals (s1 ));
1555
1562
1556
1563
assertFalse ("Compare to null failed" , s1 .equals (null ));
1557
1564
assertTrue ("Equals is not reflexive" , s1 .equals (s1 ));
1558
- assertTrue ("Equals failed on identical structures" , s1 .equals (s2 ));
1565
+ assertTrue ("Equals failed on structures with same pointer " , s1 .equals (s2 ));
1559
1566
assertTrue ("Equals is not symmetric" , s2 .equals (s1 ));
1560
1567
assertTrue ("Equals is not transitive" , s1 .equals (s2 ) && s2 .equals (s3 ) && s1 .equals (s3 ));
1561
-
1562
-
1568
+ assertFalse ("Compare to different structure failed" , s1 .equals (s4 ));
1563
1569
}
1564
1570
1565
- public void testStructureEqualsByValueByReference () {
1566
- class TestStructure extends Structure {
1567
- public int first ;
1568
- public int [] second = new int [4 ];
1569
- public Pointer [] third = new Pointer [4 ];
1570
- protected List getFieldOrder () {
1571
- return Arrays .asList (new String [] { "first" , "second" , "third" });
1572
- }
1573
- }
1574
- class ByReference extends TestStructure implements Structure .ByReference { }
1575
- class ByValue extends TestStructure implements Structure .ByValue { }
1576
- TestStructure s1 = new TestStructure ();
1577
- TestStructure s2 = new ByReference ();
1578
- TestStructure s3 = new ByValue ();
1579
- int VALUE = 99 ;
1580
- s1 .first = s2 .first = s3 .first = VALUE ;
1581
-
1582
- assertTrue ("Equals failed on identical ByReference" , s1 .equals (s2 ));
1583
- assertTrue ("Equals is not symmetric (ByReference)" , s2 .equals (s1 ));
1584
- assertTrue ("Equals failed on identical ByValue" , s1 .equals (s3 ));
1585
- assertTrue ("Equals is not symmetric (ByValue)" , s3 .equals (s1 ));
1586
- assertTrue ("Equals is not transitive (ByReference/ByValue)" , s1 .equals (s2 ) && s2 .equals (s3 ) && s1 .equals (s3 ));
1587
-
1588
-
1589
- }
1590
-
1591
- public void testStructureHashCodeMatchesEqualsTrue () {
1571
+ public void testStructureHashCodeMatchesWhenEqual () {
1592
1572
class TestStructure extends Structure {
1593
1573
public int first ;
1594
1574
protected List getFieldOrder () {
@@ -1597,26 +1577,15 @@ protected List getFieldOrder() {
1597
1577
}
1598
1578
TestStructure s1 = new TestStructure ();
1599
1579
TestStructure s2 = new TestStructure ();
1600
- s1 .first = s2 .first = 0x12345678 ;
1601
- assertEquals ("hashCode should match when structures equal" ,
1602
- s1 .hashCode (), s2 .hashCode ());
1603
- }
1580
+ assertFalse ("hashCode should be different for two different structures" , s1 .hashCode () == s2 .hashCode ());
1604
1581
1605
- public void testStructureEqualsIgnoresPadding () {
1606
- class TestStructure extends Structure {
1607
- public byte first ;
1608
- public int second ;
1609
- protected List getFieldOrder () {
1610
- return Arrays .asList (new String [] { "first" , "second" });
1611
- }
1612
- }
1613
- TestStructure s1 = new TestStructure ();
1614
- TestStructure s2 = new TestStructure ();
1582
+ s2 .useMemory (s1 .getPointer ());
1583
+ assertEquals ("hashCode should match when structures have same pointer" ,
1584
+ s1 .hashCode (), s2 .hashCode ());
1615
1585
1616
- // Make padding bits non-zero
1617
- s2 .getPointer ().setInt (0 , -1 );
1618
- s2 .write ();
1619
- assertTrue ("Structure equals should ignore padding" , s1 .equals (s2 ));
1586
+ s2 .useMemory (s1 .getPointer ());
1587
+ assertEquals ("hashCode should match when structures have same pointer" ,
1588
+ s1 .hashCode (), s2 .hashCode ());
1620
1589
}
1621
1590
1622
1591
public void testRecursiveWrite () {
0 commit comments