3434import org .neo4j .gds .core .utils .partition .PartitionUtils ;
3535
3636import java .nio .charset .StandardCharsets ;
37+ import java .util .Arrays ;
3738import java .util .Optional ;
3839
3940import static org .assertj .core .api .Assertions .assertThat ;
@@ -43,7 +44,9 @@ class ShardedByteArrayLongMapTest {
4344 @ Provide
4445 Arbitrary <byte [][]> nodes () {
4546 var idGen = Arbitraries .bytes ().array (byte [].class ).ofSize (10 );
46- return Arbitraries .create (idGen ::sample ).array (byte [][].class );
47+ return Arbitraries
48+ .create (idGen ::sample )
49+ .array (byte [][].class );
4750 }
4851
4952 @ Test
@@ -61,8 +64,7 @@ void addSingleNode() {
6164 void addNodes (@ ForAll ("nodes" ) @ Size (100 ) byte [][] nodes ) {
6265 var builder = ShardedByteArrayLongMap .builder (new Concurrency (1 ));
6366 for (byte [] node : nodes ) {
64- long mapped = builder .addNode (node );
65- assertThat (mapped ).isGreaterThanOrEqualTo (0 );
67+ builder .addNode (node );
6668 }
6769 var map = builder .build ();
6870
@@ -72,6 +74,34 @@ void addNodes(@ForAll("nodes") @Size(100) byte[][] nodes) {
7274 }
7375 }
7476
77+ @ Property
78+ void addNodesDifferentObject (@ ForAll ("nodes" ) @ Size (100 ) byte [][] nodes ) {
79+ var builder = ShardedByteArrayLongMap .builder (new Concurrency (1 ));
80+ for (byte [] node : nodes ) {
81+ builder .addNode (node );
82+ }
83+ var map = builder .build ();
84+
85+ assertThat (map .size ()).isEqualTo (nodes .length );
86+ for (byte [] node : nodes ) {
87+ // Ensure that hashCode and equals work correctly for byte arrays
88+ // with same elements, but different objects.
89+ var nodeCopy = Arrays .copyOf (node , node .length );
90+ assertThat (map .toOriginalNodeId (map .toMappedNodeId (nodeCopy ))).isEqualTo (node );
91+ }
92+ }
93+
94+ @ Test
95+ void addExistingNode () {
96+ byte [] node1 = "foobar" .getBytes (StandardCharsets .UTF_8 );
97+ byte [] node2 = "foobar" .getBytes (StandardCharsets .UTF_8 );
98+ var builder = ShardedByteArrayLongMap .builder (new Concurrency (1 ));
99+ long mappedNode1 = builder .addNode (node1 );
100+ assertThat (mappedNode1 ).isGreaterThanOrEqualTo (0 );
101+ long mappedNode2 = builder .addNode (node2 );
102+ assertThat (mappedNode2 ).isEqualTo (-(mappedNode1 + 1 ));
103+ }
104+
75105 @ ParameterizedTest
76106 @ ValueSource (ints = {0 , 1024 , 4096 , 5000 , 9999 })
77107 void size (int expectedSize ) {
0 commit comments