Skip to content

Commit 8741dad

Browse files
dfa1claude
andcommitted
test(reader): cover Float/Byte/Short/Int/Double materialize defaults
ArrayMaterializeTest covered only the Long and Bool scalar fallbacks. Add the remaining numeric interface defaults, reached through Offset*Array views (which don't override materialize, unlike the Materialized* records). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1 parent 77fad50 commit 8741dad

1 file changed

Lines changed: 82 additions & 0 deletions

File tree

reader/src/test/java/io/github/dfa1/vortex/reader/array/ArrayMaterializeTest.java

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,11 @@
1616
import static io.github.dfa1.vortex.encoding.DTypes.I64;
1717
import static io.github.dfa1.vortex.reader.array.TestArrays.bools;
1818
import static io.github.dfa1.vortex.reader.array.TestArrays.bytes;
19+
import static io.github.dfa1.vortex.reader.array.TestArrays.doubles;
20+
import static io.github.dfa1.vortex.reader.array.TestArrays.floats;
21+
import static io.github.dfa1.vortex.reader.array.TestArrays.ints;
1922
import static io.github.dfa1.vortex.reader.array.TestArrays.longs;
23+
import static io.github.dfa1.vortex.reader.array.TestArrays.shorts;
2024
import static org.assertj.core.api.Assertions.assertThat;
2125
import static org.assertj.core.api.Assertions.assertThatThrownBy;
2226

@@ -309,6 +313,84 @@ void unknownArrayThrows() {
309313
}
310314
}
311315

316+
/// The scalar/per-element `materialize` fallback on each primitive [Array] interface, reached
317+
/// through an `Offset*Array` view (which does not override `materialize`, unlike the buffer-backed
318+
/// `Materialized*` records). The Long and Bool defaults are covered above; this group fills in the
319+
/// remaining numeric interfaces.
320+
@Nested
321+
class PrimitiveScalarDefaults {
322+
323+
@Test
324+
void floatViewDecodesEveryElementThroughGetFloat() {
325+
// Given an OffsetFloatArray view (FloatArray.materialize default, not a buffer return)
326+
Array sut = floats(1.5f, 2.5f, 3.5f, 4.5f).limited(3);
327+
328+
// When
329+
MemorySegment result = sut.materialize(arena);
330+
331+
// Then the kept prefix is written as little-endian f32
332+
assertThat(result.byteSize()).isEqualTo(3 * 4L);
333+
assertThat(result.getAtIndex(PTypeIO.LE_FLOAT, 0)).isEqualTo(1.5f);
334+
assertThat(result.getAtIndex(PTypeIO.LE_FLOAT, 2)).isEqualTo(3.5f);
335+
}
336+
337+
@Test
338+
void byteViewDecodesEveryElementThroughGetByte() {
339+
// Given an OffsetByteArray view (ByteArray.materialize default)
340+
Array sut = bytes((byte) 10, (byte) 20, (byte) 30, (byte) 40).limited(3);
341+
342+
// When
343+
MemorySegment result = sut.materialize(arena);
344+
345+
// Then one byte per element
346+
assertThat(result.byteSize()).isEqualTo(3L);
347+
assertThat(result.get(ValueLayout.JAVA_BYTE, 0)).isEqualTo((byte) 10);
348+
assertThat(result.get(ValueLayout.JAVA_BYTE, 2)).isEqualTo((byte) 30);
349+
}
350+
351+
@Test
352+
void shortViewDecodesEveryElementThroughGetShort() {
353+
// Given an OffsetShortArray view (ShortArray.materialize default)
354+
Array sut = shorts((short) 100, (short) 200, (short) 300, (short) 400).limited(3);
355+
356+
// When
357+
MemorySegment result = sut.materialize(arena);
358+
359+
// Then little-endian i16
360+
assertThat(result.byteSize()).isEqualTo(3 * 2L);
361+
assertThat(result.getAtIndex(PTypeIO.LE_SHORT, 0)).isEqualTo((short) 100);
362+
assertThat(result.getAtIndex(PTypeIO.LE_SHORT, 2)).isEqualTo((short) 300);
363+
}
364+
365+
@Test
366+
void intViewDecodesEveryElementThroughGetInt() {
367+
// Given an OffsetIntArray view (IntArray.materialize default)
368+
Array sut = ints(1, 2, 3, 4).limited(3);
369+
370+
// When
371+
MemorySegment result = sut.materialize(arena);
372+
373+
// Then little-endian i32
374+
assertThat(result.byteSize()).isEqualTo(3 * 4L);
375+
assertThat(result.getAtIndex(PTypeIO.LE_INT, 0)).isEqualTo(1);
376+
assertThat(result.getAtIndex(PTypeIO.LE_INT, 2)).isEqualTo(3);
377+
}
378+
379+
@Test
380+
void doubleViewDecodesEveryElementThroughGetDouble() {
381+
// Given an OffsetDoubleArray view (DoubleArray.materialize default)
382+
Array sut = doubles(1.5, 2.5, 3.5).limited(2);
383+
384+
// When
385+
MemorySegment result = sut.materialize(arena);
386+
387+
// Then little-endian f64
388+
assertThat(result.byteSize()).isEqualTo(2 * 8L);
389+
assertThat(result.getAtIndex(PTypeIO.LE_DOUBLE, 0)).isEqualTo(1.5);
390+
assertThat(result.getAtIndex(PTypeIO.LE_DOUBLE, 1)).isEqualTo(2.5);
391+
}
392+
}
393+
312394
private MemorySegment encodedLongs(long... vs) {
313395
MemorySegment seg = arena.allocate(vs.length * 8L, 8);
314396
for (int i = 0; i < vs.length; i++) {

0 commit comments

Comments
 (0)