diff --git a/src/test/java/org/apache/datasketches/kll/KllCrossLanguageTest.java b/src/test/java/org/apache/datasketches/kll/KllCrossLanguageTest.java index 45fb4d8c9..f1b578229 100644 --- a/src/test/java/org/apache/datasketches/kll/KllCrossLanguageTest.java +++ b/src/test/java/org/apache/datasketches/kll/KllCrossLanguageTest.java @@ -44,6 +44,7 @@ import org.apache.datasketches.quantilescommon.QuantilesDoublesSketchIteratorAPI; import org.apache.datasketches.quantilescommon.QuantilesFloatsSketchIterator; import org.apache.datasketches.quantilescommon.QuantilesGenericSketchIteratorAPI; +import org.apache.datasketches.quantilescommon.QuantilesLongsSketchIterator; import org.testng.annotations.Test; /** @@ -209,4 +210,28 @@ public int compare(final String s1, final String s2) { } } + @Test(groups = {CHECK_CPP_FILES}) + public void kllLong() throws IOException { + final int[] nArr = {0, 10, 100, 1000, 10000, 100000, 1000000}; + for (final int n: nArr) { + final byte[] bytes = Files.readAllBytes(cppPath.resolve("kll_long_n" + n + "_cpp.sk")); + final KllLongsSketch sketch = KllLongsSketch.heapify(MemorySegment.ofArray(bytes)); + assertEquals(sketch.getK(), 200); + assertTrue(n == 0 ? sketch.isEmpty() : !sketch.isEmpty()); + assertTrue(n > 100 ? sketch.isEstimationMode() : !sketch.isEstimationMode()); + assertEquals(sketch.getN(), n); + if (n > 0) { + assertEquals(sketch.getMinItem(), 1); + assertEquals(sketch.getMaxItem(), n); + long weight = 0; + final QuantilesLongsSketchIterator it = sketch.iterator(); + while (it.next()) { + assertTrue(it.getQuantile() >= sketch.getMinItem()); + assertTrue(it.getQuantile() <= sketch.getMaxItem()); + weight += it.getWeight(); + } + assertEquals(weight, n); + } + } + } }