Skip to content

Commit 59ec2e2

Browse files
dfa1claude
andcommitted
test(reader): use Arena.ofAuto() over Arena.global() in decoder tests
Arena.global() never frees; ofAuto() is GC-backed and matches the VarBinView test in the same series. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1 parent 7742ecd commit 59ec2e2

5 files changed

Lines changed: 14 additions & 14 deletions

File tree

reader/src/test/java/io/github/dfa1/vortex/reader/decode/AlpEncodingDecoderTest.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ void decode_nonPrimitiveDtype_throws() {
6969
ArrayNode node = ArrayNode.of(EncodingId.VORTEX_ALP, ByteBuffer.wrap(new ALPMetadata(0, 0, null).encode()),
7070
new ArrayNode[0], new int[0]);
7171
DecodeContext ctx = new DecodeContext(node, new DType.Utf8(false), 1,
72-
new MemorySegment[0], REGISTRY, Arena.global());
72+
new MemorySegment[0], REGISTRY, Arena.ofAuto());
7373

7474
// When / Then
7575
assertThatThrownBy(() -> SUT.decode(ctx)).hasMessageContaining("expected primitive dtype");
@@ -80,7 +80,7 @@ void decode_missingMetadata_defaultsToZeroExponents() {
8080
// Given no metadata — decoder falls back to exp_e=0, exp_f=0 (scale 1.0)
8181
ArrayNode enc = ArrayNode.of(EncodingId.VORTEX_PRIMITIVE, null, new ArrayNode[0], new int[]{0});
8282
ArrayNode node = ArrayNode.of(EncodingId.VORTEX_ALP, null, new ArrayNode[]{enc}, new int[0]);
83-
DecodeContext ctx = new DecodeContext(node, F64, 2, new MemorySegment[]{leLongs(5L, 7L)}, REGISTRY, Arena.global());
83+
DecodeContext ctx = new DecodeContext(node, F64, 2, new MemorySegment[]{leLongs(5L, 7L)}, REGISTRY, Arena.ofAuto());
8484

8585
// When
8686
DoubleArray result = (DoubleArray) SUT.decode(ctx);
@@ -97,7 +97,7 @@ void decode_f64_broadcastNoPatches_returnsConstant() {
9797
ArrayNode enc = ArrayNode.of(EncodingId.VORTEX_PRIMITIVE, null, new ArrayNode[0], new int[]{0});
9898
byte[] meta = new ALPMetadata(2, 0, null).encode(); // exp_e=2 -> *0.01
9999
ArrayNode node = ArrayNode.of(EncodingId.VORTEX_ALP, ByteBuffer.wrap(meta), new ArrayNode[]{enc}, new int[0]);
100-
DecodeContext ctx = new DecodeContext(node, F64, 4, new MemorySegment[]{leLongs(123L)}, REGISTRY, Arena.global());
100+
DecodeContext ctx = new DecodeContext(node, F64, 4, new MemorySegment[]{leLongs(123L)}, REGISTRY, Arena.ofAuto());
101101

102102
// When
103103
DoubleArray result = (DoubleArray) SUT.decode(ctx);
@@ -115,7 +115,7 @@ void decode_f32_broadcastNoPatches_returnsConstant() {
115115
ArrayNode enc = ArrayNode.of(EncodingId.VORTEX_PRIMITIVE, null, new ArrayNode[0], new int[]{0});
116116
byte[] meta = new ALPMetadata(1, 0, null).encode(); // exp_e=1 -> *0.1
117117
ArrayNode node = ArrayNode.of(EncodingId.VORTEX_ALP, ByteBuffer.wrap(meta), new ArrayNode[]{enc}, new int[0]);
118-
DecodeContext ctx = new DecodeContext(node, F32, 3, new MemorySegment[]{leInts(25)}, REGISTRY, Arena.global());
118+
DecodeContext ctx = new DecodeContext(node, F32, 3, new MemorySegment[]{leInts(25)}, REGISTRY, Arena.ofAuto());
119119

120120
// When
121121
FloatArray result = (FloatArray) SUT.decode(ctx);
@@ -142,7 +142,7 @@ void decode_f64_patches_withU8Indices() {
142142

143143
MemorySegment idxSeg = MemorySegment.ofArray(new byte[]{1}); // patch row 1
144144
MemorySegment[] segs = {leLongs(100L, 0L, 300L), idxSeg, leDoubles(9.0)};
145-
DecodeContext ctx = new DecodeContext(node, F64, 3, segs, REGISTRY, Arena.global());
145+
DecodeContext ctx = new DecodeContext(node, F64, 3, segs, REGISTRY, Arena.ofAuto());
146146

147147
// When
148148
DoubleArray result = (DoubleArray) SUT.decode(ctx);
@@ -166,7 +166,7 @@ void decode_patches_nonUnsignedIndexPtype_throws() {
166166
new ArrayNode[]{enc, idx, val}, new int[0]);
167167

168168
MemorySegment[] segs = {leLongs(100L, 0L), leInts(1), leDoubles(9.0)};
169-
DecodeContext ctx = new DecodeContext(node, F64, 2, segs, REGISTRY, Arena.global());
169+
DecodeContext ctx = new DecodeContext(node, F64, 2, segs, REGISTRY, Arena.ofAuto());
170170

171171
// When / Then
172172
assertThatThrownBy(() -> SUT.decode(ctx)).hasMessageContaining("non-unsigned patch index ptype");

reader/src/test/java/io/github/dfa1/vortex/reader/decode/DateTimePartsEncodingDecoderTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ private static DecodeContext ctx(ByteBuffer meta, DType dtype, long n,
4848
ArrayNode s = ArrayNode.of(EncodingId.VORTEX_PRIMITIVE, null, new ArrayNode[0], new int[]{1});
4949
ArrayNode ss = ArrayNode.of(EncodingId.VORTEX_PRIMITIVE, null, new ArrayNode[0], new int[]{2});
5050
ArrayNode node = ArrayNode.of(EncodingId.VORTEX_DATETIMEPARTS, meta, new ArrayNode[]{d, s, ss}, new int[0]);
51-
return new DecodeContext(node, dtype, n, new MemorySegment[]{days, seconds, subseconds}, REGISTRY, Arena.global());
51+
return new DecodeContext(node, dtype, n, new MemorySegment[]{days, seconds, subseconds}, REGISTRY, Arena.ofAuto());
5252
}
5353

5454
@Test
@@ -62,7 +62,7 @@ void decode_missingMetadata_throws() {
6262
// Given a node with no metadata
6363
ArrayNode node = ArrayNode.of(EncodingId.VORTEX_DATETIMEPARTS, null, new ArrayNode[0], new int[0]);
6464
DecodeContext c = new DecodeContext(node, timestampDType(TimeUnit.Milliseconds, false), 1,
65-
new MemorySegment[0], REGISTRY, Arena.global());
65+
new MemorySegment[0], REGISTRY, Arena.ofAuto());
6666

6767
// When / Then
6868
assertThatThrownBy(() -> SUT.decode(c)).hasMessageContaining("missing metadata");

reader/src/test/java/io/github/dfa1/vortex/reader/decode/DeltaEncodingDecoderTest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ void decode_nullMetadata_returnsEmptyArray(PType ptype) {
4040
// always writes metadata)
4141
ArrayNode node = ArrayNode.of(EncodingId.FASTLANES_DELTA, null, new ArrayNode[0], new int[0]);
4242
DecodeContext ctx = new DecodeContext(node, new DType.Primitive(ptype, false), 0,
43-
new MemorySegment[0], REGISTRY, Arena.global());
43+
new MemorySegment[0], REGISTRY, Arena.ofAuto());
4444

4545
// When
4646
Array result = SUT.decode(ctx);
@@ -65,7 +65,7 @@ void decode_constantChildren_broadcastsAcrossChunk() {
6565

6666
// one element each → broadcast
6767
MemorySegment[] segs = {TestSegments.leLongs(0L), TestSegments.leLongs(0L)};
68-
DecodeContext ctx = new DecodeContext(node, new DType.Primitive(ptype, false), 4, segs, REGISTRY, Arena.global());
68+
DecodeContext ctx = new DecodeContext(node, new DType.Primitive(ptype, false), 4, segs, REGISTRY, Arena.ofAuto());
6969

7070
// When
7171
LongArray result = (LongArray) SUT.decode(ctx);
@@ -89,15 +89,15 @@ void decode_constantBases_nonZeroOffsetAndBase() {
8989
ArrayNode node = ArrayNode.of(EncodingId.FASTLANES_DELTA, meta, new ArrayNode[]{bases, deltas}, new int[0]);
9090

9191
MemorySegment[] segs = {TestSegments.leLongs(5L), TestSegments.leLongs(0L)};
92-
DecodeContext ctx = new DecodeContext(node, new DType.Primitive(ptype, false), 3, segs, REGISTRY, Arena.global());
92+
DecodeContext ctx = new DecodeContext(node, new DType.Primitive(ptype, false), 3, segs, REGISTRY, Arena.ofAuto());
9393

9494
// When
9595
LongArray result = (LongArray) SUT.decode(ctx);
9696

9797
// Then prefix-sum of zero deltas over base 5 stays 5 on lane 0
9898
assertThat(result.getLong(0)).isEqualTo(5L);
9999
// sanity: materialized bytes are little-endian
100-
MemorySegment seg = result.materialize(Arena.global());
100+
MemorySegment seg = result.materialize(Arena.ofAuto());
101101
assertThat(seg.get(PTypeIO.LE_LONG, 0)).isEqualTo(5L);
102102
}
103103
}

reader/src/test/java/io/github/dfa1/vortex/reader/decode/VarBinEncodingDecoderTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ void decode_broadcastOffsets_singleOffsetExpandsToAllRows() {
5656
// Given an offsets child holding a single value (as ConstantEncoding emits):
5757
// capacity 1 < n+1, so the decoder must broadcast-copy it. A constant offset
5858
// means every row spans an empty slice.
59-
MemorySegment data = Arena.global().allocate(1);
59+
MemorySegment data = Arena.ofAuto().allocate(1);
6060
MemorySegment offsets = TestSegments.leInts(0); // one element only
6161

6262
// When

reader/src/test/java/io/github/dfa1/vortex/reader/decode/ZigZagEncodingDecoderTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ class ZigZagEncodingDecoderTest {
3030
// --- zigzag encode helpers (mirror of the decoder's (u >>> 1) ^ -(u & 1)) ---
3131

3232
private static MemorySegment encodedBytes(byte... signed) {
33-
MemorySegment seg = Arena.global().allocate(signed.length);
33+
MemorySegment seg = Arena.ofAuto().allocate(signed.length);
3434
for (int i = 0; i < signed.length; i++) {
3535
seg.set(ValueLayout.JAVA_BYTE, i, (byte) ((signed[i] << 1) ^ (signed[i] >> 7)));
3636
}

0 commit comments

Comments
 (0)