I added a missing test class KllDirectCompactItemsSketchIteratorTest.
Other than that all the rest of the changes are small edits to bring
sister main and test classes into alignment. I can't do this exactly
with the "items" test classes, but I tried to make sure we are testing
similar types of corner cases with the generic tests.
diff --git a/src/main/java/org/apache/datasketches/kll/KllDirectDoublesSketch.java b/src/main/java/org/apache/datasketches/kll/KllDirectDoublesSketch.java
index 58438c0..64e340d 100644
--- a/src/main/java/org/apache/datasketches/kll/KllDirectDoublesSketch.java
+++ b/src/main/java/org/apache/datasketches/kll/KllDirectDoublesSketch.java
@@ -63,7 +63,7 @@
private MemoryRequestServer memReqSvr;
/**
- * Constructs from Memory or WritableMemory already initialized with a sketch image and validated..
+ * Constructs from Memory or WritableMemory already initialized with a sketch image and validated.
* @param wmem the current WritableMemory
* @param memReqSvr the given MemoryRequestServer to request a larger WritableMemory
* @param memVal the MemoryValadate object
@@ -81,14 +81,14 @@
}
/**
- * Create a new instance of this sketch.
+ * Create a new updatable, direct instance of this sketch.
* @param k parameter that controls size of the sketch and accuracy of estimates
* @param m parameter that controls the minimum level width in items.
* @param dstMem the given destination WritableMemory object for use by the sketch
* @param memReqSvr the given MemoryRequestServer to request a larger WritableMemory
* @return a new instance of this sketch
*/
- static KllDirectDoublesSketch newDirectInstance(
+ static KllDirectDoublesSketch newDirectUpdatableInstance(
final int k,
final int m,
final WritableMemory dstMem,
@@ -129,9 +129,9 @@
if (sketchStructure == COMPACT_EMPTY || isEmpty()) { throw new SketchesArgumentException(EMPTY_MSG); }
else if (sketchStructure == COMPACT_SINGLE) { return getDoubleSingleItem(); }
else if (sketchStructure == COMPACT_FULL) {
- levelsArrBytes = getLevelsArrBytes(COMPACT_FULL);
+ levelsArrBytes = getLevelsArrSizeBytes(COMPACT_FULL);
} else { //UPDATABLE
- levelsArrBytes = getLevelsArrBytes(UPDATABLE);
+ levelsArrBytes = getLevelsArrSizeBytes(UPDATABLE);
}
final int offset = DATA_START_ADR + levelsArrBytes + ITEM_BYTES;
return wmem.getDouble(offset);
@@ -143,9 +143,9 @@
if (sketchStructure == COMPACT_EMPTY || isEmpty()) { throw new SketchesArgumentException(EMPTY_MSG); }
else if (sketchStructure == COMPACT_SINGLE) { return getDoubleSingleItem(); }
else if (sketchStructure == COMPACT_FULL) {
- levelsArrBytes = getLevelsArrBytes(COMPACT_FULL);
+ levelsArrBytes = getLevelsArrSizeBytes(COMPACT_FULL);
} else { //UPDATABLE
- levelsArrBytes = getLevelsArrBytes(UPDATABLE);
+ levelsArrBytes = getLevelsArrSizeBytes(UPDATABLE);
}
final int offset = DATA_START_ADR + levelsArrBytes;
return wmem.getDouble(offset);
@@ -171,7 +171,7 @@
}
final int capacityItems = KllHelper.computeTotalItemCapacity(k, getM(), getNumLevels());
final double[] doubleItemsArr = new double[capacityItems];
- final int offset = DATA_START_ADR + getLevelsArrBytes(sketchStructure) + 2 * ITEM_BYTES;
+ final int offset = DATA_START_ADR + getLevelsArrSizeBytes(sketchStructure) + 2 * ITEM_BYTES;
final int shift = (sketchStructure == COMPACT_FULL) ? levelsArr[0] : 0;
final int numItems = (sketchStructure == COMPACT_FULL) ? getNumRetained() : capacityItems;
wmem.getDoubleArray(offset, doubleItemsArr, shift, numItems);
@@ -184,7 +184,7 @@
if (sketchStructure == COMPACT_SINGLE) { return new double[] { getDoubleSingleItem() }; }
final int numRetained = getNumRetained();
final double[] doubleItemsArr = new double[numRetained];
- final int offset = DATA_START_ADR + getLevelsArrBytes(sketchStructure) + 2 * ITEM_BYTES
+ final int offset = DATA_START_ADR + getLevelsArrSizeBytes(sketchStructure) + 2 * ITEM_BYTES
+ (sketchStructure == COMPACT_FULL ? 0 : levelsArr[0] * ITEM_BYTES);
wmem.getDoubleArray(offset, doubleItemsArr, 0, numRetained);
return doubleItemsArr;
@@ -198,9 +198,9 @@
}
final int offset;
if (sketchStructure == COMPACT_FULL) {
- offset = DATA_START_ADR + getLevelsArrBytes(sketchStructure) + 2 * ITEM_BYTES;
+ offset = DATA_START_ADR + getLevelsArrSizeBytes(sketchStructure) + 2 * ITEM_BYTES;
} else { //sketchStructure == UPDATABLE
- offset = DATA_START_ADR + getLevelsArrBytes(sketchStructure) + (2 + getK() - 1) * ITEM_BYTES;
+ offset = DATA_START_ADR + getLevelsArrSizeBytes(sketchStructure) + (2 + getK() - 1) * ITEM_BYTES;
}
return wmem.getDouble(offset);
}
@@ -235,7 +235,7 @@
return bytesOut;
}
//sketchStructure == UPDATABLE OR COMPACT_FULL
- offset = DATA_START_ADR + getLevelsArrBytes(sketchStructure);
+ offset = DATA_START_ADR + getLevelsArrSizeBytes(sketchStructure);
wmem.getByteArray(offset, bytesOut, 0, ITEM_BYTES);
wmem.getByteArray(offset + ITEM_BYTES, bytesOut, ITEM_BYTES, ITEM_BYTES);
return bytesOut;
@@ -287,7 +287,7 @@
@Override
void setDoubleItemsArray(final double[] doubleItems) {
if (readOnly) { throw new SketchesArgumentException(TGT_IS_READ_ONLY_MSG); }
- final int offset = DATA_START_ADR + getLevelsArrBytes(sketchStructure) + 2 * ITEM_BYTES;
+ final int offset = DATA_START_ADR + getLevelsArrSizeBytes(sketchStructure) + 2 * ITEM_BYTES;
wmem.putDoubleArray(offset, doubleItems, 0, doubleItems.length);
}
@@ -295,7 +295,7 @@
void setDoubleItemsArrayAt(final int index, final double item) {
if (readOnly) { throw new SketchesArgumentException(TGT_IS_READ_ONLY_MSG); }
final int offset =
- DATA_START_ADR + getLevelsArrBytes(sketchStructure) + (index + 2) * ITEM_BYTES;
+ DATA_START_ADR + getLevelsArrSizeBytes(sketchStructure) + (index + 2) * ITEM_BYTES;
wmem.putDouble(offset, item);
}
@@ -308,14 +308,14 @@
@Override
void setMaxItem(final double item) {
if (readOnly) { throw new SketchesArgumentException(TGT_IS_READ_ONLY_MSG); }
- final int offset = DATA_START_ADR + getLevelsArrBytes(sketchStructure) + ITEM_BYTES;
+ final int offset = DATA_START_ADR + getLevelsArrSizeBytes(sketchStructure) + ITEM_BYTES;
wmem.putDouble(offset, item);
}
@Override
void setMinItem(final double item) {
if (readOnly) { throw new SketchesArgumentException(TGT_IS_READ_ONLY_MSG); }
- final int offset = DATA_START_ADR + getLevelsArrBytes(sketchStructure);
+ final int offset = DATA_START_ADR + getLevelsArrSizeBytes(sketchStructure);
wmem.putDouble(offset, item);
}
diff --git a/src/main/java/org/apache/datasketches/kll/KllDirectFloatsSketch.java b/src/main/java/org/apache/datasketches/kll/KllDirectFloatsSketch.java
index 6e97023..c866514 100644
--- a/src/main/java/org/apache/datasketches/kll/KllDirectFloatsSketch.java
+++ b/src/main/java/org/apache/datasketches/kll/KllDirectFloatsSketch.java
@@ -68,7 +68,7 @@
* @param memReqSvr the given MemoryRequestServer to request a larger WritableMemory
* @param memVal the MemoryValadate object
*/
- KllDirectFloatsSketch( //called below and KllFloatsSketch & KllDirectCompactFloatsSketch
+ KllDirectFloatsSketch(
final SketchStructure sketchStructure,
final WritableMemory wmem,
final MemoryRequestServer memReqSvr,
@@ -88,7 +88,7 @@
* @param memReqSvr the given MemoryRequestServer to request a larger WritableMemory
* @return a new instance of this sketch
*/
- static KllDirectFloatsSketch newDirectUpdatableInstance( //called by KllSketch.newDirectInstance & test
+ static KllDirectFloatsSketch newDirectUpdatableInstance(
final int k,
final int m,
final WritableMemory dstMem,
@@ -129,9 +129,9 @@
if (sketchStructure == COMPACT_EMPTY || isEmpty()) { throw new SketchesArgumentException(EMPTY_MSG); }
else if (sketchStructure == COMPACT_SINGLE) { return getFloatSingleItem(); }
else if (sketchStructure == COMPACT_FULL) {
- levelsArrBytes = getLevelsArrBytes(COMPACT_FULL);
+ levelsArrBytes = getLevelsArrSizeBytes(COMPACT_FULL);
} else { //UPDATABLE
- levelsArrBytes = getLevelsArrBytes(UPDATABLE);
+ levelsArrBytes = getLevelsArrSizeBytes(UPDATABLE);
}
final int offset = DATA_START_ADR + levelsArrBytes + ITEM_BYTES;
return wmem.getFloat(offset);
@@ -143,9 +143,9 @@
if (sketchStructure == COMPACT_EMPTY || isEmpty()) { throw new SketchesArgumentException(EMPTY_MSG); }
else if (sketchStructure == COMPACT_SINGLE) { return getFloatSingleItem(); }
else if (sketchStructure == COMPACT_FULL) {
- levelsArrBytes = getLevelsArrBytes(COMPACT_FULL);
+ levelsArrBytes = getLevelsArrSizeBytes(COMPACT_FULL);
} else { //UPDATABLE
- levelsArrBytes = getLevelsArrBytes(UPDATABLE);
+ levelsArrBytes = getLevelsArrSizeBytes(UPDATABLE);
}
final int offset = DATA_START_ADR + levelsArrBytes;
return wmem.getFloat(offset);
@@ -171,7 +171,7 @@
}
final int capacityItems = KllHelper.computeTotalItemCapacity(k, getM(), getNumLevels());
final float[] floatItemsArr = new float[capacityItems];
- final int offset = DATA_START_ADR + getLevelsArrBytes(sketchStructure) + 2 * ITEM_BYTES;
+ final int offset = DATA_START_ADR + getLevelsArrSizeBytes(sketchStructure) + 2 * ITEM_BYTES;
final int shift = (sketchStructure == COMPACT_FULL) ? levelsArr[0] : 0;
final int numItems = (sketchStructure == COMPACT_FULL) ? getNumRetained() : capacityItems;
wmem.getFloatArray(offset, floatItemsArr, shift, numItems);
@@ -184,7 +184,7 @@
if (sketchStructure == COMPACT_SINGLE) { return new float[] { getFloatSingleItem() }; }
final int numRetained = getNumRetained();
final float[] floatItemsArr = new float[numRetained];
- final int offset = DATA_START_ADR + getLevelsArrBytes(sketchStructure) + 2 * ITEM_BYTES
+ final int offset = DATA_START_ADR + getLevelsArrSizeBytes(sketchStructure) + 2 * ITEM_BYTES
+ (sketchStructure == COMPACT_FULL ? 0 : levelsArr[0] * ITEM_BYTES);
wmem.getFloatArray(offset, floatItemsArr, 0, numRetained);
return floatItemsArr;
@@ -198,9 +198,9 @@
}
final int offset;
if (sketchStructure == COMPACT_FULL) {
- offset = DATA_START_ADR + getLevelsArrBytes(sketchStructure) + 2 * ITEM_BYTES;
+ offset = DATA_START_ADR + getLevelsArrSizeBytes(sketchStructure) + 2 * ITEM_BYTES;
} else { //sketchStructure == UPDATABLE
- offset = DATA_START_ADR + getLevelsArrBytes(sketchStructure) + (2 + getK() - 1) * ITEM_BYTES;
+ offset = DATA_START_ADR + getLevelsArrSizeBytes(sketchStructure) + (2 + getK() - 1) * ITEM_BYTES;
}
return wmem.getFloat(offset);
}
@@ -216,7 +216,7 @@
@Override
int getMinK() {
if (sketchStructure == COMPACT_FULL || sketchStructure == UPDATABLE) { return getMemoryMinK(wmem); }
- else { return getK(); }
+ return getK();
}
@Override
@@ -235,7 +235,7 @@
return bytesOut;
}
//sketchStructure == UPDATABLE OR COMPACT_FULL
- offset = DATA_START_ADR + getLevelsArrBytes(sketchStructure);
+ offset = DATA_START_ADR + getLevelsArrSizeBytes(sketchStructure);
wmem.getByteArray(offset, bytesOut, 0, ITEM_BYTES);
wmem.getByteArray(offset + ITEM_BYTES, bytesOut, ITEM_BYTES, ITEM_BYTES);
return bytesOut;
@@ -287,7 +287,7 @@
@Override
void setFloatItemsArray(final float[] floatItems) {
if (readOnly) { throw new SketchesArgumentException(TGT_IS_READ_ONLY_MSG); }
- final int offset = DATA_START_ADR + getLevelsArrBytes(sketchStructure) + 2 * ITEM_BYTES;
+ final int offset = DATA_START_ADR + getLevelsArrSizeBytes(sketchStructure) + 2 * ITEM_BYTES;
wmem.putFloatArray(offset, floatItems, 0, floatItems.length);
}
@@ -295,7 +295,7 @@
void setFloatItemsArrayAt(final int index, final float item) {
if (readOnly) { throw new SketchesArgumentException(TGT_IS_READ_ONLY_MSG); }
final int offset =
- DATA_START_ADR + getLevelsArrBytes(sketchStructure) + (index + 2) * ITEM_BYTES;
+ DATA_START_ADR + getLevelsArrSizeBytes(sketchStructure) + (index + 2) * ITEM_BYTES;
wmem.putFloat(offset, item);
}
@@ -308,14 +308,14 @@
@Override
void setMaxItem(final float item) {
if (readOnly) { throw new SketchesArgumentException(TGT_IS_READ_ONLY_MSG); }
- final int offset = DATA_START_ADR + getLevelsArrBytes(sketchStructure) + ITEM_BYTES;
+ final int offset = DATA_START_ADR + getLevelsArrSizeBytes(sketchStructure) + ITEM_BYTES;
wmem.putFloat(offset, item);
}
@Override
void setMinItem(final float item) {
if (readOnly) { throw new SketchesArgumentException(TGT_IS_READ_ONLY_MSG); }
- final int offset = DATA_START_ADR + getLevelsArrBytes(sketchStructure);
+ final int offset = DATA_START_ADR + getLevelsArrSizeBytes(sketchStructure);
wmem.putFloat(offset, item);
}
diff --git a/src/main/java/org/apache/datasketches/kll/KllDoublesSketch.java b/src/main/java/org/apache/datasketches/kll/KllDoublesSketch.java
index ba1737f..a8308a0 100644
--- a/src/main/java/org/apache/datasketches/kll/KllDoublesSketch.java
+++ b/src/main/java/org/apache/datasketches/kll/KllDoublesSketch.java
@@ -82,7 +82,7 @@
//Factories for new direct instances.
/**
- * Create a new direct instance of this sketch with the default <em>k</em>.
+ * Create a new direct updatable instance of this sketch with the default <em>k</em>.
* The default <em>k</em> = 200 results in a normalized rank error of about
* 1.65%. Larger <em>k</em> will have smaller error but the sketch will be larger (and slower).
* @param dstMem the given destination WritableMemory object for use by the sketch
@@ -96,7 +96,7 @@
}
/**
- * Create a new direct instance of this sketch with a given <em>k</em>.
+ * Create a new direct updatable instance of this sketch with a given <em>k</em>.
* @param k parameter that controls size of the sketch and accuracy of estimates.
* @param dstMem the given destination WritableMemory object for use by the sketch
* @param memReqSvr the given MemoryRequestServer to request a larger WritableMemory
@@ -108,7 +108,7 @@
final MemoryRequestServer memReqSvr) {
Objects.requireNonNull(dstMem, "Parameter 'dstMem' must not be null");
Objects.requireNonNull(memReqSvr, "Parameter 'memReqSvr' must not be null");
- return KllDirectDoublesSketch.newDirectInstance(k, DEFAULT_M, dstMem, memReqSvr);
+ return KllDirectDoublesSketch.newDirectUpdatableInstance(k, DEFAULT_M, dstMem, memReqSvr);
}
//Factory to create an heap instance from a Memory image
@@ -393,21 +393,4 @@
abstract void setMinItem(double item);
- private final static boolean enablePrinting = false;
-
- /**
- * @param format the format
- * @param args the args
- */
- static final void printf(final String format, final Object ...args) {
- if (enablePrinting) { System.out.printf(format, args); }
- }
-
- /**
- * @param o the Object to println
- */
- static final void println(final Object o) {
- if (enablePrinting) { System.out.println(o.toString()); }
- }
-
}
diff --git a/src/main/java/org/apache/datasketches/kll/KllFloatsSketchIterator.java b/src/main/java/org/apache/datasketches/kll/KllFloatsSketchIterator.java
index 3606660..8c5808e 100644
--- a/src/main/java/org/apache/datasketches/kll/KllFloatsSketchIterator.java
+++ b/src/main/java/org/apache/datasketches/kll/KllFloatsSketchIterator.java
@@ -31,13 +31,13 @@
private int level;
private int index;
private long weight;
- private boolean isInitialized_;
+ private boolean isInitialized;
KllFloatsSketchIterator(final float[] quantiles, final int[] levelsArr, final int numLevels) {
this.quantiles = quantiles;
this.levelsArr = levelsArr;
this.numLevels = numLevels;
- this.isInitialized_ = false;
+ this.isInitialized = false;
}
@Override
@@ -52,11 +52,11 @@
@Override
public boolean next() {
- if (!isInitialized_) {
+ if (!isInitialized) {
level = 0;
index = levelsArr[level];
weight = 1;
- isInitialized_ = true;
+ isInitialized = true;
} else {
index++;
}
diff --git a/src/main/java/org/apache/datasketches/kll/KllHeapDoublesSketch.java b/src/main/java/org/apache/datasketches/kll/KllHeapDoublesSketch.java
index 1e79026..61d8243 100644
--- a/src/main/java/org/apache/datasketches/kll/KllHeapDoublesSketch.java
+++ b/src/main/java/org/apache/datasketches/kll/KllHeapDoublesSketch.java
@@ -95,7 +95,7 @@
this.m = memValidate.m;
this.n = memValidate.n;
this.minK = memValidate.minK;
- this.levelsArr = memValidate.levelsArr;
+ this.levelsArr = memValidate.levelsArr; //normalized to full
this.isLevelZeroSorted = memValidate.level0SortedFlag;
if (memStructure == COMPACT_EMPTY) {
diff --git a/src/main/java/org/apache/datasketches/kll/KllHeapFloatsSketch.java b/src/main/java/org/apache/datasketches/kll/KllHeapFloatsSketch.java
index 941416c..0af7312 100644
--- a/src/main/java/org/apache/datasketches/kll/KllHeapFloatsSketch.java
+++ b/src/main/java/org/apache/datasketches/kll/KllHeapFloatsSketch.java
@@ -137,7 +137,7 @@
static KllHeapFloatsSketch heapifyImpl(final Memory srcMem) {
Objects.requireNonNull(srcMem, "Parameter 'srcMem' must not be null");
- final KllMemoryValidate memVal = new KllMemoryValidate(srcMem, FLOATS_SKETCH, null);
+ final KllMemoryValidate memVal = new KllMemoryValidate(srcMem, FLOATS_SKETCH);
return new KllHeapFloatsSketch(srcMem, memVal);
}
diff --git a/src/main/java/org/apache/datasketches/kll/KllSketch.java b/src/main/java/org/apache/datasketches/kll/KllSketch.java
index f591ecd..874d64f 100644
--- a/src/main/java/org/apache/datasketches/kll/KllSketch.java
+++ b/src/main/java/org/apache/datasketches/kll/KllSketch.java
@@ -301,13 +301,13 @@
}
else if (tgtStructure == COMPACT_FULL) {
totalBytes = DATA_START_ADR
- + getLevelsArrBytes(tgtStructure)
+ + getLevelsArrSizeBytes(tgtStructure)
+ getMinMaxSizeBytes()
+ getRetainedItemsSizeBytes();
}
else { //structure = UPDATABLE
totalBytes = DATA_START_ADR
- + getLevelsArrBytes(tgtStructure)
+ + getLevelsArrSizeBytes(tgtStructure)
+ getMinMaxSizeBytes()
+ getTotalItemsNumBytes();
}
@@ -320,7 +320,7 @@
else { return new int[0]; }
}
- final int getLevelsArrBytes(final SketchStructure structure) {
+ final int getLevelsArrSizeBytes(final SketchStructure structure) {
if (structure == UPDATABLE) { return levelsArr.length * Integer.BYTES; }
else if (structure == COMPACT_FULL) { return (levelsArr.length - 1) * Integer.BYTES; }
else { return 0; }
diff --git a/src/test/java/org/apache/datasketches/kll/KllDirectCompactDoublesSketchTest.java b/src/test/java/org/apache/datasketches/kll/KllDirectCompactDoublesSketchTest.java
index 7acda54..9831c2f 100644
--- a/src/test/java/org/apache/datasketches/kll/KllDirectCompactDoublesSketchTest.java
+++ b/src/test/java/org/apache/datasketches/kll/KllDirectCompactDoublesSketchTest.java
@@ -35,12 +35,12 @@
private static final DefaultMemoryRequestServer memReqSvr = new DefaultMemoryRequestServer();
@Test
- public void checkDirectUpdatable_ROandWritable() {
+ public void checkRODirectUpdatable_ROandWritable() {
int k = 20;
KllDoublesSketch sk = KllDoublesSketch.newHeapInstance(k);
for (int i = 1; i <= k + 1; i++) { sk.update(i); }
- byte[] byteArr = KllHelper.toByteArray(sk, true);
- Memory srcMem = Memory.wrap(byteArr); //-> read only
+ byte[] byteArr = KllHelper.toByteArray(sk, true); //request updatable
+ Memory srcMem = Memory.wrap(byteArr); //cast to Memory -> read only
KllDoublesSketch sk2 = KllDoublesSketch.wrap(srcMem);
assertTrue(sk2 instanceof KllDirectDoublesSketch);
@@ -64,10 +64,10 @@
int k = 20;
KllDoublesSketch sk = KllDoublesSketch.newHeapInstance(k);
for (int i = 1; i <= k + 1; i++) { sk.update(i); }
- Memory srcMem = Memory.wrap(sk.toByteArray()); //compact fmt
+ Memory srcMem = Memory.wrap(sk.toByteArray()); //compact RO fmt
KllDoublesSketch sk2 = KllDoublesSketch.wrap(srcMem);
assertTrue(sk2 instanceof KllDirectCompactDoublesSketch);
- println(sk2.toString(true, false));
+ //println(sk2.toString(true, false));
assertFalse(sk2.isMemoryUpdatableFormat());
assertTrue(sk2.isReadOnly());
assertEquals(sk2.getMinItem(), 1.0);
@@ -76,7 +76,7 @@
KllDoublesSketch sk3 = KllDoublesSketch.writableWrap((WritableMemory)srcMem2, memReqSvr);
assertTrue(sk3 instanceof KllDirectCompactDoublesSketch);
assertFalse(sk2.isMemoryUpdatableFormat());
- println(sk3.toString(true, false));
+ //println(sk3.toString(true, false));
assertTrue(sk3.isReadOnly());
assertEquals(sk3.getMinItem(), 1.0);
assertEquals(sk3.getMaxItem(), 21.0);
@@ -90,7 +90,7 @@
sk.update(1);
KllDoublesSketch sk2 = KllDoublesSketch.wrap(Memory.wrap(sk.toByteArray()));
assertTrue(sk2 instanceof KllDirectCompactDoublesSketch);
- println(sk2.toString(true, false));
+ //println(sk2.toString(true, false));
assertTrue(sk2.isReadOnly());
assertEquals(sk2.getDoubleSingleItem(), 1.0);
@@ -109,20 +109,20 @@
KllDoublesSketch sk = KllDoublesSketch.newHeapInstance(k);
KllDoublesSketch sk2 = KllDoublesSketch.wrap(Memory.wrap(sk.toByteArray()));
- double[] valuesArr = sk2.getDoubleItemsArray();
- for (int i = 0; i < 20; i++) { assertEquals(valuesArr[i], 0F); }
+ double[] itemsArr = sk2.getDoubleItemsArray();
+ for (int i = 0; i < 20; i++) { assertEquals(itemsArr[i], 0F); }
sk.update(1);
sk2 = KllDoublesSketch.wrap(Memory.wrap(sk.toByteArray()));
- valuesArr = sk2.getDoubleItemsArray();
- for (int i = 0; i < 19; i++) { assertEquals(valuesArr[i], 0F); }
- assertEquals(valuesArr[19], 1F);
+ itemsArr = sk2.getDoubleItemsArray();
+ for (int i = 0; i < 19; i++) { assertEquals(itemsArr[i], 0F); }
+ assertEquals(itemsArr[19], 1F);
for (int i = 2; i <= 21; i++) { sk.update(i); }
sk2 = KllDoublesSketch.wrap(Memory.wrap(sk.toByteArray()));
- valuesArr = sk2.getDoubleItemsArray();
- assertEquals(valuesArr.length, 33);
- assertEquals(valuesArr[22], 21);
+ itemsArr = sk2.getDoubleItemsArray();
+ assertEquals(itemsArr.length, 33);
+ assertEquals(itemsArr[22], 21);
}
@Test
@@ -190,7 +190,7 @@
}
@Test
- public void checkCompactSingleValueMerge() {
+ public void checkCompactSingleItemMerge() {
int k = 20;
KllDoublesSketch skH1 = KllDoublesSketch.newHeapInstance(k); //Heap with 1 (single)
skH1.update(21);
diff --git a/src/test/java/org/apache/datasketches/kll/KllDirectCompactFloatsSketchTest.java b/src/test/java/org/apache/datasketches/kll/KllDirectCompactFloatsSketchTest.java
index c1f0dd9..8504bd5 100644
--- a/src/test/java/org/apache/datasketches/kll/KllDirectCompactFloatsSketchTest.java
+++ b/src/test/java/org/apache/datasketches/kll/KllDirectCompactFloatsSketchTest.java
@@ -64,7 +64,7 @@
int k = 20;
KllFloatsSketch sk = KllFloatsSketch.newHeapInstance(k);
for (int i = 1; i <= k + 1; i++) { sk.update(i); }
- Memory srcMem = Memory.wrap(sk.toByteArray()); //compact RO fmt
+ Memory srcMem = Memory.wrap(sk.toByteArray()); //compact RO fmt
KllFloatsSketch sk2 = KllFloatsSketch.wrap(srcMem);
assertTrue(sk2 instanceof KllDirectCompactFloatsSketch);
//println(sk2.toString(true, false));
@@ -100,7 +100,7 @@
try {
sk2.getFloatSingleItem();
fail();
- } catch (SketchesArgumentException e) { }
+ } catch (SketchesArgumentException e) { }
}
@Test
diff --git a/src/test/java/org/apache/datasketches/kll/KllDirectCompactItemsSketchIteratorTest.java b/src/test/java/org/apache/datasketches/kll/KllDirectCompactItemsSketchIteratorTest.java
new file mode 100644
index 0000000..bc7651b
--- /dev/null
+++ b/src/test/java/org/apache/datasketches/kll/KllDirectCompactItemsSketchIteratorTest.java
@@ -0,0 +1,136 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.datasketches.kll;
+
+import static org.apache.datasketches.quantilescommon.QuantileSearchCriteria.EXCLUSIVE;
+import static org.apache.datasketches.quantilescommon.QuantileSearchCriteria.INCLUSIVE;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertTrue;
+
+import java.util.Comparator;
+
+import org.apache.datasketches.common.ArrayOfStringsSerDe;
+import org.apache.datasketches.common.Util;
+import org.apache.datasketches.memory.Memory;
+import org.apache.datasketches.quantilescommon.GenericSortedViewIterator;
+import org.apache.datasketches.quantilescommon.QuantilesGenericSketchIterator;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+public class KllDirectCompactItemsSketchIteratorTest {
+ private ArrayOfStringsSerDe serDe = new ArrayOfStringsSerDe();
+
+ @Test
+ public void emptySketch() {
+ KllItemsSketch<String> sk = KllItemsSketch.newHeapInstance(Comparator.naturalOrder(), serDe);
+ byte[] byteArr = sk.toByteArray();
+ KllItemsSketch<String> sk2 = KllItemsSketch.wrap(Memory.wrap(byteArr), Comparator.naturalOrder(), serDe);
+ assertTrue(sk2 instanceof KllDirectCompactItemsSketch);
+ QuantilesGenericSketchIterator<String> itr = sk2.iterator();
+ assertFalse(itr.next());
+ }
+
+ @Test
+ public void oneItemSketch() {
+ KllItemsSketch<String> sk = KllItemsSketch.newHeapInstance(Comparator.naturalOrder(), serDe);
+ sk.update("1");
+ byte[] byteArr = sk.toByteArray();
+ KllItemsSketch<String> sk2 = KllItemsSketch.wrap(Memory.wrap(byteArr), Comparator.naturalOrder(), serDe);
+ assertTrue(sk2 instanceof KllDirectCompactItemsSketch);
+ QuantilesGenericSketchIterator<String> itr = sk2.iterator();
+ assertTrue(itr.next());
+ assertEquals(itr.getQuantile(), "1");
+ assertEquals(itr.getWeight(), 1);
+ assertFalse(itr.next());
+ }
+
+ @Test
+ public void twoItemSketchForIterator() {
+ KllItemsSketch<String> sk = KllItemsSketch.newHeapInstance(Comparator.naturalOrder(), serDe);
+ sk.update("1");
+ sk.update("2");
+ byte[] byteArr = sk.toByteArray();
+ KllItemsSketch<String> sk2 = KllItemsSketch.wrap(Memory.wrap(byteArr), Comparator.naturalOrder(), serDe);
+ assertTrue(sk2 instanceof KllDirectCompactItemsSketch);
+ QuantilesGenericSketchIterator<String> itr = sk2.iterator();
+ assertTrue(itr.next());
+
+ assertEquals(itr.getQuantile(), "2");
+ assertEquals(itr.getWeight(), 1);
+
+ assertTrue(itr.next());
+
+ assertEquals(itr.getQuantile(), "1");
+ assertEquals(itr.getWeight(), 1);
+ }
+
+ @Test
+ public void twoItemSketchForSortedViewIterator() {
+ KllItemsSketch<String> sk = KllItemsSketch.newHeapInstance(Comparator.naturalOrder(), serDe);
+ sk.update("1");
+ sk.update("2");
+ byte[] byteArr = sk.toByteArray();
+ KllItemsSketch<String> sk2 = KllItemsSketch.wrap(Memory.wrap(byteArr), Comparator.naturalOrder(), serDe);
+ assertTrue(sk2 instanceof KllDirectCompactItemsSketch);
+ GenericSortedViewIterator<String> itr = sk2.getSortedView().iterator();
+
+ assertTrue(itr.next());
+
+ assertEquals(itr.getQuantile(), "1");
+ assertEquals(itr.getWeight(), 1);
+ assertEquals(itr.getCumulativeWeight(EXCLUSIVE), 0);
+ assertEquals(itr.getCumulativeWeight(INCLUSIVE), 1);
+ assertEquals(itr.getNormalizedRank(EXCLUSIVE), 0);
+ assertEquals(itr.getNormalizedRank(INCLUSIVE), 0.5);
+
+ assertTrue(itr.next());
+
+ assertEquals(itr.getQuantile(), "2");
+ assertEquals(itr.getWeight(), 1);
+ assertEquals(itr.getCumulativeWeight(EXCLUSIVE), 1);
+ assertEquals(itr.getCumulativeWeight(INCLUSIVE), 2);
+ assertEquals(itr.getNormalizedRank(EXCLUSIVE), 0.5);
+ assertEquals(itr.getNormalizedRank(INCLUSIVE), 1.0);
+ }
+
+ @Test
+ public void bigSketches() {
+ final int digits = 6;
+ for (int n = 1000; n < 100_000; n += 2000) {
+ KllItemsSketch<String> sk = KllItemsSketch.newHeapInstance(Comparator.naturalOrder(), serDe);
+ for (int i = 0; i < n; i++) {
+ sk.update(Util.intToFixedLengthString(i, digits));
+ }
+ byte[] byteArr = sk.toByteArray();
+ KllItemsSketch<String> sk2 = KllItemsSketch.wrap(Memory.wrap(byteArr), Comparator.naturalOrder(), serDe);
+ assertTrue(sk2 instanceof KllDirectCompactItemsSketch);
+ QuantilesGenericSketchIterator<String> itr = sk2.iterator();
+ int count = 0;
+ int weight = 0;
+ while (itr.next()) {
+ count++;
+ weight += (int)itr.getWeight();
+ }
+ Assert.assertEquals(count, sk.getNumRetained());
+ Assert.assertEquals(weight, n);
+ }
+ }
+}
diff --git a/src/test/java/org/apache/datasketches/kll/KllDirectCompactItemsSketchTest.java b/src/test/java/org/apache/datasketches/kll/KllDirectCompactItemsSketchTest.java
index 2e50828..3f786e6 100644
--- a/src/test/java/org/apache/datasketches/kll/KllDirectCompactItemsSketchTest.java
+++ b/src/test/java/org/apache/datasketches/kll/KllDirectCompactItemsSketchTest.java
@@ -34,7 +34,6 @@
import org.testng.annotations.Test;
public class KllDirectCompactItemsSketchTest {
- static final String LS = System.getProperty("line.separator");
public ArrayOfStringsSerDe serDe = new ArrayOfStringsSerDe();
@Test
diff --git a/src/test/java/org/apache/datasketches/kll/KllDirectDoublesSketchTest.java b/src/test/java/org/apache/datasketches/kll/KllDirectDoublesSketchTest.java
index 5d87388..e4e3492 100644
--- a/src/test/java/org/apache/datasketches/kll/KllDirectDoublesSketchTest.java
+++ b/src/test/java/org/apache/datasketches/kll/KllDirectDoublesSketchTest.java
@@ -49,12 +49,13 @@
assertTrue(sketch.isEmpty());
assertEquals(sketch.getN(), 0);
assertEquals(sketch.getNumRetained(), 0);
- try { sketch.getRank(0); fail(); } catch (SketchesArgumentException e) {}
+ try { sketch.getRank(0.5); fail(); } catch (SketchesArgumentException e) {}
try { sketch.getMinItem(); fail(); } catch (SketchesArgumentException e) {}
try { sketch.getMaxItem(); fail(); } catch (SketchesArgumentException e) {}
try { sketch.getQuantile(0.5); fail(); } catch (SketchesArgumentException e) {}
- try { sketch.getQuantiles(new double[] {0}); fail(); } catch (SketchesArgumentException e) {}
+ try { sketch.getQuantiles(new double[] {0.0, 1.0}); fail(); } catch (SketchesArgumentException e) {}
try { sketch.getPMF(new double[] {0}); fail(); } catch (SketchesArgumentException e) {}
+ try { sketch.getCDF(new double[0]); fail(); } catch (SketchesArgumentException e) {}
assertNotNull(sketch.toString(true, true));
assertNotNull(sketch.toString());
}
@@ -108,22 +109,21 @@
assertEquals(pmf.length, 2);
assertEquals(pmf[0], 0.5, PMF_EPS_FOR_K_256);
assertEquals(pmf[1], 0.5, PMF_EPS_FOR_K_256);
-
- assertEquals(sketch.getMinItem(), 0f); // min value is exact
- assertEquals(sketch.getMaxItem(), n - 1f); // max value is exact
+ assertEquals(sketch.getMinItem(), 0.0); // min value is exact
+ assertEquals(sketch.getMaxItem(), n - 1.0); // max value is exact
// check at every 0.1 percentage point
- final double[] fractions = new double[1001];
+ final double[] ranks = new double[1001];
final double[] reverseFractions = new double[1001]; // check that ordering doesn't matter
for (int i = 0; i <= 1000; i++) {
- fractions[i] = (double) i / 1000;
- reverseFractions[1000 - i] = fractions[i];
+ ranks[i] = (double) i / 1000;
+ reverseFractions[1000 - i] = ranks[i];
}
- final double[] quantiles = sketch.getQuantiles(fractions);
+ final double[] quantiles = sketch.getQuantiles(ranks);
final double[] reverseQuantiles = sketch.getQuantiles(reverseFractions);
- double previousQuantile = 0;
+ double previousQuantile = 0.0;
for (int i = 0; i <= 1000; i++) {
- final double quantile = sketch.getQuantile(fractions[i]);
+ final double quantile = sketch.getQuantile(ranks[i]);
assertEquals(quantile, quantiles[i]);
assertEquals(quantile, reverseQuantiles[1000 - i]);
assertTrue(previousQuantile <= quantile);
@@ -205,7 +205,7 @@
assertFalse(sketch1.isEmpty());
assertEquals(sketch1.getN(), 2 * n);
- assertEquals(sketch1.getMinItem(), 0);
+ assertEquals(sketch1.getMinItem(), 0.0);
assertEquals(sketch1.getMaxItem(), 2.0 * n - 1.0);
assertEquals(sketch1.getQuantile(0.5), n, n * PMF_EPS_FOR_K_128);
}
@@ -214,7 +214,7 @@
public void mergeEmptyLowerK() {
final KllDoublesSketch sketch1 = getUpdatableDirectDoublesSketch(256, 0);
final KllDoublesSketch sketch2 = getUpdatableDirectDoublesSketch(128, 0);
- final int n = 10000;
+ final int n = 10_000;
for (int i = 0; i < n; i++) {
sketch1.update(i);
}
@@ -226,7 +226,7 @@
assertFalse(sketch1.isEmpty());
assertEquals(sketch1.getN(), n);
- assertEquals(sketch1.getMinItem(), 0);
+ assertEquals(sketch1.getMinItem(), 0.0);
assertEquals(sketch1.getMaxItem(), n - 1.0);
assertEquals(sketch1.getQuantile(0.5), n / 2.0, n / 2 * PMF_EPS_FOR_K_256);
@@ -234,7 +234,7 @@
sketch2.merge(sketch1);
assertFalse(sketch1.isEmpty());
assertEquals(sketch1.getN(), n);
- assertEquals(sketch1.getMinItem(), 0);
+ assertEquals(sketch1.getMinItem(), 0.0);
assertEquals(sketch1.getMaxItem(), n - 1.0);
assertEquals(sketch1.getQuantile(0.5), n / 2.0, n / 2 * PMF_EPS_FOR_K_256);
}
@@ -310,7 +310,7 @@
@Test
public void serializeDeserializeEmptyViaCompactHeapify() {
final KllDoublesSketch sketch1 = getUpdatableDirectDoublesSketch(200, 0);
- final byte[] bytes = sketch1.toByteArray();
+ final byte[] bytes = sketch1.toByteArray(); //compact
final KllDoublesSketch sketch2 = KllDoublesSketch.heapify(Memory.wrap(bytes));
assertEquals(bytes.length, sketch1.currentSerializedSizeBytes(false));
assertTrue(sketch2.isEmpty());
@@ -368,9 +368,10 @@
assertEquals(sketch2.getNumRetained(), 1);
assertEquals(sketch2.getN(), 1);
assertEquals(sketch2.getNormalizedRankError(false), sketch1.getNormalizedRankError(false));
- assertTrue(Double.isFinite(sketch2.getMinItem()));
- assertTrue(Double.isFinite(sketch2.getMaxItem()));
+ assertEquals(sketch2.getMinItem(), 1.0);
+ assertEquals(sketch2.getMaxItem(), 1.0);
assertEquals(sketch2.currentSerializedSizeBytes(false), 8 + Double.BYTES);
+ assertEquals(sketch2.currentSerializedSizeBytes(true), bytes.length);
}
@Test
@@ -623,7 +624,7 @@
}
@Test
- public void chickReadOnlyExceptions() {
+ public void checkReadOnlyExceptions() {
int k = 20;
double[] dblArr = new double[0];
double dblV = 1.0f;
diff --git a/src/test/java/org/apache/datasketches/kll/KllDirectFloatsSketchTest.java b/src/test/java/org/apache/datasketches/kll/KllDirectFloatsSketchTest.java
index 7be56d7..6f9ea0b 100644
--- a/src/test/java/org/apache/datasketches/kll/KllDirectFloatsSketchTest.java
+++ b/src/test/java/org/apache/datasketches/kll/KllDirectFloatsSketchTest.java
@@ -54,7 +54,7 @@
try { sketch.getMaxItem(); fail(); } catch (SketchesArgumentException e) {}
try { sketch.getQuantile(0.5); fail(); } catch (SketchesArgumentException e) {}
try { sketch.getQuantiles(new double[] {0.0, 1.0}); fail(); } catch (SketchesArgumentException e) {}
- try { sketch.getPMF(new float[0]); fail(); } catch (SketchesArgumentException e) {}
+ try { sketch.getPMF(new float[] {0}); fail(); } catch (SketchesArgumentException e) {}
try { sketch.getCDF(new float[0]); fail(); } catch (SketchesArgumentException e) {}
assertNotNull(sketch.toString(true, true));
assertNotNull(sketch.toString());
@@ -105,12 +105,12 @@
}
// test getPMF
- final double[] pmf = sketch.getPMF(new float[] {n / 2}); // split at median
+ final double[] pmf = sketch.getPMF(new float[] {n / 2.0f}); // split at median
assertEquals(pmf.length, 2);
assertEquals(pmf[0], 0.5, PMF_EPS_FOR_K_256);
assertEquals(pmf[1], 0.5, PMF_EPS_FOR_K_256);
- assertEquals(sketch.getMinItem(), 0f); // min value is exact
- assertEquals(sketch.getMaxItem(), n - 1f); // max value is exact
+ assertEquals(sketch.getMinItem(), 0.0f); // min value is exact
+ assertEquals(sketch.getMaxItem(), n - 1.0f); // max value is exact
// check at every 0.1 percentage point
final double[] ranks = new double[1001];
@@ -121,7 +121,7 @@
}
final float[] quantiles = sketch.getQuantiles(ranks);
final float[] reverseQuantiles = sketch.getQuantiles(reverseRanks);
- float previousQuantile = 0f;
+ float previousQuantile = 0.0f;
for (int i = 0; i <= 1000; i++) {
final float quantile = sketch.getQuantile(ranks[i]);
assertEquals(quantile, quantiles[i]);
@@ -205,8 +205,8 @@
assertFalse(sketch1.isEmpty());
assertEquals(sketch1.getN(), 2 * n);
- assertEquals(sketch1.getMinItem(), 0f);
- assertEquals(sketch1.getMaxItem(), 2f * n - 1f);
+ assertEquals(sketch1.getMinItem(), 0.0f);
+ assertEquals(sketch1.getMaxItem(), 2.0f * n - 1.0f);
assertEquals(sketch1.getQuantile(0.5), n, n * PMF_EPS_FOR_K_128);
}
@@ -214,7 +214,7 @@
public void mergeEmptyLowerK() {
final KllFloatsSketch sketch1 = getUpdatableDirectFloatSketch(256, 0);
final KllFloatsSketch sketch2 = getUpdatableDirectFloatSketch(128, 0);
- final int n = 10000;
+ final int n = 10_000;
for (int i = 0; i < n; i++) {
sketch1.update(i);
}
@@ -226,17 +226,17 @@
assertFalse(sketch1.isEmpty());
assertEquals(sketch1.getN(), n);
- assertEquals(sketch1.getMinItem(), 0f);
- assertEquals(sketch1.getMaxItem(), n - 1f);
- assertEquals(sketch1.getQuantile(0.5), n / 2f, n / 2 * PMF_EPS_FOR_K_256);
+ assertEquals(sketch1.getMinItem(), 0.0f);
+ assertEquals(sketch1.getMaxItem(), n - 1.0f);
+ assertEquals(sketch1.getQuantile(0.5), n / 2.0f, n / 2 * PMF_EPS_FOR_K_256);
//merge the other way
sketch2.merge(sketch1);
assertFalse(sketch1.isEmpty());
assertEquals(sketch1.getN(), n);
- assertEquals(sketch1.getMinItem(), 0f);
- assertEquals(sketch1.getMaxItem(), n - 1f);
- assertEquals(sketch1.getQuantile(0.5), n / 2f, n / 2 * PMF_EPS_FOR_K_256);
+ assertEquals(sketch1.getMinItem(), 0.0f);
+ assertEquals(sketch1.getMaxItem(), n - 1.0f);
+ assertEquals(sketch1.getQuantile(0.5), n / 2.0f, n / 2 * PMF_EPS_FOR_K_256);
}
@Test
@@ -319,8 +319,8 @@
assertEquals(sketch2.getNormalizedRankError(false), sketch1.getNormalizedRankError(false));
try { sketch2.getMinItem(); fail(); } catch (SketchesArgumentException e) {}
try { sketch2.getMaxItem(); fail(); } catch (SketchesArgumentException e) {}
- assertEquals(sketch2.currentSerializedSizeBytes(true),
- sketch1.currentSerializedSizeBytes(true));
+ assertEquals(sketch2.currentSerializedSizeBytes(false),
+ sketch1.currentSerializedSizeBytes(false));
}
@Test
@@ -336,8 +336,8 @@
assertEquals(sketch2.getNormalizedRankError(false), sketch1.getNormalizedRankError(false));
try { sketch2.getMinItem(); fail(); } catch (SketchesArgumentException e) {}
try { sketch2.getMaxItem(); fail(); } catch (SketchesArgumentException e) {}
- assertEquals(sketch2.currentSerializedSizeBytes(false),
- sketch1.currentSerializedSizeBytes(false));
+ assertEquals(sketch2.currentSerializedSizeBytes(true),
+ sketch1.currentSerializedSizeBytes(true));
}
@Test
@@ -368,9 +368,10 @@
assertEquals(sketch2.getNumRetained(), 1);
assertEquals(sketch2.getN(), 1);
assertEquals(sketch2.getNormalizedRankError(false), sketch1.getNormalizedRankError(false));
- assertTrue(Float.isFinite(sketch2.getMinItem()));
- assertTrue(Float.isFinite(sketch2.getMaxItem()));
+ assertEquals(sketch2.getMinItem(), 1.0f);
+ assertEquals(sketch2.getMaxItem(), 1.0f);
assertEquals(sketch2.currentSerializedSizeBytes(false), 8 + Float.BYTES);
+ assertEquals(sketch2.currentSerializedSizeBytes(true), bytes.length);
}
@Test
@@ -623,7 +624,7 @@
}
@Test
- public void chickReadOnlyExceptions() {
+ public void checkReadOnlyExceptions() {
int k = 20;
float[] fltArr = new float[0];
float fltV = 1.0f;
@@ -651,7 +652,7 @@
sk2.merge(sk1);
}
- //@Test Ignore until work is completed on doubles sketch
+ @Test
public void checkMergeExceptionsWrongType() {
KllFloatsSketch sk1 = KllFloatsSketch.newHeapInstance(20);
KllDoublesSketch sk2 = KllDoublesSketch.newHeapInstance(20);
diff --git a/src/test/java/org/apache/datasketches/kll/KllDoublesSketchSerDeTest.java b/src/test/java/org/apache/datasketches/kll/KllDoublesSketchSerDeTest.java
index 1e7fc43..7178003 100644
--- a/src/test/java/org/apache/datasketches/kll/KllDoublesSketchSerDeTest.java
+++ b/src/test/java/org/apache/datasketches/kll/KllDoublesSketchSerDeTest.java
@@ -78,7 +78,7 @@
assertEquals(sk2.getNormalizedRankError(false), sk1.getNormalizedRankError(false));
assertEquals(sk2.getMinItem(), 1.0);
assertEquals(sk2.getMaxItem(), 1.0);
- assertEquals(sk2.getSerializedSizeBytes(), 8 + Double.BYTES);
+ assertEquals(sk2.getSerializedSizeBytes(), Long.BYTES + Double.BYTES);
//from heap -> byte[] -> off heap
final KllDoublesSketch sk3 = KllDoublesSketch.wrap(Memory.wrap(bytes));
assertFalse(sk3.isEmpty());
@@ -131,33 +131,33 @@
public void compatibilityWithCppEstimationMode() throws Exception {
final File file = Util.getResourceFile("kll_double_estimation_cpp.sk");
try (MapHandle mh = Memory.map(file)) {
- final KllDoublesSketch sketch = KllDoublesSketch.heapify(mh.get());
- assertEquals(sketch.getMinItem(), 0);
- assertEquals(sketch.getMaxItem(), 999);
- assertEquals(sketch.getN(), 1000);
+ final KllDoublesSketch sk = KllDoublesSketch.heapify(mh.get());
+ assertEquals(sk.getMinItem(), 0);
+ assertEquals(sk.getMaxItem(), 999);
+ assertEquals(sk.getN(), 1000);
}
}
@Test
public void deserializeOneValueVersion1() throws Exception {
final byte[] bytes = getResourceBytes("kll_sketch_double_one_item_v1.sk");
- final KllDoublesSketch sketch = KllDoublesSketch.heapify(Memory.wrap(bytes));
- assertFalse(sketch.isEmpty());
- assertFalse(sketch.isEstimationMode());
- assertEquals(sketch.getN(), 1);
- assertEquals(sketch.getNumRetained(), 1);
- assertEquals(sketch.getMinItem(), 1.0);
- assertEquals(sketch.getMaxItem(), 1.0);
+ final KllDoublesSketch sk = KllDoublesSketch.heapify(Memory.wrap(bytes));
+ assertFalse(sk.isEmpty());
+ assertFalse(sk.isEstimationMode());
+ assertEquals(sk.getN(), 1);
+ assertEquals(sk.getNumRetained(), 1);
+ assertEquals(sk.getMinItem(), 1.0);
+ assertEquals(sk.getMaxItem(), 1.0);
}
@Test(groups = {"generate"})
public void generateBinariesForCompatibilityTesting() throws Exception {
final int[] nArr = {0, 1, 10, 100, 1_000, 10_000, 100_000, 1_000_000};
for (int n: nArr) {
- final KllDoublesSketch sketch = KllDoublesSketch.newHeapInstance();
- for (int i = 1; i <= n; i++) sketch.update(i);
+ final KllDoublesSketch sk = KllDoublesSketch.newHeapInstance();
+ for (int i = 1; i <= n; i++) sk.update(i);
try (final FileOutputStream file = new FileOutputStream("kll_double_n" + n + ".sk")) {
- file.write(sketch.toByteArray());
+ file.write(sk.toByteArray());
}
}
}
diff --git a/src/test/java/org/apache/datasketches/kll/KllDoublesSketchTest.java b/src/test/java/org/apache/datasketches/kll/KllDoublesSketchTest.java
index 88498d8..b9622de 100644
--- a/src/test/java/org/apache/datasketches/kll/KllDoublesSketchTest.java
+++ b/src/test/java/org/apache/datasketches/kll/KllDoublesSketchTest.java
@@ -82,12 +82,12 @@
assertFalse(sketch.isEmpty());
assertEquals(sketch.getN(), 1);
assertEquals(sketch.getNumRetained(), 1);
- assertEquals(sketch.getRank(0, EXCLUSIVE), 0.0);
- assertEquals(sketch.getRank(1, EXCLUSIVE), 0.0);
- assertEquals(sketch.getRank(2, EXCLUSIVE), 1.0);
- assertEquals(sketch.getRank(0, INCLUSIVE), 0.0);
- assertEquals(sketch.getRank(1, INCLUSIVE), 1.0);
- assertEquals(sketch.getRank(2, INCLUSIVE), 1.0);
+ assertEquals(sketch.getRank(0.0, EXCLUSIVE), 0.0);
+ assertEquals(sketch.getRank(1.0, EXCLUSIVE), 0.0);
+ assertEquals(sketch.getRank(2.0, EXCLUSIVE), 1.0);
+ assertEquals(sketch.getRank(0.0, INCLUSIVE), 0.0);
+ assertEquals(sketch.getRank(1.0, INCLUSIVE), 1.0);
+ assertEquals(sketch.getRank(2.0, INCLUSIVE), 1.0);
assertEquals(sketch.getMinItem(), 1.0);
assertEquals(sketch.getMaxItem(), 1.0);
assertEquals(sketch.getQuantile(0.5, EXCLUSIVE), 1.0);
@@ -119,7 +119,7 @@
double rank = i/10.0;
double q = rank == 1.0 ? i : i + 1;
assertEquals(sketch.getQuantile(rank, EXCLUSIVE), q);
- q = rank == 0 ? i + 1.0 : i;
+ q = (double)(rank == 0 ? i + 1.0 : i);
assertEquals(sketch.getQuantile(rank, INCLUSIVE), q);
}
@@ -158,7 +158,7 @@
}
// test getPMF
- final double[] pmf = sketch.getPMF(new double[] {n / 2}); // split at median
+ final double[] pmf = sketch.getPMF(new double[] {n / 2.0}); // split at median
assertEquals(pmf.length, 2);
assertEquals(pmf[0], 0.5, PMF_EPS_FOR_K_256);
assertEquals(pmf[1], 0.5, PMF_EPS_FOR_K_256);
@@ -275,8 +275,8 @@
assertFalse(sketch1.isEmpty());
assertEquals(sketch1.getN(), 2 * n);
- assertEquals(sketch1.getMinItem(), 0);
- assertEquals(sketch1.getMaxItem(), 2f * n - 1.0);
+ assertEquals(sketch1.getMinItem(), 0.0);
+ assertEquals(sketch1.getMaxItem(), 2.0 * n - 1.0);
assertEquals(sketch1.getQuantile(0.5), n, 2 * n * PMF_EPS_FOR_K_128);
}
@@ -284,7 +284,7 @@
public void mergeEmptyLowerK() {
final KllDoublesSketch sketch1 = KllDoublesSketch.newHeapInstance(256);
final KllDoublesSketch sketch2 = KllDoublesSketch.newHeapInstance(128);
- final int n = 10000;
+ final int n = 10_000;
for (int i = 0; i < n; i++) {
sketch1.update(i);
}
@@ -296,7 +296,7 @@
assertFalse(sketch1.isEmpty());
assertEquals(sketch1.getN(), n);
- assertEquals(sketch1.getMinItem(), 0);
+ assertEquals(sketch1.getMinItem(), 0.0);
assertEquals(sketch1.getMaxItem(), n - 1.0);
assertEquals(sketch1.getQuantile(0.5), n / 2.0, n * PMF_EPS_FOR_K_256);
@@ -341,10 +341,10 @@
for (int i = 1; i <= 1_000_000; i++) {
sketch1.update(i);
}
- final KllDoublesSketch sketch2 = KllDoublesSketch.newHeapInstance();
+ final KllDoublesSketch sketch2 = KllDoublesSketch.newHeapInstance(10);
sketch2.merge(sketch1);
- assertEquals(sketch2.getMinItem(), 1);
- assertEquals(sketch2.getMaxItem(), 1_000_000);
+ assertEquals(sketch2.getMinItem(), 1.0);
+ assertEquals(sketch2.getMaxItem(), 1_000_000.0);
}
@Test(expectedExceptions = SketchesArgumentException.class)
@@ -364,7 +364,7 @@
sketch.update(i);
}
assertEquals(sketch.getK(), KllSketch.DEFAULT_M);
- assertEquals(sketch.getQuantile(0.5), 500, 1000 * PMF_EPS_FOR_K_8);
+ assertEquals(sketch.getQuantile(0.5), 500.0, 1000 * PMF_EPS_FOR_K_8);
}
@Test
@@ -381,7 +381,7 @@
public void outOfOrderSplitPoints() {
final KllDoublesSketch sketch = KllDoublesSketch.newHeapInstance();
sketch.update(0);
- sketch.getCDF(new double[] {1, 0});
+ sketch.getCDF(new double[] {1.0, 0.0});
}
@Test(expectedExceptions = SketchesArgumentException.class)
diff --git a/src/test/java/org/apache/datasketches/kll/KllDoublesValidationTest.java b/src/test/java/org/apache/datasketches/kll/KllDoublesValidationTest.java
index b4d79be..41530f5 100644
--- a/src/test/java/org/apache/datasketches/kll/KllDoublesValidationTest.java
+++ b/src/test/java/org/apache/datasketches/kll/KllDoublesValidationTest.java
@@ -34,9 +34,9 @@
6. hash of the retained samples
*/
-//These results are for the version that delays the roll up until the next value comes in.
-//The @Test annotations have to be enabled to use this class and a section in KllDoublesHelper also
-//needs to be enabled.
+// These results are for the version that delays the roll up until the next value comes in.
+// The @Test annotations have to be enabled to use this class and a section in KllDoublesHelper also
+// needs to be enabled.
@SuppressWarnings("unused")
public class KllDoublesValidationTest {
@@ -218,7 +218,7 @@
}
int numLevels = sketch.getNumLevels();
int numSamples = sketch.getNumRetained();
- int[] levels = sketch.levelsArr;
+ int[] levels = sketch.getLevelsArray(sketch.sketchStructure);
long hashedSamples = simpleHashOfSubArray(sketch.getDoubleItemsArray(), levels[0], numSamples);
System.out.print(testI);
assert correctResultsWithReset[(7 * testI) + 4] == numLevels;
diff --git a/src/test/java/org/apache/datasketches/kll/KllFloatsSketchIteratorTest.java b/src/test/java/org/apache/datasketches/kll/KllFloatsSketchIteratorTest.java
index c18b36c..e511de5 100644
--- a/src/test/java/org/apache/datasketches/kll/KllFloatsSketchIteratorTest.java
+++ b/src/test/java/org/apache/datasketches/kll/KllFloatsSketchIteratorTest.java
@@ -44,7 +44,7 @@
sketch.update(1);
QuantilesFloatsSketchIterator it = sketch.iterator();
Assert.assertTrue(it.next());
- Assert.assertEquals(it.getQuantile(), 1f);
+ Assert.assertEquals(it.getQuantile(), 1.0f);
Assert.assertEquals(it.getWeight(), 1);
Assert.assertFalse(it.next());
}
@@ -57,12 +57,12 @@
QuantilesFloatsSketchIterator itr = sketch.iterator();
assertTrue(itr.next());
- assertEquals(itr.getQuantile(), 2f);
+ assertEquals(itr.getQuantile(), 2.0f);
assertEquals(itr.getWeight(), 1);
assertTrue(itr.next());
- assertEquals(itr.getQuantile(), 1f);
+ assertEquals(itr.getQuantile(), 1.0f);
assertEquals(itr.getWeight(), 1);
}
@@ -75,7 +75,7 @@
assertTrue(itr.next());
- assertEquals(itr.getQuantile(), 1f);
+ assertEquals(itr.getQuantile(), 1.0f);
assertEquals(itr.getWeight(), 1);
assertEquals(itr.getCumulativeWeight(EXCLUSIVE), 0);
assertEquals(itr.getCumulativeWeight(INCLUSIVE), 1);
@@ -84,7 +84,7 @@
assertTrue(itr.next());
- assertEquals(itr.getQuantile(), 2f);
+ assertEquals(itr.getQuantile(), 2.0f);
assertEquals(itr.getWeight(), 1);
assertEquals(itr.getCumulativeWeight(EXCLUSIVE), 1);
assertEquals(itr.getCumulativeWeight(INCLUSIVE), 2);
diff --git a/src/test/java/org/apache/datasketches/kll/KllFloatsSketchSerDeTest.java b/src/test/java/org/apache/datasketches/kll/KllFloatsSketchSerDeTest.java
index 39167a8..183a063 100644
--- a/src/test/java/org/apache/datasketches/kll/KllFloatsSketchSerDeTest.java
+++ b/src/test/java/org/apache/datasketches/kll/KllFloatsSketchSerDeTest.java
@@ -85,8 +85,8 @@
assertEquals(sk3.getNumRetained(), 1);
assertEquals(sk3.getN(), 1);
assertEquals(sk3.getNormalizedRankError(false), sk1.getNormalizedRankError(false));
- assertEquals(sk3.getMinItem(), 1f);
- assertEquals(sk3.getMaxItem(), 1f);
+ assertEquals(sk3.getMinItem(), 1.0f);
+ assertEquals(sk3.getMaxItem(), 1.0f);
assertEquals(sk3.getSerializedSizeBytes(), sk1.getSerializedSizeBytes());
//from heap -> byte[] -> off heap -> byte[] -> compare byte[]
final byte[] bytes2 = sk3.toByteArray();
@@ -100,8 +100,8 @@
for (int i = 0; i < n; i++) {
sk1.update(i);
}
- assertEquals(sk1.getMinItem(), 0f);
- assertEquals(sk1.getMaxItem(), 999f);
+ assertEquals(sk1.getMinItem(), 0.0f);
+ assertEquals(sk1.getMaxItem(), 999.0f);
//from heap -> byte[] -> heap
final byte[] bytes = sk1.toByteArray();
final KllFloatsSketch sk2 = KllFloatsSketch.heapify(Memory.wrap(bytes));
@@ -130,7 +130,7 @@
@Test
public void compatibilityWithCppEstimationMode() throws Exception {
final File file = Util.getResourceFile("kll_float_estimation_cpp.sk");
- try (final MapHandle mh = Memory.map(file)) {
+ try (MapHandle mh = Memory.map(file)) {
final KllFloatsSketch sk = KllFloatsSketch.heapify(mh.get());
assertEquals(sk.getMinItem(), 0);
assertEquals(sk.getMaxItem(), 999);
diff --git a/src/test/java/org/apache/datasketches/kll/KllFloatsSketchTest.java b/src/test/java/org/apache/datasketches/kll/KllFloatsSketchTest.java
index aad40cf..b79dbfd 100644
--- a/src/test/java/org/apache/datasketches/kll/KllFloatsSketchTest.java
+++ b/src/test/java/org/apache/datasketches/kll/KllFloatsSketchTest.java
@@ -82,15 +82,15 @@
assertFalse(sketch.isEmpty());
assertEquals(sketch.getN(), 1);
assertEquals(sketch.getNumRetained(), 1);
- assertEquals(sketch.getRank(1f, EXCLUSIVE), 0.0);
- assertEquals(sketch.getRank(2, EXCLUSIVE), 1.0);
- assertEquals(sketch.getRank(1, EXCLUSIVE), 0.0);
- assertEquals(sketch.getRank(2, EXCLUSIVE), 1.0);
- assertEquals(sketch.getRank(0, INCLUSIVE), 0.0);
- assertEquals(sketch.getRank(1, INCLUSIVE), 1.0);
- assertEquals(sketch.getMinItem(), 1f);
- assertEquals(sketch.getMaxItem(), 1f);
- assertEquals(sketch.getQuantile(0.5, EXCLUSIVE), 1f);
+ assertEquals(sketch.getRank(0.0f, EXCLUSIVE), 0.0);
+ assertEquals(sketch.getRank(1.0f, EXCLUSIVE), 0.0);
+ assertEquals(sketch.getRank(2.0f, EXCLUSIVE), 1.0);
+ assertEquals(sketch.getRank(0.0f, INCLUSIVE), 0.0);
+ assertEquals(sketch.getRank(1.0f, INCLUSIVE), 1.0);
+ assertEquals(sketch.getRank(2.0f, INCLUSIVE), 1.0);
+ assertEquals(sketch.getMinItem(), 1.0f);
+ assertEquals(sketch.getMaxItem(), 1.0f);
+ assertEquals(sketch.getQuantile(0.5, EXCLUSIVE), 1.0f);
assertEquals(sketch.getQuantile(0.5, INCLUSIVE), 1.0f);
}
@@ -134,7 +134,7 @@
{
// getQuantile() and getQuantiles() equivalence INCLUSIVE
final float[] quantiles =
- sketch.getQuantiles(new double[] {0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1}, INCLUSIVE);
+ sketch.getQuantiles(new double[] {0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0}, INCLUSIVE);
for (int i = 0; i <= 10; i++) {
assertEquals(sketch.getQuantile(i / 10.0, INCLUSIVE), quantiles[i]);
}
@@ -148,8 +148,8 @@
for (int i = 0; i < n; i++) {
sketch.update(i);
- assertEquals(sketch.getN(), i + 1);
}
+ assertEquals(sketch.getN(), n);
// test getRank
for (int i = 0; i < n; i++) {
@@ -183,7 +183,7 @@
assertTrue(previousQuantile <= quantile);
previousQuantile = quantile;
}
-}
+ }
@Test
public void getRankGetCdfGetPmfConsistency() {
@@ -208,7 +208,7 @@
assertEquals(sumPmf, 1.0, NUMERIC_NOISE_TOLERANCE);
assertEquals(ranks[n], 1.0, NUMERIC_NOISE_TOLERANCE);
}
- { // inclusive = false (default)
+ { // inclusive = true
final double[] ranks = sketch.getCDF(values, INCLUSIVE);
final double[] pmf = sketch.getPMF(values, INCLUSIVE);
double sumPmf = 0;
@@ -263,7 +263,7 @@
assertEquals(sketch1.getMaxItem(), n - 1f);
assertEquals(sketch2.getMinItem(), n);
- assertEquals(sketch2.getMaxItem(), 2f * n - 1f);
+ assertEquals(sketch2.getMaxItem(), 2f * n - 1.0f);
assertTrue(sketch1.getNormalizedRankError(false) < sketch2.getNormalizedRankError(false));
assertTrue(sketch1.getNormalizedRankError(true) < sketch2.getNormalizedRankError(true));
@@ -275,8 +275,8 @@
assertFalse(sketch1.isEmpty());
assertEquals(sketch1.getN(), 2 * n);
- assertEquals(sketch1.getMinItem(), 0f);
- assertEquals(sketch1.getMaxItem(), 2f * n - 1f);
+ assertEquals(sketch1.getMinItem(), 0.0f);
+ assertEquals(sketch1.getMaxItem(), 2.0f * n - 1.0f);
assertEquals(sketch1.getQuantile(0.5), n, 2 * n * PMF_EPS_FOR_K_128);
}
@@ -284,7 +284,7 @@
public void mergeEmptyLowerK() {
final KllFloatsSketch sketch1 = KllFloatsSketch.newHeapInstance(256);
final KllFloatsSketch sketch2 = KllFloatsSketch.newHeapInstance(128);
- final int n = 10000;
+ final int n = 10_000;
for (int i = 0; i < n; i++) {
sketch1.update(i);
}
@@ -296,17 +296,17 @@
assertFalse(sketch1.isEmpty());
assertEquals(sketch1.getN(), n);
- assertEquals(sketch1.getMinItem(), 0f);
- assertEquals(sketch1.getMaxItem(), n - 1f);
- assertEquals(sketch1.getQuantile(0.5), n / 2f, n * PMF_EPS_FOR_K_256);
+ assertEquals(sketch1.getMinItem(), 0.0f);
+ assertEquals(sketch1.getMaxItem(), n - 1.0f);
+ assertEquals(sketch1.getQuantile(0.5), n / 2.0f, n * PMF_EPS_FOR_K_256);
//merge the other way
sketch2.merge(sketch1);
assertFalse(sketch1.isEmpty());
assertEquals(sketch1.getN(), n);
assertEquals(sketch1.getMinItem(), 0f);
- assertEquals(sketch1.getMaxItem(), n - 1f);
- assertEquals(sketch1.getQuantile(0.5), n / 2f, n * PMF_EPS_FOR_K_256);
+ assertEquals(sketch1.getMaxItem(), n - 1.0f);
+ assertEquals(sketch1.getQuantile(0.5), n / 2.0f, n * PMF_EPS_FOR_K_256);
}
@Test
@@ -343,8 +343,8 @@
}
final KllFloatsSketch sketch2 = KllFloatsSketch.newHeapInstance(10);
sketch2.merge(sketch1);
- assertEquals(sketch2.getMinItem(), 1F);
- assertEquals(sketch2.getMaxItem(), 1_000_000F);
+ assertEquals(sketch2.getMinItem(), 1.0F);
+ assertEquals(sketch2.getMaxItem(), 1_000_000.0F);
}
@Test(expectedExceptions = SketchesArgumentException.class)
@@ -364,7 +364,7 @@
sketch.update(i);
}
assertEquals(sketch.getK(), KllSketch.DEFAULT_M);
- assertEquals(sketch.getQuantile(.5), 500, 1000 * PMF_EPS_FOR_K_8);
+ assertEquals(sketch.getQuantile(.5), 500.0f, 1000 * PMF_EPS_FOR_K_8);
}
@Test
@@ -381,7 +381,7 @@
public void outOfOrderSplitPoints() {
final KllFloatsSketch sketch = KllFloatsSketch.newHeapInstance();
sketch.update(0);
- sketch.getCDF(new float[] {1, 0});
+ sketch.getCDF(new float[] {1.0f, 0.0f});
}
@Test(expectedExceptions = SketchesArgumentException.class)
diff --git a/src/test/java/org/apache/datasketches/kll/KllItemsSketchiteratorTest.java b/src/test/java/org/apache/datasketches/kll/KllItemsSketchiteratorTest.java
index 41f5bf8..0607ff5 100644
--- a/src/test/java/org/apache/datasketches/kll/KllItemsSketchiteratorTest.java
+++ b/src/test/java/org/apache/datasketches/kll/KllItemsSketchiteratorTest.java
@@ -34,8 +34,7 @@
import org.testng.annotations.Test;
public class KllItemsSketchiteratorTest {
- static final String LS = System.getProperty("line.separator");
- public ArrayOfStringsSerDe serDe = new ArrayOfStringsSerDe();
+ private ArrayOfStringsSerDe serDe = new ArrayOfStringsSerDe();
@Test
public void emptySketch() {
diff --git a/src/test/java/org/apache/datasketches/kll/KllMiscDirectDoublesTest.java b/src/test/java/org/apache/datasketches/kll/KllMiscDirectDoublesTest.java
index 594cb4c..45feb76 100644
--- a/src/test/java/org/apache/datasketches/kll/KllMiscDirectDoublesTest.java
+++ b/src/test/java/org/apache/datasketches/kll/KllMiscDirectDoublesTest.java
@@ -60,7 +60,8 @@
@Test
public void checkMisc() {
- final KllDoublesSketch sk = getDirectDoublesSketch(8, 0);
+ final int k = 8;
+ final KllDoublesSketch sk = getDirectDoublesSketch(k, 0);
try { sk.getPartitionBoundaries(10); fail(); } catch (SketchesArgumentException e) {}
for (int i = 0; i < 20; i++) { sk.update(i); }
final double[] items = sk.getDoubleItemsArray();
@@ -72,11 +73,12 @@
//@Test //enable static println(..) for visual checking
public void visualCheckToString() {
- final KllDoublesSketch sk = getDirectDoublesSketch(20, 0);
+ final int k = 20;
+ final KllDoublesSketch sk = getDirectDoublesSketch(k, 0);
for (int i = 0; i < 10; i++) { sk.update(i + 1); }
println(sk.toString(true, true));
- final KllDoublesSketch sk2 = getDirectDoublesSketch(20, 0);
+ final KllDoublesSketch sk2 = getDirectDoublesSketch(k, 0);
for (int i = 0; i < 400; i++) { sk2.update(i + 1); }
println("\n" + sk2.toString(true, true));
@@ -264,7 +266,7 @@
compBytes = KllHelper.toByteArray(sk2, true);
wmem = WritableMemory.writableWrap(compBytes);
sk = KllHeapDoublesSketch.heapifyImpl(wmem);
- println(sk.toString(true, true));
+ //println(sk.toString(true, true));
assertEquals(sk.getK(), k);
assertEquals(sk.getN(), k + 1);
assertEquals(sk.getNumRetained(), 11);
@@ -428,7 +430,7 @@
int k = 20;
int m = 4;
WritableMemory dstMem = WritableMemory.allocate(1000);
- KllDoublesSketch sk = KllDirectDoublesSketch.newDirectInstance(k, m, dstMem, memReqSvr);
+ KllDoublesSketch sk = KllDirectDoublesSketch.newDirectUpdatableInstance(k, m, dstMem, memReqSvr);
for (int i = 1; i <= 200; i++) {sk.update(i); }
assertEquals(sk.getMinItem(), 1.0);
assertEquals(sk.getMaxItem(), 200.0);
diff --git a/src/test/java/org/apache/datasketches/kll/KllMiscDirectFloatsTest.java b/src/test/java/org/apache/datasketches/kll/KllMiscDirectFloatsTest.java
index addbc5c..6f042ce 100644
--- a/src/test/java/org/apache/datasketches/kll/KllMiscDirectFloatsTest.java
+++ b/src/test/java/org/apache/datasketches/kll/KllMiscDirectFloatsTest.java
@@ -60,7 +60,8 @@
@Test
public void checkMisc() {
- final KllFloatsSketch sk = getDirectFloatsSketch(8, 0);
+ final int k = 8;
+ final KllFloatsSketch sk = getDirectFloatsSketch(k, 0);
try { sk.getPartitionBoundaries(10); fail(); } catch (SketchesArgumentException e) {}
for (int i = 0; i < 20; i++) { sk.update(i); }
final float[] items = sk.getFloatItemsArray();
@@ -72,11 +73,12 @@
//@Test //enable static println(..) for visual checking
public void visualCheckToString() {
- final KllFloatsSketch sk = getDirectFloatsSketch(20, 0);
+ final int k = 20;
+ final KllFloatsSketch sk = getDirectFloatsSketch(k, 0);
for (int i = 0; i < 10; i++) { sk.update(i + 1); }
println(sk.toString(true, true));
- final KllFloatsSketch sk2 = getDirectFloatsSketch(20, 0);
+ final KllFloatsSketch sk2 = getDirectFloatsSketch(k, 0);
for (int i = 0; i < 400; i++) { sk2.update(i + 1); }
println("\n" + sk2.toString(true, true));
@@ -263,8 +265,8 @@
//println(sk2.toString(true, true));
compBytes = KllHelper.toByteArray(sk2,true);
wmem = WritableMemory.writableWrap(compBytes);
- //println(KllPreambleUtil.toString(wmem));
sk = KllHeapFloatsSketch.heapifyImpl(wmem);
+ //println(sk.toString(true, true));
assertEquals(sk.getK(), k);
assertEquals(sk.getN(), k + 1);
assertEquals(sk.getNumRetained(), 11);
diff --git a/src/test/java/org/apache/datasketches/kll/KllMiscDoublesTest.java b/src/test/java/org/apache/datasketches/kll/KllMiscDoublesTest.java
index 61bb9b7..fe20808 100644
--- a/src/test/java/org/apache/datasketches/kll/KllMiscDoublesTest.java
+++ b/src/test/java/org/apache/datasketches/kll/KllMiscDoublesTest.java
@@ -45,9 +45,7 @@
@Test
public void checkSortedViewConstruction() {
final KllDoublesSketch kll = KllDoublesSketch.newHeapInstance(20);
- for (int i = 1; i <= 20; i++) {
- kll.update(i);
- }
+ for (int i = 1; i <= 20; i++) { kll.update(i); }
DoublesSortedView fsv = kll.getSortedView();
long[] cumWeights = fsv.getCumulativeWeights();
double[] values = fsv.getQuantiles();
@@ -85,7 +83,7 @@
public void checkHeapifyExceptions1() {
KllDoublesSketch sk = KllDoublesSketch.newHeapInstance();
WritableMemory wmem = WritableMemory.writableWrap(sk.toByteArray());
- wmem.putByte(6, (byte) 3); // corrupt with odd M
+ wmem.putByte(6, (byte) 3); //corrupt with odd M
KllDoublesSketch.heapify(wmem);
}
@@ -93,7 +91,7 @@
public void checkHeapifyExceptions2() {
KllDoublesSketch sk = KllDoublesSketch.newHeapInstance();
WritableMemory wmem = WritableMemory.writableWrap(sk.toByteArray());
- wmem.putByte(0, (byte) 1); // corrupt preamble ints, should be 2
+ wmem.putByte(0, (byte) 1); //corrupt preamble ints, should be 2
KllDoublesSketch.heapify(wmem);
}
@@ -103,7 +101,7 @@
sk.update(1.0f);
sk.update(2.0f);
WritableMemory wmem = WritableMemory.writableWrap(sk.toByteArray());
- wmem.putByte(0, (byte) 1); // corrupt preamble ints, should be 5
+ wmem.putByte(0, (byte) 1); //corrupt preamble ints, should be 5
KllDoublesSketch.heapify(wmem);
}
@@ -111,7 +109,7 @@
public void checkHeapifyExceptions4() {
KllDoublesSketch sk = KllDoublesSketch.newHeapInstance();
WritableMemory wmem = WritableMemory.writableWrap(sk.toByteArray());
- wmem.putByte(1, (byte) 0); // corrupt SerVer, should be 1 or 2
+ wmem.putByte(1, (byte) 0); //corrupt SerVer, should be 1 or 2
KllDoublesSketch.heapify(wmem);
}
@@ -119,38 +117,30 @@
public void checkHeapifyExceptions5() {
KllDoublesSketch sk = KllDoublesSketch.newHeapInstance();
WritableMemory wmem = WritableMemory.writableWrap(sk.toByteArray());
- wmem.putByte(2, (byte) 0); // corrupt FamilyID, should be 15
+ wmem.putByte(2, (byte) 0); //corrupt FamilyID, should be 15
KllDoublesSketch.heapify(wmem);
}
- @Test
+ @Test //set static enablePrinting = true for visual checking
public void checkMisc() {
KllDoublesSketch sk = KllDoublesSketch.newHeapInstance(8);
- try {
- sk.getMaxItem();
- fail();
- } catch (SketchesArgumentException e) {
- }
+ try { sk.getMaxItem(); fail(); } catch (SketchesArgumentException e) {} //empty
println(sk.toString(true, true));
- for (int i = 0; i < 20; i++) {
- sk.update(i);
- }
+ for (int i = 0; i < 20; i++) { sk.update(i); }
println(sk.toString(true, true));
sk.toByteArray();
- final double[] values = sk.getDoubleItemsArray();
- assertEquals(values.length, 16);
+ final double[] items = sk.getDoubleItemsArray();
+ assertEquals(items.length, 16);
final int[] levels = sk.getLevelsArray(sk.sketchStructure);
assertEquals(levels.length, 3);
assertEquals(sk.getNumLevels(), 2);
}
- @Test // set static enablePrinting = true for visual checking
+ @Test //set static enablePrinting = true for visual checking
public void visualCheckToString() {
final KllDoublesSketch sk = KllDoublesSketch.newHeapInstance(20);
int n = 21;
- for (int i = 1; i <= n; i++) {
- sk.update(i);
- }
+ for (int i = 1; i <= n; i++) { sk.update(i); }
println(sk.toString(true, true));
assertEquals(sk.getNumLevels(), 2);
assertEquals(sk.getMinItem(), 1);
@@ -159,9 +149,7 @@
final KllDoublesSketch sk2 = KllDoublesSketch.newHeapInstance(20);
n = 400;
- for (int i = 101; i <= n + 100; i++) {
- sk2.update(i);
- }
+ for (int i = 101; i <= n + 100; i++) { sk2.update(i); }
println("\n" + sk2.toString(true, true));
assertEquals(sk2.getNumLevels(), 5);
assertEquals(sk2.getMinItem(), 101);
@@ -176,7 +164,7 @@
assertEquals(sk2.getNumRetained(), 56);
}
- @Test // set static enablePrinting = true for visual checking
+ @Test //set static enablePrinting = true for visual checking
public void viewHeapCompactions() {
int k = 20;
int n = 108;
@@ -195,7 +183,7 @@
}
}
- @Test // set static enablePrinting = true for visual checking
+ @Test //set static enablePrinting = true for visual checking
public void viewDirectCompactions() {
int k = 20;
int n = 108;
@@ -213,13 +201,11 @@
}
}
- @Test // set static enablePrinting = true for visual checking
+ @Test //set static enablePrinting = true for visual checking
public void viewCompactionAndSortedView() {
int n = 43;
KllDoublesSketch sk = KllDoublesSketch.newHeapInstance(20);
- for (int i = 1; i <= n; i++) {
- sk.update(i);
- }
+ for (int i = 1; i <= n; i++) { sk.update(i); }
println(sk.toString(true, true));
DoublesSortedView sv = sk.getSortedView();
DoublesSortedViewIterator itr = sv.iterator();
@@ -235,24 +221,20 @@
@Test
public void checkGrowLevels() {
KllDoublesSketch sk = KllDoublesSketch.newHeapInstance(20);
- for (int i = 1; i <= 21; i++) {
- sk.update(i);
- }
+ for (int i = 1; i <= 21; i++) { sk.update(i); }
assertEquals(sk.getNumLevels(), 2);
assertEquals(sk.getDoubleItemsArray().length, 33);
assertEquals(sk.getLevelsArray(sk.sketchStructure)[2], 33);
}
- @Test // set static enablePrinting = true for visual checking
+ @Test //set static enablePrinting = true for visual checking
public void checkSketchInitializeDoubleHeap() {
- int k = 20; // don't change this
+ int k = 20; //don't change this
KllDoublesSketch sk;
println("#### CASE: DOUBLE FULL HEAP");
sk = KllDoublesSketch.newHeapInstance(k);
- for (int i = 1; i <= k + 1; i++) {
- sk.update(i);
- }
+ for (int i = 1; i <= k + 1; i++) { sk.update(i); }
println(sk.toString(true, true));
assertEquals(sk.getK(), k);
assertEquals(sk.getN(), k + 1);
@@ -278,16 +260,8 @@
assertEquals(sk.getMinK(), k);
assertEquals(sk.getDoubleItemsArray().length, 20);
assertEquals(sk.getLevelsArray(sk.sketchStructure).length, 2);
- try {
- sk.getMaxItem();
- fail();
- } catch (SketchesArgumentException e) {
- }
- try {
- sk.getMinItem();
- fail();
- } catch (SketchesArgumentException e) {
- }
+ try { sk.getMaxItem(); fail(); } catch (SketchesArgumentException e) { }
+ try { sk.getMinItem(); fail(); } catch (SketchesArgumentException e) { }
assertEquals(sk.getNumLevels(), 1);
assertFalse(sk.isLevelZeroSorted());
@@ -319,10 +293,8 @@
println("#### CASE: DOUBLE FULL HEAPIFIED FROM COMPACT");
sk2 = KllDoublesSketch.newHeapInstance(k);
- for (int i = 1; i <= k + 1; i++) {
- sk2.update(i);
- }
- // println(sk.toString(true, true));
+ for (int i = 1; i <= k + 1; i++) { sk2.update(i); }
+ // println(sk2.toString(true, true));
compBytes = sk2.toByteArray();
wmem = WritableMemory.writableWrap(compBytes);
println(KllPreambleUtil.toString(wmem, DOUBLES_SKETCH, true));
@@ -345,7 +317,7 @@
// println(sk.toString(true, true));
compBytes = sk2.toByteArray();
wmem = WritableMemory.writableWrap(compBytes);
- println(KllPreambleUtil.toString(wmem, DOUBLES_SKETCH, true));
+ //println(KllPreambleUtil.toString(wmem, DOUBLES_SKETCH, true));
sk = KllDoublesSketch.heapify(wmem);
assertEquals(sk.getK(), k);
assertEquals(sk.getN(), 0);
@@ -355,26 +327,18 @@
assertEquals(sk.getMinK(), k);
assertEquals(sk.getDoubleItemsArray().length, 20);
assertEquals(sk.getLevelsArray(sk.sketchStructure).length, 2);
- try {
- sk.getMaxItem();
- fail();
- } catch (SketchesArgumentException e) {
- }
- try {
- sk.getMinItem();
- fail();
- } catch (SketchesArgumentException e) {
- }
+ try { sk.getMaxItem(); fail(); } catch (SketchesArgumentException e) { }
+ try { sk.getMinItem(); fail(); } catch (SketchesArgumentException e) { }
assertEquals(sk.getNumLevels(), 1);
assertFalse(sk.isLevelZeroSorted());
println("#### CASE: DOUBLE SINGLE HEAPIFIED FROM COMPACT");
sk2 = KllDoublesSketch.newHeapInstance(k);
sk2.update(1);
- println(sk2.toString(true, true));
+ //println(sk2.toString(true, true));
compBytes = sk2.toByteArray();
wmem = WritableMemory.writableWrap(compBytes);
- println(KllPreambleUtil.toString(wmem, DOUBLES_SKETCH, true));
+ //println(KllPreambleUtil.toString(wmem, DOUBLES_SKETCH, true));
sk = KllDoublesSketch.heapify(wmem);
assertEquals(sk.getK(), k);
assertEquals(sk.getN(), 1);
@@ -400,10 +364,8 @@
println("#### CASE: DOUBLE FULL HEAPIFIED FROM UPDATABLE");
sk2 = KllDoublesSketch.newHeapInstance(k);
- for (int i = 1; i <= k + 1; i++) {
- sk2.update(i);
- }
- // println(sk2.toString(true, true));
+ for (int i = 1; i <= k + 1; i++) { sk2.update(i); }
+ //println(sk2.toString(true, true));
compBytes = KllHelper.toByteArray(sk2, true);
wmem = WritableMemory.writableWrap(compBytes);
println(KllPreambleUtil.toString(wmem, DOUBLES_SKETCH, true));
@@ -426,7 +388,7 @@
// println(sk.toString(true, true));
compBytes = KllHelper.toByteArray(sk2, true);
wmem = WritableMemory.writableWrap(compBytes);
- println(KllPreambleUtil.toString(wmem, DOUBLES_SKETCH, true));
+ //println(KllPreambleUtil.toString(wmem, DOUBLES_SKETCH, true));
sk = KllHeapDoublesSketch.heapifyImpl(wmem);
assertEquals(sk.getK(), k);
assertEquals(sk.getN(), 0);
@@ -436,26 +398,18 @@
assertEquals(sk.getMinK(), k);
assertEquals(sk.getDoubleItemsArray().length, 20);
assertEquals(sk.getLevelsArray(sk.sketchStructure).length, 2);
- try {
- sk.getMaxItem();
- fail();
- } catch (SketchesArgumentException e) {
- }
- try {
- sk.getMinItem();
- fail();
- } catch (SketchesArgumentException e) {
- }
+ try { sk.getMaxItem(); fail(); } catch (SketchesArgumentException e) { }
+ try { sk.getMinItem(); fail(); } catch (SketchesArgumentException e) { }
assertEquals(sk.getNumLevels(), 1);
assertFalse(sk.isLevelZeroSorted());
println("#### CASE: DOUBLE SINGLE HEAPIFIED FROM UPDATABLE");
sk2 = KllDoublesSketch.newHeapInstance(k);
sk2.update(1);
- // println(sk.toString(true, true));
+ //println(sk.toString(true, true));
compBytes = KllHelper.toByteArray(sk2, true);
wmem = WritableMemory.writableWrap(compBytes);
- println(KllPreambleUtil.toString(wmem, DOUBLES_SKETCH, true));
+ //println(KllPreambleUtil.toString(wmem, DOUBLES_SKETCH, true));
sk = KllHeapDoublesSketch.heapifyImpl(wmem);
assertEquals(sk.getK(), k);
assertEquals(sk.getN(), 1);
@@ -471,9 +425,9 @@
assertFalse(sk.isLevelZeroSorted());
}
- @Test // set static enablePrinting = true for visual checking
+ @Test //set static enablePrinting = true for visual checking
public void checkMemoryToStringDoubleCompact() {
- int k = 20; // don't change this
+ int k = 20; //don't change this
KllDoublesSketch sk;
KllDoublesSketch sk2;
byte[] compBytes;
@@ -483,9 +437,7 @@
println("#### CASE: DOUBLE FULL COMPACT");
sk = KllDoublesSketch.newHeapInstance(k);
- for (int i = 1; i <= k + 1; i++) {
- sk.update(i);
- }
+ for (int i = 1; i <= k + 1; i++) { sk.update(i); }
compBytes = sk.toByteArray();
wmem = WritableMemory.writableWrap(compBytes);
s = KllPreambleUtil.toString(wmem, DOUBLES_SKETCH, true);
@@ -531,9 +483,9 @@
assertEquals(compBytes, compBytes2);
}
- @Test // set static enablePrinting = true for visual checking
+ @Test //set static enablePrinting = true for visual checking
public void checkMemoryToStringDoubleUpdatable() {
- int k = 20; // don't change this
+ int k = 20; //don't change this
KllDoublesSketch sk;
KllDoublesSketch sk2;
byte[] upBytes;
@@ -543,9 +495,7 @@
println("#### CASE: DOUBLE FULL UPDATABLE");
sk = KllDoublesSketch.newHeapInstance(20);
- for (int i = 1; i <= k + 1; i++) {
- sk.update(i);
- }
+ for (int i = 1; i <= k + 1; i++) { sk.update(i); }
upBytes = KllHelper.toByteArray(sk, true);
wmem = WritableMemory.writableWrap(upBytes);
s = KllPreambleUtil.toString(wmem, DOUBLES_SKETCH, true);
@@ -556,7 +506,7 @@
wmem = WritableMemory.writableWrap(upBytes2);
s = KllPreambleUtil.toString(wmem, DOUBLES_SKETCH, true);
println("step 2: memory to heap sketch, to byte[]/memory & analyze memory. Should match above");
- println(s); // note: heapify does not copy garbage, while toUpdatableByteArray does
+ println(s); //note: heapify does not copy garbage, while toUpdatableByteArray does
assertEquals(sk.getN(), sk2.getN());
assertEquals(sk.getMinItem(), sk2.getMinItem());
assertEquals(sk.getMaxItem(), sk2.getMaxItem());
@@ -603,8 +553,8 @@
WritableMemory wmem = WritableMemory.allocate(3000);
WritableMemory wmem2 = WritableMemory.allocate(3000);
- KllDoublesSketch sk1 = KllDirectDoublesSketch.newDirectInstance(k, m, wmem, memReqSvr);
- KllDoublesSketch sk2 = KllDirectDoublesSketch.newDirectInstance(k, m, wmem2, memReqSvr);
+ KllDoublesSketch sk1 = KllDirectDoublesSketch.newDirectUpdatableInstance(k, m, wmem, memReqSvr);
+ KllDoublesSketch sk2 = KllDirectDoublesSketch.newDirectUpdatableInstance(k, m, wmem2, memReqSvr);
for (int i = 1; i <= n1; i++) {
sk1.update(i);
}
@@ -646,21 +596,17 @@
/**
* @param format the format
- * @param args the args
+ * @param args the args
*/
- private static final void printf(final String format, final Object... args) {
- if (enablePrinting) {
- System.out.printf(format, args);
- }
+ private static final void printf(final String format, final Object ... args) {
+ if (enablePrinting) { System.out.printf(format, args); }
}
/**
* @param o the Object to println
*/
private static final void println(final Object o) {
- if (enablePrinting) {
- System.out.println(o.toString());
- }
+ if (enablePrinting) { System.out.println(o.toString()); }
}
}
diff --git a/src/test/java/org/apache/datasketches/kll/KllMiscFloatsTest.java b/src/test/java/org/apache/datasketches/kll/KllMiscFloatsTest.java
index d4a174e..a7b699c 100644
--- a/src/test/java/org/apache/datasketches/kll/KllMiscFloatsTest.java
+++ b/src/test/java/org/apache/datasketches/kll/KllMiscFloatsTest.java
@@ -83,7 +83,7 @@
public void checkHeapifyExceptions1() {
KllFloatsSketch sk = KllFloatsSketch.newHeapInstance();
WritableMemory wmem = WritableMemory.writableWrap(sk.toByteArray());
- wmem.putByte(6, (byte)3); //corrupt with odd M
+ wmem.putByte(6, (byte) 3); //corrupt with odd M
KllFloatsSketch.heapify(wmem);
}
@@ -91,7 +91,7 @@
public void checkHeapifyExceptions2() {
KllFloatsSketch sk = KllFloatsSketch.newHeapInstance();
WritableMemory wmem = WritableMemory.writableWrap(sk.toByteArray());
- wmem.putByte(0, (byte)1); //corrupt preamble ints, should be 2
+ wmem.putByte(0, (byte) 1); //corrupt preamble ints, should be 2
KllFloatsSketch.heapify(wmem);
}
@@ -101,7 +101,7 @@
sk.update(1.0f);
sk.update(2.0f);
WritableMemory wmem = WritableMemory.writableWrap(sk.toByteArray());
- wmem.putByte(0, (byte)1); //corrupt preamble ints, should be 5
+ wmem.putByte(0, (byte) 1); //corrupt preamble ints, should be 5
KllFloatsSketch.heapify(wmem);
}
@@ -109,7 +109,7 @@
public void checkHeapifyExceptions4() {
KllFloatsSketch sk = KllFloatsSketch.newHeapInstance();
WritableMemory wmem = WritableMemory.writableWrap(sk.toByteArray());
- wmem.putByte(1, (byte)0); //corrupt SerVer, should be 1 or 2
+ wmem.putByte(1, (byte) 0); //corrupt SerVer, should be 1 or 2
KllFloatsSketch.heapify(wmem);
}
@@ -117,7 +117,7 @@
public void checkHeapifyExceptions5() {
KllFloatsSketch sk = KllFloatsSketch.newHeapInstance();
WritableMemory wmem = WritableMemory.writableWrap(sk.toByteArray());
- wmem.putByte(2, (byte)0); //corrupt FamilyID, should be 15
+ wmem.putByte(2, (byte) 0); //corrupt FamilyID, should be 15
KllFloatsSketch.heapify(wmem);
}
@@ -294,7 +294,7 @@
println("#### CASE: FLOAT FULL HEAPIFIED FROM COMPACT");
sk2 = KllFloatsSketch.newHeapInstance(k);
for (int i = 1; i <= k + 1; i++) { sk2.update(i); }
- println(sk2.toString(true, true));
+ //println(sk2.toString(true, true));
compBytes = sk2.toByteArray();
wmem = WritableMemory.writableWrap(compBytes);
println(KllPreambleUtil.toString(wmem, FLOATS_SKETCH, true));
@@ -317,7 +317,7 @@
//println(sk.toString(true, true));
compBytes = sk2.toByteArray();
wmem = WritableMemory.writableWrap(compBytes);
- println(KllPreambleUtil.toString(wmem, FLOATS_SKETCH, true));
+ //println(KllPreambleUtil.toString(wmem, FLOATS_SKETCH, true));
sk = KllFloatsSketch.heapify(wmem);
assertEquals(sk.getK(), k);
assertEquals(sk.getN(), 0);
@@ -338,7 +338,7 @@
//println(sk2.toString(true, true));
compBytes = sk2.toByteArray();
wmem = WritableMemory.writableWrap(compBytes);
- println(KllPreambleUtil.toString(wmem, FLOATS_SKETCH, true));
+ //println(KllPreambleUtil.toString(wmem, FLOATS_SKETCH, true));
sk = KllFloatsSketch.heapify(wmem);
assertEquals(sk.getK(), k);
assertEquals(sk.getN(), 1);
@@ -388,7 +388,7 @@
//println(sk.toString(true, true));
compBytes = KllHelper.toByteArray(sk2, true);
wmem = WritableMemory.writableWrap(compBytes);
- println(KllPreambleUtil.toString(wmem, FLOATS_SKETCH, true));
+ //println(KllPreambleUtil.toString(wmem, FLOATS_SKETCH, true));
sk = KllHeapFloatsSketch.heapifyImpl(wmem);
assertEquals(sk.getK(), k);
assertEquals(sk.getN(), 0);
@@ -409,7 +409,7 @@
//println(sk.toString(true, true));
compBytes = KllHelper.toByteArray(sk2, true);
wmem = WritableMemory.writableWrap(compBytes);
- println(KllPreambleUtil.toString(wmem, FLOATS_SKETCH, true));
+ //println(KllPreambleUtil.toString(wmem, FLOATS_SKETCH, true));
sk = KllHeapFloatsSketch.heapifyImpl(wmem);
assertEquals(sk.getK(), k);
assertEquals(sk.getN(), 1);
@@ -598,7 +598,7 @@
* @param format the format
* @param args the args
*/
- private static final void printf(final String format, final Object ...args) {
+ private static final void printf(final String format, final Object ... args) {
if (enablePrinting) { System.out.printf(format, args); }
}