Attempts to get the Sorted View from an empty sketch will now fail
immediately, (as opposed to eventually).
The sorted View is set to null in reset();
Tests added to confirm.
This applies to Floats, Doubles and Items sketches.
diff --git a/src/main/java/org/apache/datasketches/kll/KllDoublesSketch.java b/src/main/java/org/apache/datasketches/kll/KllDoublesSketch.java
index a8308a0..183a15b 100644
--- a/src/main/java/org/apache/datasketches/kll/KllDoublesSketch.java
+++ b/src/main/java/org/apache/datasketches/kll/KllDoublesSketch.java
@@ -278,6 +278,7 @@
@Override
@SuppressFBWarnings(value = "EI_EXPOSE_REP", justification = "OK in this case.")
public DoublesSortedView getSortedView() {
+ if (isEmpty()) { throw new SketchesArgumentException(EMPTY_MSG); }
refreshSortedView();
return kllDoublesSV;
}
@@ -313,6 +314,7 @@
setMinItem(Double.NaN);
setMaxItem(Double.NaN);
setDoubleItemsArray(new double[k]);
+ kllDoublesSV = null;
}
@Override
diff --git a/src/main/java/org/apache/datasketches/kll/KllFloatsSketch.java b/src/main/java/org/apache/datasketches/kll/KllFloatsSketch.java
index 69fd9da..6c60fac 100644
--- a/src/main/java/org/apache/datasketches/kll/KllFloatsSketch.java
+++ b/src/main/java/org/apache/datasketches/kll/KllFloatsSketch.java
@@ -278,6 +278,7 @@
@Override
@SuppressFBWarnings(value = "EI_EXPOSE_REP", justification = "OK in this case.")
public FloatsSortedView getSortedView() {
+ if (isEmpty()) { throw new SketchesArgumentException(EMPTY_MSG); }
refreshSortedView();
return kllFloatsSV;
}
@@ -313,6 +314,7 @@
setMinItem(Float.NaN);
setMaxItem(Float.NaN);
setFloatItemsArray(new float[k]);
+ kllFloatsSV = null;
}
@Override
diff --git a/src/main/java/org/apache/datasketches/kll/KllItemsSketch.java b/src/main/java/org/apache/datasketches/kll/KllItemsSketch.java
index e8c7f41..79fc0e3 100644
--- a/src/main/java/org/apache/datasketches/kll/KllItemsSketch.java
+++ b/src/main/java/org/apache/datasketches/kll/KllItemsSketch.java
@@ -241,6 +241,7 @@
@Override
public KllItemsSketchSortedView<T> getSortedView() {
+ if (isEmpty()) { throw new SketchesArgumentException(EMPTY_MSG); }
refreshSortedView();
return kllItemsSV;
}
@@ -272,6 +273,7 @@
setMinItem(null);
setMaxItem(null);
setItemsArray(new Object[k]);
+ kllItemsSV = null;
}
public byte[] toByteArray() {
diff --git a/src/test/java/org/apache/datasketches/kll/KllDoublesSketchTest.java b/src/test/java/org/apache/datasketches/kll/KllDoublesSketchTest.java
index b9622de..95986d5 100644
--- a/src/test/java/org/apache/datasketches/kll/KllDoublesSketchTest.java
+++ b/src/test/java/org/apache/datasketches/kll/KllDoublesSketchTest.java
@@ -612,6 +612,17 @@
assertTrue(sk1.isSameResource(reg3));
}
+ @Test
+ public void checkSortedViewAfterReset() {
+ KllDoublesSketch sk = KllDoublesSketch.newHeapInstance(20);
+ sk.update(1.0);
+ DoublesSortedView sv = sk.getSortedView();
+ double dsv = sv.getQuantile(1.0, INCLUSIVE);
+ assertEquals(dsv, 1.0);
+ sk.reset();
+ try { sk.getSortedView(); fail(); } catch (SketchesArgumentException e) { }
+ }
+
private final static boolean enablePrinting = false;
/**
diff --git a/src/test/java/org/apache/datasketches/kll/KllFloatsSketchTest.java b/src/test/java/org/apache/datasketches/kll/KllFloatsSketchTest.java
index b79dbfd..2a122c0 100644
--- a/src/test/java/org/apache/datasketches/kll/KllFloatsSketchTest.java
+++ b/src/test/java/org/apache/datasketches/kll/KllFloatsSketchTest.java
@@ -612,6 +612,17 @@
assertTrue(sk1.isSameResource(reg3));
}
+ @Test
+ public void checkSortedViewAfterReset() {
+ KllFloatsSketch sk = KllFloatsSketch.newHeapInstance(20);
+ sk.update(1.0f);
+ FloatsSortedView sv = sk.getSortedView();
+ float fsv = sv.getQuantile(1.0, INCLUSIVE);
+ assertEquals(fsv, 1.0f);
+ sk.reset();
+ try { sk.getSortedView(); fail(); } catch (SketchesArgumentException e) { }
+ }
+
private final static boolean enablePrinting = false;
/**
diff --git a/src/test/java/org/apache/datasketches/kll/KllItemsSketchTest.java b/src/test/java/org/apache/datasketches/kll/KllItemsSketchTest.java
index b11efe8..0913f46 100644
--- a/src/test/java/org/apache/datasketches/kll/KllItemsSketchTest.java
+++ b/src/test/java/org/apache/datasketches/kll/KllItemsSketchTest.java
@@ -39,6 +39,7 @@
import org.apache.datasketches.memory.DefaultMemoryRequestServer;
import org.apache.datasketches.memory.Memory;
import org.apache.datasketches.memory.WritableMemory;
+import org.apache.datasketches.quantilescommon.DoublesSortedView;
import org.apache.datasketches.quantilescommon.GenericSortedView;
import org.apache.datasketches.quantilescommon.GenericSortedViewIterator;
import org.testng.annotations.Test;
@@ -737,6 +738,17 @@
try { sk2.setN(0); fail(); } catch (SketchesArgumentException e) { }
}
+ @Test
+ public void checkSortedViewAfterReset() {
+ KllItemsSketch<String> sk = KllItemsSketch.newHeapInstance(20, Comparator.naturalOrder(), serDe);
+ sk.update("1");
+ GenericSortedView<String> sv = sk.getSortedView();
+ String ssv = sv.getQuantile(1.0, INCLUSIVE);
+ assertEquals(ssv, "1");
+ sk.reset();
+ try { sk.getSortedView(); fail(); } catch (SketchesArgumentException e) { }
+ }
+
private final static boolean enablePrinting = false;