@@ -60,8 +60,8 @@ public void checkGetCurrentAndMaxBytes() {
6060 @ Test
6161 public void checkUpdateWithSketch () {
6262 final int k = 16 ;
63- final MemorySegment seg = MemorySegment .ofArray (new byte [k *8 + 24 ]);
64- final MemorySegment seg2 = MemorySegment .ofArray (new byte [k *8 + 24 ]);
63+ final MemorySegment seg = MemorySegment .ofArray (new byte [( k *8 ) + 24 ]);
64+ final MemorySegment seg2 = MemorySegment .ofArray (new byte [( k *8 ) + 24 ]);
6565 final UpdateSketch sketch = Sketches .updateSketchBuilder ().setNominalEntries (k ).build ();
6666 for (int i =0 ; i <k ; i ++) { sketch .update (i ); }
6767 final CompactSketch sketchInDirectOrd = sketch .compact (true , seg );
@@ -78,7 +78,7 @@ public void checkUpdateWithSketch() {
7878 @ Test
7979 public void checkUnorderedAndOrderedMemorySegment () {
8080 final int k = 16 ;
81- final MemorySegment seg = MemorySegment .ofArray (new byte [k *8 + 24 ]);
81+ final MemorySegment seg = MemorySegment .ofArray (new byte [( k *8 ) + 24 ]);
8282 final UpdateSketch sketch = Sketches .updateSketchBuilder ().setNominalEntries (k ).build ();
8383 for (int i = 0 ; i < k ; i ++) { sketch .update (i ); }
8484 final CompactSketch sketchInDirectOrd = sketch .compact (false , seg );
@@ -97,9 +97,9 @@ public void checkUnorderedAndOrderedMemorySegment() {
9797 @ Test
9898 public void checkUpdateWithSeg () {
9999 final int k = 16 ;
100- final MemorySegment skSeg = MemorySegment .ofArray (new byte [2 *k *8 + 24 ]);
101- final MemorySegment dirOrdCskSeg = MemorySegment .ofArray (new byte [k *8 + 24 ]);
102- final MemorySegment dirUnordCskSeg = MemorySegment .ofArray (new byte [k *8 + 24 ]);
100+ final MemorySegment skSeg = MemorySegment .ofArray (new byte [( 2 *k *8 ) + 24 ]);
101+ final MemorySegment dirOrdCskSeg = MemorySegment .ofArray (new byte [( k *8 ) + 24 ]);
102+ final MemorySegment dirUnordCskSeg = MemorySegment .ofArray (new byte [( k *8 ) + 24 ]);
103103 final UpdateSketch udSketch = UpdateSketch .builder ().setNominalEntries (k ).build (skSeg );
104104 for (int i = 0 ; i < k ; i ++) { udSketch .update (i ); } //exact
105105 udSketch .compact (true , dirOrdCskSeg );
@@ -114,15 +114,15 @@ public void checkUpdateWithSeg() {
114114
115115 @ Test
116116 public void checkUpdateWithSegV4Exact () {
117- int n = 1000 ;
118- UpdateSketch sk = Sketches .updateSketchBuilder ().build ();
117+ final int n = 1000 ;
118+ final UpdateSketch sk = Sketches .updateSketchBuilder ().build ();
119119 for (int i = 0 ; i < n ; i ++) {
120120 sk .update (i );
121121 }
122- CompactSketch cs = sk .compact ();
122+ final CompactSketch cs = sk .compact ();
123123 assertFalse (cs .isEstimationMode ());
124124
125- byte [] bytes = cs .toByteArrayCompressed ();
125+ final byte [] bytes = cs .toByteArrayCompressed ();
126126
127127 final Union union = Sketches .setOperationBuilder ().buildUnion ();
128128 union .union (MemorySegment .ofArray (bytes ));
@@ -148,7 +148,7 @@ public void checkFastWrap() {
148148 @ Test (expectedExceptions = SketchesArgumentException .class )
149149 public void checkCorruptFamilyException () {
150150 final int k = 16 ;
151- final MemorySegment seg = MemorySegment .ofArray (new byte [k *8 + 24 ]);
151+ final MemorySegment seg = MemorySegment .ofArray (new byte [( k *8 ) + 24 ]);
152152 final UpdateSketch sketch = Sketches .updateSketchBuilder ().setNominalEntries (k ).build ();
153153 for (int i =0 ; i <k ; i ++) {
154154 sketch .update (i );
@@ -209,27 +209,36 @@ public void checkMoveAndResizeOffHeap() {
209209 final int bytes = Sketches .getMaxUpdateSketchBytes (k );
210210 MemorySegment skWseg , uWseg ;
211211 try (Arena arena = Arena .ofConfined ()) {
212- skWseg = arena .allocate (bytes / 2 );
212+ skWseg = arena .allocate (bytes / 2 ); //we never populate the sketch so this size is not relevant
213213 final UpdateSketch sketch = Sketches .updateSketchBuilder ().setNominalEntries (k ).build (skWseg );
214- assertTrue (sketch .isSameResource (skWseg )); //of course
214+ //The sketch has not changed, so the sketch's internal segment is what we gave it.
215+ assertTrue (sketch .isSameResource (skWseg ));
215216
216- uWseg = arena .allocate (bytes / 2 ); //independent of sketch, way too small, forces overflow
217+ //We now do the same with an independent Union
218+ uWseg = arena .allocate (bytes / 2 ); // way too small, this will forces overflow
217219 final Union union = SetOperation .builder ().buildUnion (uWseg ); //off-heap union
218- assertTrue (union .isSameResource (uWseg )); //of course
220+ assertTrue (union .isSameResource (uWseg )); //Union has not changed
219221
220222 for (int i = 0 ; i < u ; i ++) { union .update (i ); } //populate first union
221- assertFalse (union .isSameResource (skWseg )); //of course
222- assertFalse (union .isSameResource (uWseg )); //moved
223+ assertFalse (union .isSameResource (skWseg )); //Sketch and Union segments are totally distinct
224+ //Here the union's segment overflowed and moved to the heap,
225+ // thus, its reference to its segment is not the one we gave it!
226+ assertFalse (union .isSameResource (uWseg )); //moved.
223227
228+ //Here we create a 2nd Union with a heap segment
224229 final MemorySegment uWsegHeap = MemorySegment .ofArray (new byte [bytes / 2 ]);
225230 final Union union2 = SetOperation .builder ().buildUnion (); //on-heap union
231+ //As before, this establishes that the empty union2 has the same segment that we gave it.
232+ assertTrue (union2 .isSameResource (uWsegHeap )); //But Copilot complained, so here it is!
233+
234+ //These two asserts are calling the Interface static method directly and establish
235+ // what should be obvious, that these are all different segments.
226236 assertFalse (MemorySegmentStatus .isSameResource (uWseg , uWsegHeap )); //obviously not
227237 assertFalse (MemorySegmentStatus .isSameResource (uWsegHeap , union .getMemorySegment ())); //tgt moved
228- }
238+ } //the off-heap segments will be closed here
229239 assertFalse (skWseg .scope ().isAlive ()); //closed as part of the same Arena
230240 assertFalse (uWseg .scope ().isAlive ()); //closed as part of the same Arena
231-
232-
241+ //we don't need to close the heap segment.
233242 }
234243
235244 @ Test
@@ -252,7 +261,7 @@ public void checkUnionCompactOrderedSource() {
252261
253262 final int bytes = Sketches .getCompactSketchMaxBytes (lgK );
254263 try (Arena arena = Arena .ofConfined ()) {
255- MemorySegment wseg = arena .allocate (bytes );
264+ final MemorySegment wseg = arena .allocate (bytes );
256265
257266 final CompactSketch csk = sk .compact (true , wseg ); //ordered, direct
258267 final Union union = Sketches .setOperationBuilder ().buildUnion ();
@@ -286,9 +295,9 @@ public void checkDirectUnionSingleItem() {
286295 for (int i = 0 ; i < num ; i ++) {
287296 skArr [i ] = new UpdateSketchBuilder ().build ();
288297 }
289- for (int i = 0 ; i < num /2 ; i ++) {
298+ for (int i = 0 ; i < ( num /2 ) ; i ++) {
290299 skArr [i ].update (i );
291- skArr [i + num /2 ].update (i );
300+ skArr [i + ( num /2 ) ].update (i );
292301 skArr [i ].update (i + num );
293302 }
294303
0 commit comments