diff --git a/README.md b/README.md index 086a3728..c3d207de 100644 --- a/README.md +++ b/README.md @@ -69,7 +69,7 @@ line-by-line diff is zero. io.github.dfa1.vortex vortex-reader - 0.12.2 + 0.13.0 ``` @@ -102,7 +102,7 @@ try (VortexReader vf = VortexReader.open(Path.of("data/example.vortex")); io.github.dfa1.vortex vortex-writer - 0.12.2 + 0.13.0 ``` diff --git a/cli/src/test/java/io/github/dfa1/vortex/cli/CliIT.java b/cli/src/test/java/io/github/dfa1/vortex/cli/CliIT.java index 4cafe0ed..8ed9975c 100644 --- a/cli/src/test/java/io/github/dfa1/vortex/cli/CliIT.java +++ b/cli/src/test/java/io/github/dfa1/vortex/cli/CliIT.java @@ -239,8 +239,9 @@ void importRejectsMultiCharacterDelimiter(@TempDir Path tmp) throws Exception { () -> ImportCommand.run(new String[]{"import", "--delimiter", "::", csvIn.toString()})); // Then - assertThat(stderr).contains("--delimiter must be exactly one character"); - assertThat(stderr).contains("usage: import [--delimiter ]"); + assertThat(stderr) + .contains("--delimiter must be exactly one character") + .contains("usage: import [--delimiter ]"); assertThat(tmp.resolve("data.vortex")).doesNotExist(); } } diff --git a/cli/src/test/java/io/github/dfa1/vortex/cli/tui/InspectorRenderTest.java b/cli/src/test/java/io/github/dfa1/vortex/cli/tui/InspectorRenderTest.java index 9e16aa50..b7c92069 100644 --- a/cli/src/test/java/io/github/dfa1/vortex/cli/tui/InspectorRenderTest.java +++ b/cli/src/test/java/io/github/dfa1/vortex/cli/tui/InspectorRenderTest.java @@ -248,9 +248,10 @@ void rendersFullRowWithAsciiGutter() { String row = InspectorRender.formatHexRow(data, 0); // Then — offset, hex columns, ASCII gutter - assertThat(row).startsWith("00000000 "); - assertThat(row).contains("41 42 43"); // A B C - assertThat(row).contains("|ABCDEFGHIJKLMNOP|"); + assertThat(row) + .startsWith("00000000 ") + .contains("41 42 43") // A B C + .contains("|ABCDEFGHIJKLMNOP|"); } @Test @@ -262,9 +263,10 @@ void padsShortTrailingRowAndDotsNonPrintable() { String row = InspectorRender.formatHexRow(data, 0); // Then — non-printable shows as '.', missing columns are padded - assertThat(row).startsWith("00000000 "); - assertThat(row).contains("78 00 79"); - assertThat(row).contains("|x.y"); + assertThat(row) + .startsWith("00000000 ") + .contains("78 00 79") + .contains("|x.y"); } } diff --git a/cli/src/test/java/io/github/dfa1/vortex/cli/tui/VortexGridTuiTest.java b/cli/src/test/java/io/github/dfa1/vortex/cli/tui/VortexGridTuiTest.java index 27193a8e..7f15501e 100644 --- a/cli/src/test/java/io/github/dfa1/vortex/cli/tui/VortexGridTuiTest.java +++ b/cli/src/test/java/io/github/dfa1/vortex/cli/tui/VortexGridTuiTest.java @@ -50,10 +50,11 @@ void navigatesAndRendersGrid() throws Exception { // Then — title, column header, and at least one decoded cell rendered String out = term.output(); - assertThat(out).contains("Vortex View"); - assertThat(out).contains("grid.vortex"); - assertThat(out).contains("q quit"); - assertThat(out).contains("a").contains("b").contains("c"); + assertThat(out) + .contains("Vortex View") + .contains("grid.vortex") + .contains("q quit") + .contains("a").contains("b").contains("c"); } @Test diff --git a/cli/src/test/java/io/github/dfa1/vortex/cli/tui/VortexInspectorTuiTest.java b/cli/src/test/java/io/github/dfa1/vortex/cli/tui/VortexInspectorTuiTest.java index 167778c2..471a89c7 100644 --- a/cli/src/test/java/io/github/dfa1/vortex/cli/tui/VortexInspectorTuiTest.java +++ b/cli/src/test/java/io/github/dfa1/vortex/cli/tui/VortexInspectorTuiTest.java @@ -50,9 +50,10 @@ void navigatesAndRendersInspector() throws Exception { // Then — header chrome and tree content rendered String out = term.output(); - assertThat(out).contains("vortex-inspect"); - assertThat(out).contains("struct"); - assertThat(out).contains("quit"); + assertThat(out) + .contains("vortex-inspect") + .contains("struct") + .contains("quit"); } @Test @@ -88,9 +89,10 @@ void deepExpand_rendersDictStatsAndDataPanes_synchronously() throws Exception { // Then — the dictionary, per-chunk stats, and data preview panes all rendered String out = term.output(); - assertThat(out).contains("Dictionary"); - assertThat(out).contains("Per-chunk stats"); - assertThat(out).contains("Data (column"); + assertThat(out) + .contains("Dictionary") + .contains("Per-chunk stats") + .contains("Data (column"); } @Test diff --git a/core/src/test/java/io/github/dfa1/vortex/core/model/ColumnNameTest.java b/core/src/test/java/io/github/dfa1/vortex/core/model/ColumnNameTest.java index 52a86757..0577b9c4 100644 Binary files a/core/src/test/java/io/github/dfa1/vortex/core/model/ColumnNameTest.java and b/core/src/test/java/io/github/dfa1/vortex/core/model/ColumnNameTest.java differ diff --git a/core/src/test/java/io/github/dfa1/vortex/core/proto/ProtoRuntimeTest.java b/core/src/test/java/io/github/dfa1/vortex/core/proto/ProtoRuntimeTest.java index 759d032b..e50f3be5 100644 --- a/core/src/test/java/io/github/dfa1/vortex/core/proto/ProtoRuntimeTest.java +++ b/core/src/test/java/io/github/dfa1/vortex/core/proto/ProtoRuntimeTest.java @@ -315,8 +315,7 @@ void recordsWithEqualByteArraysAreEqual() { ProtoScalarValue b = ProtoScalarValue.ofBytesValue(new byte[]{1, 2, 3}); // When + Then - assertThat(a).isEqualTo(b); - assertThat(a).hasSameHashCodeAs(b); + assertThat(a).isEqualTo(b).hasSameHashCodeAs(b); } @Test diff --git a/docs/compatibility.md b/docs/compatibility.md index 1df2910f..d4a0c31c 100644 --- a/docs/compatibility.md +++ b/docs/compatibility.md @@ -12,14 +12,14 @@ A consumer that only needs to read Vortex files can depend on a strict subset: io.github.dfa1.vortex vortex-reader - 0.12.2 + 0.13.0 io.github.dfa1.vortex vortex-inspector - 0.12.2 + 0.13.0 ``` diff --git a/docs/reference.md b/docs/reference.md index 8898f686..3d154aa9 100644 --- a/docs/reference.md +++ b/docs/reference.md @@ -130,11 +130,11 @@ Accepted array types per column `DType`: ### `WriteOptions` (`io.github.dfa1.vortex.writer.WriteOptions`) -Record: `(int chunkSize, boolean enableZoneMaps, double compressionRatioThreshold, int allowedCascading, boolean globalDict, boolean enableZstd, long globalDictMaxRetainedBytes, Map editions)`. +Record: `(int chunkSize, boolean enableZoneMaps, double compressionRatioThreshold, int allowedCascading, boolean globalDict, boolean enableZstd, MemorySize globalDictMaxRetainedBytes, Map editions)`. | Factory | Defaults | |---------------------------------|---------------------------------------------------------------------------------------------------| -| `WriteOptions.defaults()` | `chunkSize=65_536`, `enableZoneMaps=true`, `compressionRatioThreshold=0.90`, `allowedCascading=0`, `globalDict=true`, `enableZstd=false`, `globalDictMaxRetainedBytes=2 GB`, `editions={CORE: Editions.CORE_2026_07_0}` | +| `WriteOptions.defaults()` | `chunkSize=65_536`, `enableZoneMaps=true`, `compressionRatioThreshold=0.90`, `allowedCascading=0`, `globalDict=true`, `enableZstd=false`, `globalDictMaxRetainedBytes=MemorySize.ofGiB(2)`, `editions={CORE: Editions.CORE_2026_07_0}` | | `WriteOptions.cascading(depth)` | Same defaults, `allowedCascading=depth` | | Method | Notes | diff --git a/docs/tutorial.md b/docs/tutorial.md index 3260b918..30a5a8e3 100644 --- a/docs/tutorial.md +++ b/docs/tutorial.md @@ -26,7 +26,7 @@ Add the dependency to `pom.xml` (inside ``): io.github.dfa1.vortex vortex-reader - 0.12.2 + 0.13.0 ``` diff --git a/fbs-gen/src/test/java/io/github/dfa1/vortex/fbsgen/CodeGenTest.java b/fbs-gen/src/test/java/io/github/dfa1/vortex/fbsgen/CodeGenTest.java index 0a2fb59f..c465d95b 100644 --- a/fbs-gen/src/test/java/io/github/dfa1/vortex/fbsgen/CodeGenTest.java +++ b/fbs-gen/src/test/java/io/github/dfa1/vortex/fbsgen/CodeGenTest.java @@ -53,15 +53,16 @@ void emitsScalarVectorAndChildAccessorsForTable() throws IOException { String src = generateOne("FbsLayout.java"); // Then — accessors match the flatc read shapes (widened unsigned types). - assertThat(src).contains("extends FbsTable"); - assertThat(src).contains("public int encoding() {"); - assertThat(src).contains("public long rowCount() {"); - assertThat(src).contains("public MemorySegment metadataAsSegment() {"); - assertThat(src).contains("public int childrenLength() {"); - assertThat(src).contains("public FbsLayout children(int j) {"); - assertThat(src).contains("indirect(vectorElements(o) + (long) j * 4)"); - assertThat(src).contains("public long segments(int j) {"); - assertThat(src).contains("readInt(vectorElements(o) + (long) j * 4) & 0xFFFFFFFFL"); + assertThat(src) + .contains("extends FbsTable") + .contains("public int encoding() {") + .contains("public long rowCount() {") + .contains("public MemorySegment metadataAsSegment() {") + .contains("public int childrenLength() {") + .contains("public FbsLayout children(int j) {") + .contains("indirect(vectorElements(o) + (long) j * 4)") + .contains("public long segments(int j) {") + .contains("readInt(vectorElements(o) + (long) j * 4) & 0xFFFFFFFFL"); } @Test @@ -71,12 +72,13 @@ void emitsInlineOffsetsForStruct() throws IOException { String src = generateOne("FbsBuffer.java"); // Then - assertThat(src).contains("extends FbsMemorySegment"); - assertThat(src).contains("8 bytes"); - assertThat(src).contains("public int padding() {\n return readShort(0) & 0xFFFF;"); - assertThat(src).contains("public int alignmentExponent() {\n return readByte(2) & 0xFF;"); - assertThat(src).contains("public int compression() {\n return readByte(3) & 0xFF;"); - assertThat(src).contains("public long length() {\n return readInt(4) & 0xFFFFFFFFL;"); + assertThat(src) + .contains("extends FbsMemorySegment") + .contains("8 bytes") + .contains("public int padding() {\n return readShort(0) & 0xFFFF;") + .contains("public int alignmentExponent() {\n return readByte(2) & 0xFF;") + .contains("public int compression() {\n return readByte(3) & 0xFF;") + .contains("public long length() {\n return readInt(4) & 0xFFFFFFFFL;"); } @Test @@ -85,11 +87,12 @@ void emitsDiscriminatorAndMemberPositionForUnionField() throws IOException { String src = generateOne("FbsDType.java"); // Then — discriminator at vtable slot 4, value (member) projected from slot 6. - assertThat(src).contains("public int typeType() {"); - assertThat(src).contains("fieldOffset(4)"); - assertThat(src).contains("public T type(T obj) {"); - assertThat(src).contains("locate(obj, unionMemberPosition(o))"); - assertThat(src).contains("fieldOffset(6)"); + assertThat(src) + .contains("public int typeType() {") + .contains("fieldOffset(4)") + .contains("public T type(T obj) {") + .contains("locate(obj, unionMemberPosition(o))") + .contains("fieldOffset(6)"); } @Test @@ -98,9 +101,10 @@ void emitsUnionConstantsHolder() throws IOException { String src = generateOne("FbsType.java"); // Then — NONE plus members with explicit discriminators (byte, like flatc). - assertThat(src).contains("public static final byte NONE = 0;"); - assertThat(src).contains("public static final byte FbsNull = (byte) 1;"); - assertThat(src).contains("public static final byte FbsUnion = (byte) 12;"); + assertThat(src) + .contains("public static final byte NONE = 0;") + .contains("public static final byte FbsNull = (byte) 1;") + .contains("public static final byte FbsUnion = (byte) 12;"); } @Test @@ -109,8 +113,9 @@ void emitsEnumConstantsOverUnderlyingType() throws IOException { String src = generateOne("FbsPType.java"); // Then — byte constants, auto-numbered from 0. - assertThat(src).contains("public static final byte U8 = (byte) 0;"); - assertThat(src).contains("public static final byte F64 = (byte) 10;"); + assertThat(src) + .contains("public static final byte U8 = (byte) 0;") + .contains("public static final byte F64 = (byte) 10;"); } private static void generate(Path out) throws IOException { diff --git a/fsst/src/test/java/io/github/dfa1/vortex/fsst/LossyPerfectHashTableTest.java b/fsst/src/test/java/io/github/dfa1/vortex/fsst/LossyPerfectHashTableTest.java index 29eb9f99..a8f3f35f 100644 --- a/fsst/src/test/java/io/github/dfa1/vortex/fsst/LossyPerfectHashTableTest.java +++ b/fsst/src/test/java/io/github/dfa1/vortex/fsst/LossyPerfectHashTableTest.java @@ -21,7 +21,7 @@ void lookup_realThreeByteSymbol_resolvesCode() { // Then — packed as code << 8 | length; a hit is never 0. assertThat(result).isNotZero(); - assertThat(result >>> 8).isEqualTo(0); + assertThat(result >>> 8).isZero(); assertThat(result & 0xFF).isEqualTo(3); } @@ -71,7 +71,7 @@ void lookup_hashCollisionInGainOrder_higherGainWinsSlotLowerGainMisses() { // Then — the higher-gain (first-inserted) symbol wins; the lower-gain one correctly misses // and does not corrupt or masquerade as the winner. assertThat(higher).isNotZero(); - assertThat(higher >>> 8).isEqualTo(0); + assertThat(higher >>> 8).isZero(); assertThat(lower).isZero(); } diff --git a/fsst/src/test/java/io/github/dfa1/vortex/fsst/MatcherTest.java b/fsst/src/test/java/io/github/dfa1/vortex/fsst/MatcherTest.java index bdee9fe5..a7b5e90e 100644 --- a/fsst/src/test/java/io/github/dfa1/vortex/fsst/MatcherTest.java +++ b/fsst/src/test/java/io/github/dfa1/vortex/fsst/MatcherTest.java @@ -27,7 +27,7 @@ void longestMatch_eightByteSymbol_picksHashTableMatch() { int result = sut.longestMatch(wordOf("ABCDEFGH")); // Then — the longest (8-byte) symbol wins. - assertThat(Matcher.codeOf(result)).isEqualTo(0); + assertThat(Matcher.codeOf(result)).isZero(); assertThat(Matcher.lengthOf(result)).isEqualTo(8); } @@ -81,7 +81,7 @@ void longestMatch_unmatchedByte_signalsNoMatch() { int result = sut.longestMatch(wordOf("zzzzzzzz")); // Then - assertThat(Matcher.lengthOf(result)).isEqualTo(0); + assertThat(Matcher.lengthOf(result)).isZero(); assertThat(Matcher.codeOf(result)).isEqualTo(ShortCodeTable.NO_CODE); } diff --git a/fsst/src/test/java/io/github/dfa1/vortex/fsst/ShortCodeTableTest.java b/fsst/src/test/java/io/github/dfa1/vortex/fsst/ShortCodeTableTest.java index 0fdffec9..30e9fea1 100644 --- a/fsst/src/test/java/io/github/dfa1/vortex/fsst/ShortCodeTableTest.java +++ b/fsst/src/test/java/io/github/dfa1/vortex/fsst/ShortCodeTableTest.java @@ -21,7 +21,7 @@ void codeFor_singleByteSymbol_resolvesLengthOne() { int length = sut.lengthFor(word); // Then - assertThat(code).isEqualTo(0); + assertThat(code).isZero(); assertThat(length).isEqualTo(1); } @@ -57,7 +57,7 @@ void codeFor_singleByteFallbackWhenTwoByteDiffers() { int length = sut.lengthFor(word); // Then - assertThat(code).isEqualTo(0); + assertThat(code).isZero(); assertThat(length).isEqualTo(1); } @@ -74,7 +74,7 @@ void codeFor_byteWithNoSymbol_resolvesNoMatch() { // Then — the caller must escape this byte. assertThat(code).isEqualTo(ShortCodeTable.NO_CODE); - assertThat(length).isEqualTo(0); + assertThat(length).isZero(); } @Test @@ -88,7 +88,7 @@ void codeFor_longSymbolsIgnored() { int length = sut.lengthFor(word); // Then - assertThat(length).isEqualTo(0); + assertThat(length).isZero(); } /// Packs the low bytes of `s` LSB-first into a word, matching the reader's little-endian diff --git a/inspector/src/test/java/io/github/dfa1/vortex/inspect/VortexInspectorTest.java b/inspector/src/test/java/io/github/dfa1/vortex/inspect/VortexInspectorTest.java index 5f3526a5..c65b5546 100644 --- a/inspector/src/test/java/io/github/dfa1/vortex/inspect/VortexInspectorTest.java +++ b/inspector/src/test/java/io/github/dfa1/vortex/inspect/VortexInspectorTest.java @@ -82,8 +82,7 @@ void render_nonStruct_inlinesSingleColumnLayout() { String result = VortexInspector.render(sut); // Then - assertThat(result).contains("vortex.flat(100 rows)"); - assertThat(result).doesNotContain("struct ("); + assertThat(result).contains("vortex.flat(100 rows)").doesNotContain("struct ("); } @Test @@ -163,8 +162,7 @@ void render_columnWithoutStats_omitsMinMax() { String result = VortexInspector.render(sut); // Then - assertThat(result).doesNotContain("min="); - assertThat(result).doesNotContain("max="); + assertThat(result).doesNotContain("min=").doesNotContain("max="); } @Test diff --git a/integration/src/test/java/io/github/dfa1/vortex/integration/FileSizeComparisonIntegrationTest.java b/integration/src/test/java/io/github/dfa1/vortex/integration/FileSizeComparisonIntegrationTest.java index 5166aea7..5eefd53a 100644 --- a/integration/src/test/java/io/github/dfa1/vortex/integration/FileSizeComparisonIntegrationTest.java +++ b/integration/src/test/java/io/github/dfa1/vortex/integration/FileSizeComparisonIntegrationTest.java @@ -201,11 +201,10 @@ void fileSizeComparison(@TempDir Path tmp) throws IOException { (double) javaSize / jniSize, (double) csvSize / javaSize); - // Then — Java beats CSV - assertThat(javaSize).isLessThan(csvSize); - - // Then — Java within 2x of JNI (both use cascading(3)) - assertThat(javaSize).isLessThan(jniSize * 2); + // Then — Java beats CSV, and stays within 2x of JNI (both use cascading(3)) + assertThat(javaSize) + .isLessThan(csvSize) + .isLessThan(jniSize * 2); // Then — Java file is readable with correct row count var totalRows = new java.util.concurrent.atomic.AtomicLong(); diff --git a/integration/src/test/java/io/github/dfa1/vortex/integration/OhlcEncodingInspectionIntegrationTest.java b/integration/src/test/java/io/github/dfa1/vortex/integration/OhlcEncodingInspectionIntegrationTest.java index 3204e77f..089b8fc6 100644 --- a/integration/src/test/java/io/github/dfa1/vortex/integration/OhlcEncodingInspectionIntegrationTest.java +++ b/integration/src/test/java/io/github/dfa1/vortex/integration/OhlcEncodingInspectionIntegrationTest.java @@ -132,8 +132,7 @@ void inspect_ohlcFile_showsColumnEncodings(@TempDir Path tmp) throws IOException // Then System.out.println(result); - assertThat(result).contains("volume"); - assertThat(result).contains("Used encodings:"); + assertThat(result).contains("volume").contains("Used encodings:"); } @Test diff --git a/integration/src/test/java/io/github/dfa1/vortex/integration/VortexInspectorIntegrationTest.java b/integration/src/test/java/io/github/dfa1/vortex/integration/VortexInspectorIntegrationTest.java index 6cf08aad..7402326e 100644 --- a/integration/src/test/java/io/github/dfa1/vortex/integration/VortexInspectorIntegrationTest.java +++ b/integration/src/test/java/io/github/dfa1/vortex/integration/VortexInspectorIntegrationTest.java @@ -81,11 +81,12 @@ void inspect_showsFileInfoAndEncodings(@TempDir Path tmp) throws IOException { // Then System.out.println(result); - assertThat(result).contains("Vortex v"); - assertThat(result).contains("id"); - assertThat(result).contains("value"); - assertThat(result).contains("Registered encodings:"); - assertThat(result).contains("Used encodings:"); - assertThat(result).contains("Layout:"); + assertThat(result) + .contains("Vortex v") + .contains("id") + .contains("value") + .contains("Registered encodings:") + .contains("Used encodings:") + .contains("Layout:"); } } diff --git a/proto-gen/src/test/java/io/github/dfa1/vortex/protogen/CodeGenTest.java b/proto-gen/src/test/java/io/github/dfa1/vortex/protogen/CodeGenTest.java index 41b3b2d2..bd11e492 100644 --- a/proto-gen/src/test/java/io/github/dfa1/vortex/protogen/CodeGenTest.java +++ b/proto-gen/src/test/java/io/github/dfa1/vortex/protogen/CodeGenTest.java @@ -49,12 +49,13 @@ void generatedBitPackedMetadataHasExpectedComponents(@TempDir Path tmp) throws I String src = Files.readString(tmp.resolve("ProtoBitPackedMetadata.java")); // Then - assertThat(src).contains("public record ProtoBitPackedMetadata("); - assertThat(src).contains("int bit_width"); - assertThat(src).contains("int offset"); - assertThat(src).contains("ProtoPatchesMetadata patches"); - assertThat(src).contains("public static ProtoBitPackedMetadata decode(MemorySegment __seg, long __off, long __len)"); - assertThat(src).contains("public byte[] encode()"); + assertThat(src) + .contains("public record ProtoBitPackedMetadata(") + .contains("int bit_width") + .contains("int offset") + .contains("ProtoPatchesMetadata patches") + .contains("public static ProtoBitPackedMetadata decode(MemorySegment __seg, long __off, long __len)") + .contains("public byte[] encode()"); } private static Ast.ProtoFile parse(Path p) throws IOException { diff --git a/reader/src/test/java/io/github/dfa1/vortex/reader/array/ArrayMaterializeTest.java b/reader/src/test/java/io/github/dfa1/vortex/reader/array/ArrayMaterializeTest.java index 0701be53..c7c2367e 100644 --- a/reader/src/test/java/io/github/dfa1/vortex/reader/array/ArrayMaterializeTest.java +++ b/reader/src/test/java/io/github/dfa1/vortex/reader/array/ArrayMaterializeTest.java @@ -125,7 +125,7 @@ void zigzagDecodesSignedZigzagPattern() { MemorySegment result = sut.materialize(arena); // Then - assertThat(result.getAtIndex(VortexFormat.LE_LONG, 0)).isEqualTo(0L); + assertThat(result.getAtIndex(VortexFormat.LE_LONG, 0)).isZero(); assertThat(result.getAtIndex(VortexFormat.LE_LONG, 1)).isEqualTo(-1L); assertThat(result.getAtIndex(VortexFormat.LE_LONG, 2)).isEqualTo(1L); assertThat(result.getAtIndex(VortexFormat.LE_LONG, 3)).isEqualTo(-2L); @@ -159,7 +159,7 @@ void chunkedConcatenatesChildrenInOrder() { // Then one contiguous segment spanning both chunks assertThat(result.byteSize()).isEqualTo(5 * 8L); - assertThat(result.getAtIndex(VortexFormat.LE_LONG, 0)).isEqualTo(0L); + assertThat(result.getAtIndex(VortexFormat.LE_LONG, 0)).isZero(); assertThat(result.getAtIndex(VortexFormat.LE_LONG, 3)).isEqualTo(3L); assertThat(result.getAtIndex(VortexFormat.LE_LONG, 4)).isEqualTo(4L); } diff --git a/reader/src/test/java/io/github/dfa1/vortex/reader/compute/PredicateTest.java b/reader/src/test/java/io/github/dfa1/vortex/reader/compute/PredicateTest.java index 49189098..7f7a13aa 100644 --- a/reader/src/test/java/io/github/dfa1/vortex/reader/compute/PredicateTest.java +++ b/reader/src/test/java/io/github/dfa1/vortex/reader/compute/PredicateTest.java @@ -291,8 +291,7 @@ void structurallyIdenticalTreesAreEqual() { Predicate result = new Predicate.And(new Predicate.Gt(0), new Predicate.Lt(10)); // Then the record contract gives value equality and matching hash codes - assertThat(sut).isEqualTo(result); - assertThat(sut).hasSameHashCodeAs(result); + assertThat(sut).isEqualTo(result).hasSameHashCodeAs(result); } @Test @@ -316,8 +315,7 @@ void noArgVariantsOfSameTypeAreEqual() { Predicate result = new Predicate.IsNull(); // Then they are equal, while a different no-arg variant is not - assertThat(sut).isEqualTo(result); - assertThat(sut).isNotEqualTo(new Predicate.IsNotNull()); + assertThat(sut).isEqualTo(result).isNotEqualTo(new Predicate.IsNotNull()); } } diff --git a/reader/src/test/java/io/github/dfa1/vortex/reader/decode/BoolEncodingDecoderTest.java b/reader/src/test/java/io/github/dfa1/vortex/reader/decode/BoolEncodingDecoderTest.java index fbf7e684..48e7cf29 100644 --- a/reader/src/test/java/io/github/dfa1/vortex/reader/decode/BoolEncodingDecoderTest.java +++ b/reader/src/test/java/io/github/dfa1/vortex/reader/decode/BoolEncodingDecoderTest.java @@ -72,8 +72,7 @@ void decode_nonNullable_returnsBoolArray(String name, boolean[] values) { var result = sut.decode(ctx); // Then — non-nullable path returns a plain BoolArray, not a MaskedArray - assertThat(result).isInstanceOf(BoolArray.class); - assertThat(result).isNotInstanceOf(MaskedArray.class); + assertThat(result).isInstanceOf(BoolArray.class).isNotInstanceOf(MaskedArray.class); assertThat(result.length()).isEqualTo(values.length); BoolArray boolArr = (BoolArray) result; for (int i = 0; i < values.length; i++) { diff --git a/writer/src/test/java/io/github/dfa1/vortex/writer/ColumnZoneStatsTest.java b/writer/src/test/java/io/github/dfa1/vortex/writer/ColumnZoneStatsTest.java index 987459ae..f6ddf17d 100644 --- a/writer/src/test/java/io/github/dfa1/vortex/writer/ColumnZoneStatsTest.java +++ b/writer/src/test/java/io/github/dfa1/vortex/writer/ColumnZoneStatsTest.java @@ -79,7 +79,7 @@ void perZoneMinMaxSumNullCount(@TempDir Path tmp) throws IOException { assertThat(result.get(0).min()).isEqualTo(1L); assertThat(result.get(0).max()).isEqualTo(50L); assertThat(result.get(0).sum()).isEqualTo(1275L); // 1+..+50 - assertThat(result.get(0).nullCount()).isEqualTo(0L); + assertThat(result.get(0).nullCount()).isZero(); assertThat(result.get(1).min()).isEqualTo(51L); assertThat(result.get(1).max()).isEqualTo(100L); assertThat(result.get(1).sum()).isEqualTo(3775L); // 51+..+100