Merge pull request #374 from apache/simplified_setop_cases
Simplified set operations
diff --git a/src/main/java/org/apache/datasketches/SetOperationCornerCases.java b/src/main/java/org/apache/datasketches/SetOperationCornerCases.java
index 280c78f..0ff5804 100644
--- a/src/main/java/org/apache/datasketches/SetOperationCornerCases.java
+++ b/src/main/java/org/apache/datasketches/SetOperationCornerCases.java
@@ -26,8 +26,8 @@
private static final long MAX = Long.MAX_VALUE;
public enum IntersectResult {
- NEW_1_0_T(1, "New{1.0, 0, T}"),
- RESULTDEGEN_MIN_0_F(2, "New{MinTheta, 0, F}"),
+ EMPTY_1_0_T(1, "Empty{1.0, 0, T}"),
+ DEGEN_MIN_0_F(2, "Degenerate{MinTheta, 0, F}"),
FULL_INTER(6, "Full Intersect");
private int interRid;
@@ -48,9 +48,9 @@
}
public enum AnotbResult {
- NEW_1_0_T(1, "New{1.0, 0, T}"),
- RESULTDEGEN_MIN_0_F(2, "New{MinTheta, 0, F}"),
- RESULTDEGEN_THA_0_F(3, "New{ThetaA, 0, F}"),
+ EMPTY_1_0_T(1, "Empty{1.0, 0, T}"),
+ DEGEN_MIN_0_F(2, "Degenerate{MinTheta, 0, F}"),
+ DEGEN_THA_0_F(3, "Degenerate{ThetaA, 0, F}"),
SKA_TRIM(4, "Trim Sketch A by MinTheta"),
SKETCH_A(5, "Sketch A Exactly"),
FULL_ANOTB(7, "Full AnotB");
@@ -73,60 +73,41 @@
}
public enum CornerCase {
- ResultDegen_ResultDegen(0, "A{<1.0, 0, F} ; B{<1.0, 0, F}",
- IntersectResult.RESULTDEGEN_MIN_0_F, AnotbResult.RESULTDEGEN_MIN_0_F), //0
- ResultDegen_NewDegen(01, "A{<1.0, 0, F} ; B{<1.0, 0, T}",
- IntersectResult.NEW_1_0_T, AnotbResult.RESULTDEGEN_THA_0_F), //1
- ResultDegen_Estimation(02, "A{<1.0, 0, F} ; B{<1.0,>0, F}",
- IntersectResult.RESULTDEGEN_MIN_0_F, AnotbResult.RESULTDEGEN_MIN_0_F), //2
- ResultDegen_New(05, "A{<1.0, 0, F} ; B{ 1.0, 0, T}",
- IntersectResult.NEW_1_0_T, AnotbResult.RESULTDEGEN_THA_0_F), //5
- ResultDegen_Exact(06, "A{<1.0, 0, F} ; B{ 1.0,>0, F}",
- IntersectResult.RESULTDEGEN_MIN_0_F, AnotbResult.RESULTDEGEN_THA_0_F), //6
+ Empty_Empty(055, "A{ 1.0, 0, T} ; B{ 1.0, 0, T}",
+ IntersectResult.EMPTY_1_0_T, AnotbResult.EMPTY_1_0_T),
+ Empty_Exact(056, "A{ 1.0, 0, T} ; B{ 1.0,>0, F}",
+ IntersectResult.EMPTY_1_0_T, AnotbResult.EMPTY_1_0_T),
+ Empty_Estimation(052, "A{ 1.0, 0, T} ; B{<1.0,>0, F}",
+ IntersectResult.EMPTY_1_0_T, AnotbResult.EMPTY_1_0_T),
+ Empty_Degen(050, "A{ 1.0, 0, T} ; B{<1.0, 0, F}",
+ IntersectResult.EMPTY_1_0_T, AnotbResult.EMPTY_1_0_T),
- NewDegen_ResultDegen(010, "A{<1.0, 0, T} ; B{<1.0, 0, F}",
- IntersectResult.NEW_1_0_T, AnotbResult.NEW_1_0_T), //8
- NewDegen_NewDegen(011, "A{<1.0, 0, T} ; B{<1.0, 0, T}",
- IntersectResult.NEW_1_0_T, AnotbResult.NEW_1_0_T), //9
- NewDegen_Estimation(012, "A{<1.0, 0, T} ; B{<1.0,>0, F}",
- IntersectResult.NEW_1_0_T, AnotbResult.NEW_1_0_T), //10
- NewDegen_New(015, "A{<1.0, 0, T} ; B{ 1.0, 0, T}",
- IntersectResult.NEW_1_0_T, AnotbResult.NEW_1_0_T), //13
- NewDegen_Exact(016, "A{<1.0, 0, T} ; B{ 1.0,>0, F}",
- IntersectResult.NEW_1_0_T, AnotbResult.NEW_1_0_T), //14
+ Exact_Empty(065, "A{ 1.0,>0, F} ; B{ 1.0, 0, T}",
+ IntersectResult.EMPTY_1_0_T, AnotbResult.SKETCH_A),
+ Exact_Exact(066, "A{ 1.0,>0, F} ; B{ 1.0,>0, F}",
+ IntersectResult.FULL_INTER, AnotbResult.FULL_ANOTB),
+ Exact_Estimation(062, "A{ 1.0,>0, F} ; B{<1.0,>0, F}",
+ IntersectResult.FULL_INTER, AnotbResult.FULL_ANOTB),
+ Exact_Degen(060, "A{ 1.0,>0, F} ; B{<1.0, 0, F}",
+ IntersectResult.DEGEN_MIN_0_F, AnotbResult.SKA_TRIM),
- Estimation_ResultDegen(020, "A{<1.0,>0, F} ; B{<1.0, 0, F}",
- IntersectResult.RESULTDEGEN_MIN_0_F, AnotbResult.SKA_TRIM), //16
- Estimation_NewDegen(021, "A{<1.0,>0, F} ; B{<1.0, 0, T}",
- IntersectResult.NEW_1_0_T, AnotbResult.SKETCH_A), //17
- Estimation_Estimation(022, "A{<1.0,>0, F} ; B{<1.0,>0, F}",
- IntersectResult.FULL_INTER, AnotbResult.FULL_ANOTB), //18
- Estimation_New(025, "A{<1.0,>0, F} ; B{ 1.0, 0, T}",
- IntersectResult.NEW_1_0_T, AnotbResult.SKETCH_A), //21
- Estimation_Exact(026, "A{<1.0,>0, F} ; B{ 1.0,>0, F}",
- IntersectResult.FULL_INTER, AnotbResult.FULL_ANOTB), //22
+ Estimation_Empty(025, "A{<1.0,>0, F} ; B{ 1.0, 0, T}",
+ IntersectResult.EMPTY_1_0_T, AnotbResult.SKETCH_A),
+ Estimation_Exact(026, "A{<1.0,>0, F} ; B{ 1.0,>0, F}",
+ IntersectResult.FULL_INTER, AnotbResult.FULL_ANOTB),
+ Estimation_Estimation(022, "A{<1.0,>0, F} ; B{<1.0,>0, F}",
+ IntersectResult.FULL_INTER, AnotbResult.FULL_ANOTB),
+ Estimation_Degen(020, "A{<1.0,>0, F} ; B{<1.0, 0, F}",
+ IntersectResult.DEGEN_MIN_0_F, AnotbResult.SKA_TRIM),
- New_ResultDegen(050, "A{ 1.0, 0, T} ; B{<1.0, 0, F}",
- IntersectResult.NEW_1_0_T, AnotbResult.NEW_1_0_T), //40
- New_NewDegen(051, "A{ 1.0, 0, T} ; B{<1.0, 0, T}",
- IntersectResult.NEW_1_0_T, AnotbResult.NEW_1_0_T), //41
- New_Estimation(052, "A{ 1.0, 0, T} ; B{<1.0,>0, F}",
- IntersectResult.NEW_1_0_T, AnotbResult.NEW_1_0_T), //42
- New_New(055, "A{ 1.0, 0, T} ; B{ 1.0, 0, T}",
- IntersectResult.NEW_1_0_T, AnotbResult.NEW_1_0_T), //45
- New_Exact(056, "A{ 1.0, 0, T} ; B{ 1.0,>0, F}",
- IntersectResult.NEW_1_0_T, AnotbResult.NEW_1_0_T), //46
-
- Exact_ResultDegen(060, "A{ 1.0,>0, F} ; B{<1.0, 0, F}",
- IntersectResult.RESULTDEGEN_MIN_0_F, AnotbResult.SKA_TRIM), //48
- Exact_NewDegen(061, "A{ 1.0,>0, F} ; B{<1.0, 0, T}",
- IntersectResult.NEW_1_0_T, AnotbResult.SKETCH_A), //49
- Exact_Estimation(062, "A{ 1.0,>0, F} ; B{<1.0,>0, F}",
- IntersectResult.FULL_INTER, AnotbResult.FULL_ANOTB), //50
- Exact_New(065, "A{ 1.0,>0, F} ; B{ 1.0, 0, T}",
- IntersectResult.NEW_1_0_T, AnotbResult.SKETCH_A), //53
- Exact_Exact(066, "A{ 1.0,>0, F} ; B{ 1.0,>0, F}",
- IntersectResult.FULL_INTER, AnotbResult.FULL_ANOTB); //54
+ Degen_Empty(005, "A{<1.0, 0, F} ; B{ 1.0, 0, T}",
+ IntersectResult.EMPTY_1_0_T, AnotbResult.DEGEN_THA_0_F),
+ Degen_Exact(006, "A{<1.0, 0, F} ; B{ 1.0,>0, F}",
+ IntersectResult.DEGEN_MIN_0_F, AnotbResult.DEGEN_THA_0_F),
+ Degen_Estimation(002, "A{<1.0, 0, F} ; B{<1.0,>0, F}",
+ IntersectResult.DEGEN_MIN_0_F, AnotbResult.DEGEN_MIN_0_F),
+ Degen_Degen(000, "A{<1.0, 0, F} ; B{<1.0, 0, F}",
+ IntersectResult.DEGEN_MIN_0_F, AnotbResult.DEGEN_MIN_0_F);
private static final Map<Integer, CornerCase> idToCornerCaseMap = new HashMap<>();
private int id;
@@ -168,21 +149,20 @@
public static CornerCase idToCornerCase(final int id) {
final CornerCase cc = idToCornerCaseMap.get(id);
if (cc == null) {
- throw new SketchesArgumentException("Possible Corruption: Illegal CornerCase ID: " + id);
+ throw new SketchesArgumentException("Possible Corruption: Illegal CornerCase ID: " + Integer.toOctalString(id));
}
return cc;
}
- } //end of enum
+ } //end of enum CornerCase
public static int createCornerCaseId(
final long thetaLongA, final int countA, final boolean emptyA,
final long thetaLongB, final int countB, final boolean emptyB) {
- return ((thetaLongA < MAX) ? 0 : 1 << 5)
- | ((countA == 0) ? 0 : 1 << 4)
- | (!emptyA ? 0 : 1 << 3)
- | ((thetaLongB < MAX) ? 0 : 1 << 2)
- | ((countB == 0) ? 0 : 1 << 1)
- | (!emptyB ? 0 : 1);
+ return (sketchStateId(emptyA, countA, thetaLongA) << 3) | sketchStateId(emptyB, countB, thetaLongB);
}
+ public static int sketchStateId(final boolean isEmpty, final int numRetained, final long theta) {
+ // assume theta = MAX if empty
+ return (((theta == MAX) || isEmpty) ? 4 : 0) | ((numRetained > 0) ? 2 : 0) | (isEmpty ? 1 : 0);
+ }
}
diff --git a/src/main/java/org/apache/datasketches/theta/DirectQuickSelectSketchR.java b/src/main/java/org/apache/datasketches/theta/DirectQuickSelectSketchR.java
index 1958b90..7e99cd4 100644
--- a/src/main/java/org/apache/datasketches/theta/DirectQuickSelectSketchR.java
+++ b/src/main/java/org/apache/datasketches/theta/DirectQuickSelectSketchR.java
@@ -139,7 +139,7 @@
@Override
public long getThetaLong() {
- return wmem_.getLong(THETA_LONG);
+ return isEmpty() ? Long.MAX_VALUE : wmem_.getLong(THETA_LONG);
}
@Override
diff --git a/src/main/java/org/apache/datasketches/theta/HeapQuickSelectSketch.java b/src/main/java/org/apache/datasketches/theta/HeapQuickSelectSketch.java
index e5b7373..0333bf5 100644
--- a/src/main/java/org/apache/datasketches/theta/HeapQuickSelectSketch.java
+++ b/src/main/java/org/apache/datasketches/theta/HeapQuickSelectSketch.java
@@ -159,7 +159,7 @@
@Override
public long getThetaLong() {
- return thetaLong_;
+ return empty_ ? Long.MAX_VALUE : thetaLong_;
}
@Override
diff --git a/src/main/java/org/apache/datasketches/tuple/AnotB.java b/src/main/java/org/apache/datasketches/tuple/AnotB.java
index d570665..5d9702e 100644
--- a/src/main/java/org/apache/datasketches/tuple/AnotB.java
+++ b/src/main/java/org/apache/datasketches/tuple/AnotB.java
@@ -156,17 +156,17 @@
final AnotbResult anotbResult = cCase.getAnotbResult();
switch (anotbResult) {
- case NEW_1_0_T: {
+ case EMPTY_1_0_T: {
reset();
break;
}
- case RESULTDEGEN_MIN_0_F: {
+ case DEGEN_MIN_0_F: {
reset();
thetaLong_ = min(thetaLong_, thetaLongB);
empty_ = false;
break;
}
- case RESULTDEGEN_THA_0_F: {
+ case DEGEN_THA_0_F: {
empty_ = false;
curCount_ = 0;
//thetaLong_ is ok
@@ -229,17 +229,17 @@
final AnotbResult anotbResult = cCase.getAnotbResult();
switch (anotbResult) {
- case NEW_1_0_T: {
+ case EMPTY_1_0_T: {
reset();
break;
}
- case RESULTDEGEN_MIN_0_F: {
+ case DEGEN_MIN_0_F: {
reset();
thetaLong_ = min(thetaLong_, thetaLongB);
empty_ = false;
break;
}
- case RESULTDEGEN_THA_0_F: {
+ case DEGEN_THA_0_F: {
empty_ = false;
curCount_ = 0;
//thetaLong_ is ok
@@ -335,16 +335,16 @@
CompactSketch<S> result = null;
switch (anotbResult) {
- case NEW_1_0_T: {
+ case EMPTY_1_0_T: {
result = new CompactSketch<>(null, null, Long.MAX_VALUE, true);
break;
}
- case RESULTDEGEN_MIN_0_F: {
+ case DEGEN_MIN_0_F: {
final long thetaLong = min(thetaLongA, thetaLongB);
result = new CompactSketch<>(null, null, thetaLong, false);
break;
}
- case RESULTDEGEN_THA_0_F: {
+ case DEGEN_THA_0_F: {
result = new CompactSketch<>(null, null, thetaLongA, false);
break;
}
@@ -427,16 +427,16 @@
CompactSketch<S> result = null;
switch (anotbResult) {
- case NEW_1_0_T: {
+ case EMPTY_1_0_T: {
result = new CompactSketch<>(null, null, Long.MAX_VALUE, true);
break;
}
- case RESULTDEGEN_MIN_0_F: {
+ case DEGEN_MIN_0_F: {
final long thetaLong = min(thetaLongA, thetaLongB);
result = new CompactSketch<>(null, null, thetaLong, false);
break;
}
- case RESULTDEGEN_THA_0_F: {
+ case DEGEN_THA_0_F: {
result = new CompactSketch<>(null, null, thetaLongA, false);
break;
}
diff --git a/src/main/java/org/apache/datasketches/tuple/Sketch.java b/src/main/java/org/apache/datasketches/tuple/Sketch.java
index e7d767e..ef11a0f 100644
--- a/src/main/java/org/apache/datasketches/tuple/Sketch.java
+++ b/src/main/java/org/apache/datasketches/tuple/Sketch.java
@@ -162,7 +162,7 @@
* @return the value of theta as a double
*/
public double getTheta() {
- return thetaLong_ / (double) Long.MAX_VALUE;
+ return getThetaLong() / (double) Long.MAX_VALUE;
}
/**
@@ -186,7 +186,7 @@
* @return Theta as a long
*/
public long getThetaLong() {
- return thetaLong_;
+ return isEmpty() ? Long.MAX_VALUE : thetaLong_;
}
@Override
diff --git a/src/main/java/org/apache/datasketches/tuple/arrayofdoubles/ArrayOfDoublesSketch.java b/src/main/java/org/apache/datasketches/tuple/arrayofdoubles/ArrayOfDoublesSketch.java
index 2c0e3b2..a127153 100644
--- a/src/main/java/org/apache/datasketches/tuple/arrayofdoubles/ArrayOfDoublesSketch.java
+++ b/src/main/java/org/apache/datasketches/tuple/arrayofdoubles/ArrayOfDoublesSketch.java
@@ -179,7 +179,7 @@
* @return the value of theta as a double
*/
public double getTheta() {
- return theta_ / (double) Long.MAX_VALUE;
+ return getThetaLong() / (double) Long.MAX_VALUE;
}
/**
@@ -201,7 +201,7 @@
* @return the value of theta as a long
*/
long getThetaLong() {
- return theta_;
+ return isEmpty() ? Long.MAX_VALUE : theta_;
}
abstract short getSeedHash();
diff --git a/src/test/java/org/apache/datasketches/theta/CornerCaseThetaSetOperationsTest.java b/src/test/java/org/apache/datasketches/theta/CornerCaseThetaSetOperationsTest.java
index 96018af..eef015f 100644
--- a/src/test/java/org/apache/datasketches/theta/CornerCaseThetaSetOperationsTest.java
+++ b/src/test/java/org/apache/datasketches/theta/CornerCaseThetaSetOperationsTest.java
@@ -39,21 +39,18 @@
private static final long GT_MIDP_V = 3L;
private static final float MIDP = 0.5f;
- private static final long LT_MIDP_V = 2L;
private static final long GT_LOWP_V = 6L;
private static final float LOWP = 0.1f;
private static final long LT_LOWP_V = 4L;
- private static final double MIDP_THETA = MIDP;
private static final double LOWP_THETA = LOWP;
private enum SkType {
- NEW, //{ 1.0, 0, T} Bin: 101 Oct: 05
- EXACT, //{ 1.0, >0, F} Bin: 110 Oct: 06, specify only value
- ESTIMATION, //{<1.0, >0, F} Bin: 010 Oct: 02, specify only value
- NEW_DEGEN, //{<1.0, 0, T} Bin: 001 Oct: 01, specify only p
- RESULT_DEGEN //{<1.0, 0, F} Bin: 000 Oct: 0, specify p, value
+ EMPTY, // { 1.0, 0, T} Bin: 101 Oct: 05
+ EXACT, // { 1.0, >0, F} Bin: 110 Oct: 06, specify only value
+ ESTIMATION, // {<1.0, >0, F} Bin: 010 Oct: 02, specify only value
+ DEGENERATE // {<1.0, 0, F} Bin: 000 Oct: 0, specify p, value
}
//NOTE: 0 values in getSketch are not used.
@@ -69,7 +66,6 @@
boolean resultAnotbEmpty) {
CompactSketch csk;
- //Intersection
Intersection inter = SetOperation.builder().buildIntersection();
csk = inter.intersect(thetaA, thetaB);
@@ -77,7 +73,6 @@
csk = inter.intersect(thetaA.compact(), thetaB.compact());
checkResult("Intersect Stateless Theta, Theta", csk, resultInterTheta, resultInterCount, resultInterEmpty);
- //AnotB
AnotB anotb = SetOperation.builder().buildANotB();
csk = anotb.aNotB(thetaA, thetaB);
@@ -98,9 +93,9 @@
@Test
- public void newNew() {
- UpdateSketch thetaA = getSketch(SkType.NEW, 0, 0);
- UpdateSketch thetaB = getSketch(SkType.NEW, 0, 0);
+ public void emptyEmpty() {
+ UpdateSketch thetaA = getSketch(SkType.EMPTY, 0, 0);
+ UpdateSketch thetaB = getSketch(SkType.EMPTY, 0, 0);
final double resultInterTheta = 1.0;
final int resultInterCount = 0;
final boolean resultInterEmpty = true;
@@ -113,9 +108,9 @@
}
@Test
- public void newExact() {
- UpdateSketch thetaA = getSketch(SkType.NEW, 0, 0);
- UpdateSketch thetaB = getSketch(SkType.EXACT, 0, GT_MIDP_V);
+ public void emptyExact() {
+ UpdateSketch thetaA = getSketch(SkType.EMPTY, 0, 0);
+ UpdateSketch thetaB = getSketch(SkType.EXACT, 0, GT_MIDP_V);
final double resultInterTheta = 1.0;
final int resultInterCount = 0;
final boolean resultInterEmpty = true;
@@ -128,9 +123,9 @@
}
@Test
- public void newNewDegen() {
- UpdateSketch thetaA = getSketch(SkType.NEW, 0, 0);
- UpdateSketch thetaB = getSketch(SkType.NEW_DEGEN, LOWP, 0);
+ public void emptyDegenerate() {
+ UpdateSketch thetaA = getSketch(SkType.EMPTY, 0, 0);
+ UpdateSketch thetaB = getSketch(SkType.DEGENERATE, LOWP, GT_LOWP_V);
final double resultInterTheta = 1.0;
final int resultInterCount = 0;
final boolean resultInterEmpty = true;
@@ -143,23 +138,8 @@
}
@Test
- public void newResultDegen() {
- UpdateSketch thetaA = getSketch(SkType.NEW, 0, 0);
- UpdateSketch thetaB = getSketch(SkType.RESULT_DEGEN, LOWP, GT_LOWP_V);
- final double resultInterTheta = 1.0;
- final int resultInterCount = 0;
- final boolean resultInterEmpty = true;
- final double resultAnotbTheta = 1.0;
- final int resultAnotbCount = 0;
- final boolean resultAnotbEmpty = true;
-
- checks(thetaA, thetaB, resultInterTheta, resultInterCount, resultInterEmpty,
- resultAnotbTheta, resultAnotbCount, resultAnotbEmpty);
- }
-
- @Test
- public void newNewEstimation() {
- UpdateSketch thetaA = getSketch(SkType.NEW, 0, 0);
+ public void EmptyEstimation() {
+ UpdateSketch thetaA = getSketch(SkType.EMPTY, 0, 0);
UpdateSketch thetaB = getSketch(SkType.ESTIMATION, LOWP, LT_LOWP_V);
final double resultInterTheta = 1.0;
final int resultInterCount = 0;
@@ -175,9 +155,9 @@
/*********************/
@Test
- public void exactNew() {
- UpdateSketch thetaA = getSketch(SkType.EXACT, 0, GT_MIDP_V);
- UpdateSketch thetaB = getSketch(SkType.NEW, 0, 0);
+ public void exactEmpty() {
+ UpdateSketch thetaA = getSketch(SkType.EXACT, 0, GT_MIDP_V);
+ UpdateSketch thetaB = getSketch(SkType.EMPTY, 0, 0);
final double resultInterTheta = 1.0;
final int resultInterCount = 0;
final boolean resultInterEmpty = true;
@@ -191,8 +171,8 @@
@Test
public void exactExact() {
- UpdateSketch thetaA = getSketch(SkType.EXACT, 0, GT_MIDP_V);
- UpdateSketch thetaB = getSketch(SkType.EXACT, 0, GT_MIDP_V);
+ UpdateSketch thetaA = getSketch(SkType.EXACT, 0, GT_MIDP_V);
+ UpdateSketch thetaB = getSketch(SkType.EXACT, 0, GT_MIDP_V);
final double resultInterTheta = 1.0;
final int resultInterCount = 1;
final boolean resultInterEmpty = false;
@@ -205,24 +185,9 @@
}
@Test
- public void exactNewDegen() {
- UpdateSketch thetaA = getSketch(SkType.EXACT, 0, LT_LOWP_V);
- UpdateSketch thetaB = getSketch(SkType.NEW_DEGEN, LOWP, 0);
- final double resultInterTheta = 1.0;
- final int resultInterCount = 0;
- final boolean resultInterEmpty = true;
- final double resultAnotbTheta = 1.0;
- final int resultAnotbCount = 1;
- final boolean resultAnotbEmpty = false;
-
- checks(thetaA, thetaB, resultInterTheta, resultInterCount, resultInterEmpty,
- resultAnotbTheta, resultAnotbCount, resultAnotbEmpty);
- }
-
- @Test
- public void exactResultDegen() {
- UpdateSketch thetaA = getSketch(SkType.EXACT, 0, LT_LOWP_V);
- UpdateSketch thetaB = getSketch(SkType.RESULT_DEGEN, LOWP, GT_LOWP_V); //entries = 0
+ public void exactDegenerate() {
+ UpdateSketch thetaA = getSketch(SkType.EXACT, 0, LT_LOWP_V);
+ UpdateSketch thetaB = getSketch(SkType.DEGENERATE, LOWP, GT_LOWP_V); //entries = 0
final double resultInterTheta = LOWP_THETA;
final int resultInterCount = 0;
final boolean resultInterEmpty = false;
@@ -236,7 +201,7 @@
@Test
public void exactEstimation() {
- UpdateSketch thetaA = getSketch(SkType.EXACT, 0, LT_LOWP_V);
+ UpdateSketch thetaA = getSketch(SkType.EXACT, 0, LT_LOWP_V);
UpdateSketch thetaB = getSketch(SkType.ESTIMATION, LOWP, LT_LOWP_V);
final double resultInterTheta = LOWP_THETA;
final int resultInterCount = 1;
@@ -252,9 +217,9 @@
/*********************/
@Test
- public void estimationNew() {
+ public void estimationEmpty() {
UpdateSketch thetaA = getSketch(SkType.ESTIMATION, LOWP, LT_LOWP_V);
- UpdateSketch thetaB = getSketch(SkType.NEW, 0, 0);
+ UpdateSketch thetaB = getSketch(SkType.EMPTY, 0, 0);
final double resultInterTheta = 1.0;
final int resultInterCount = 0;
final boolean resultInterEmpty = true;
@@ -269,7 +234,7 @@
@Test
public void estimationExact() {
UpdateSketch thetaA = getSketch(SkType.ESTIMATION, LOWP, LT_LOWP_V);
- UpdateSketch thetaB = getSketch(SkType.EXACT, 0, LT_LOWP_V);
+ UpdateSketch thetaB = getSketch(SkType.EXACT, 0, LT_LOWP_V);
final double resultInterTheta = LOWP_THETA;
final int resultInterCount = 1;
final boolean resultInterEmpty = false;
@@ -282,24 +247,9 @@
}
@Test
- public void estimationNewDegen() {
- UpdateSketch thetaA = getSketch(SkType.ESTIMATION, MIDP, LT_MIDP_V);
- UpdateSketch thetaB = getSketch(SkType.NEW_DEGEN, LOWP, 0);
- final double resultInterTheta = 1.0;
- final int resultInterCount = 0;
- final boolean resultInterEmpty = true;
- final double resultAnotbTheta = MIDP_THETA;
- final int resultAnotbCount = 1;
- final boolean resultAnotbEmpty = false;
-
- checks(thetaA, thetaB, resultInterTheta, resultInterCount, resultInterEmpty,
- resultAnotbTheta, resultAnotbCount, resultAnotbEmpty);
- }
-
- @Test
- public void estimationResultDegen() {
- UpdateSketch thetaA = getSketch(SkType.ESTIMATION, MIDP, LT_LOWP_V);
- UpdateSketch thetaB = getSketch(SkType.RESULT_DEGEN, LOWP, GT_LOWP_V);
+ public void estimationDegenerate() {
+ UpdateSketch thetaA = getSketch(SkType.ESTIMATION, MIDP, LT_LOWP_V);
+ UpdateSketch thetaB = getSketch(SkType.DEGENERATE, LOWP, GT_LOWP_V);
final double resultInterTheta = LOWP_THETA;
final int resultInterCount = 0;
final boolean resultInterEmpty = false;
@@ -313,8 +263,8 @@
@Test
public void estimationEstimation() {
- UpdateSketch thetaA = getSketch(SkType.ESTIMATION, MIDP, LT_LOWP_V);
- UpdateSketch thetaB = getSketch(SkType.ESTIMATION, LOWP, LT_LOWP_V);
+ UpdateSketch thetaA = getSketch(SkType.ESTIMATION, MIDP, LT_LOWP_V);
+ UpdateSketch thetaB = getSketch(SkType.ESTIMATION, LOWP, LT_LOWP_V);
final double resultInterTheta = LOWP_THETA;
final int resultInterCount = 1;
final boolean resultInterEmpty = false;
@@ -329,146 +279,54 @@
/*********************/
@Test
- public void newDegenNew() {
- UpdateSketch thetaA = getSketch(SkType.NEW_DEGEN, LOWP, 0);
- UpdateSketch thetaB = getSketch(SkType.NEW, 0, 0);
+ public void DegenerateEmpty() {
+ UpdateSketch thetaA = getSketch(SkType.DEGENERATE, LOWP, GT_LOWP_V); //entries = 0
+ UpdateSketch thetaB = getSketch(SkType.EMPTY, 0, 0);
final double resultInterTheta = 1.0;
final int resultInterCount = 0;
final boolean resultInterEmpty = true;
- final double resultAnotbTheta = 1.0;
+ final double resultAnotbTheta = LOWP_THETA;
final int resultAnotbCount = 0;
- final boolean resultAnotbEmpty = true;
+ final boolean resultAnotbEmpty = false;
checks(thetaA, thetaB, resultInterTheta, resultInterCount, resultInterEmpty,
resultAnotbTheta, resultAnotbCount, resultAnotbEmpty);
}
@Test
- public void newDegenExact() {
- UpdateSketch thetaA = getSketch(SkType.NEW_DEGEN, LOWP,0);
- UpdateSketch thetaB = getSketch(SkType.EXACT, 0, LT_LOWP_V);
- final double resultInterTheta = 1.0;
+ public void DegenerateExact() {
+ UpdateSketch thetaA = getSketch(SkType.DEGENERATE, LOWP, GT_LOWP_V); //entries = 0
+ UpdateSketch thetaB = getSketch(SkType.EXACT, 0, LT_LOWP_V);
+ final double resultInterTheta = LOWP_THETA;
final int resultInterCount = 0;
- final boolean resultInterEmpty = true;
- final double resultAnotbTheta = 1.0;
+ final boolean resultInterEmpty = false;
+ final double resultAnotbTheta = LOWP_THETA;
final int resultAnotbCount = 0;
- final boolean resultAnotbEmpty = true;
+ final boolean resultAnotbEmpty = false;
checks(thetaA, thetaB, resultInterTheta, resultInterCount, resultInterEmpty,
resultAnotbTheta, resultAnotbCount, resultAnotbEmpty);
}
@Test
- public void newDegenNewDegen() {
- UpdateSketch thetaA = getSketch(SkType.NEW_DEGEN, MIDP, 0);
- UpdateSketch thetaB = getSketch(SkType.NEW_DEGEN, LOWP, 0);
- final double resultInterTheta = 1.0;
+ public void DegenerateDegenerate() {
+ UpdateSketch thetaA = getSketch(SkType.DEGENERATE, MIDP, GT_MIDP_V); //entries = 0
+ UpdateSketch thetaB = getSketch(SkType.DEGENERATE, LOWP, GT_LOWP_V);
+ final double resultInterTheta = LOWP_THETA;
final int resultInterCount = 0;
- final boolean resultInterEmpty = true;
- final double resultAnotbTheta = 1.0;
+ final boolean resultInterEmpty = false;
+ final double resultAnotbTheta = LOWP_THETA;
final int resultAnotbCount = 0;
- final boolean resultAnotbEmpty = true;
+ final boolean resultAnotbEmpty = false;
checks(thetaA, thetaB, resultInterTheta, resultInterCount, resultInterEmpty,
resultAnotbTheta, resultAnotbCount, resultAnotbEmpty);
}
@Test
- public void newDegenResultDegen() {
- UpdateSketch thetaA = getSketch(SkType.NEW_DEGEN, MIDP, 0);
- UpdateSketch thetaB = getSketch(SkType.RESULT_DEGEN, LOWP, GT_LOWP_V);
- final double resultInterTheta = 1.0;
- final int resultInterCount = 0;
- final boolean resultInterEmpty = true;
- final double resultAnotbTheta = 1.0;
- final int resultAnotbCount = 0;
- final boolean resultAnotbEmpty = true;
-
- checks(thetaA, thetaB, resultInterTheta, resultInterCount, resultInterEmpty,
- resultAnotbTheta, resultAnotbCount, resultAnotbEmpty);
- }
-
- @Test
- public void newDegenEstimation() {
- UpdateSketch thetaA = getSketch(SkType.NEW_DEGEN, MIDP, 0);
+ public void DegenerateEstimation() {
+ UpdateSketch thetaA = getSketch(SkType.DEGENERATE, MIDP, GT_MIDP_V); //entries = 0
UpdateSketch thetaB = getSketch(SkType.ESTIMATION, LOWP, LT_LOWP_V);
- final double resultInterTheta = 1.0;
- final int resultInterCount = 0;
- final boolean resultInterEmpty = true;
- final double resultAnotbTheta = 1.0;
- final int resultAnotbCount = 0;
- final boolean resultAnotbEmpty = true;
-
- checks(thetaA, thetaB, resultInterTheta, resultInterCount, resultInterEmpty,
- resultAnotbTheta, resultAnotbCount, resultAnotbEmpty);
- }
-
- /*********************/
-
- @Test
- public void resultDegenNew() {
- UpdateSketch thetaA = getSketch(SkType.RESULT_DEGEN, LOWP, GT_LOWP_V); //entries = 0
- UpdateSketch thetaB = getSketch(SkType.NEW, 0, 0);
- final double resultInterTheta = 1.0;
- final int resultInterCount = 0;
- final boolean resultInterEmpty = true;
- final double resultAnotbTheta = LOWP_THETA;
- final int resultAnotbCount = 0;
- final boolean resultAnotbEmpty = false;
-
- checks(thetaA, thetaB, resultInterTheta, resultInterCount, resultInterEmpty,
- resultAnotbTheta, resultAnotbCount, resultAnotbEmpty);
- }
-
- @Test
- public void resultDegenExact() {
- UpdateSketch thetaA = getSketch(SkType.RESULT_DEGEN, LOWP, GT_LOWP_V); //entries = 0
- UpdateSketch thetaB = getSketch(SkType.EXACT, 0, LT_LOWP_V);
- final double resultInterTheta = LOWP_THETA;
- final int resultInterCount = 0;
- final boolean resultInterEmpty = false;
- final double resultAnotbTheta = LOWP_THETA;
- final int resultAnotbCount = 0;
- final boolean resultAnotbEmpty = false;
-
- checks(thetaA, thetaB, resultInterTheta, resultInterCount, resultInterEmpty,
- resultAnotbTheta, resultAnotbCount, resultAnotbEmpty);
- }
-
- @Test
- public void resultDegenNewDegen() {
- UpdateSketch thetaA = getSketch(SkType.RESULT_DEGEN, MIDP, GT_MIDP_V); //entries = 0
- UpdateSketch thetaB = getSketch(SkType.NEW_DEGEN, LOWP, 0);
- final double resultInterTheta = 1.0;
- final int resultInterCount = 0;
- final boolean resultInterEmpty = true;
- final double resultAnotbTheta = MIDP_THETA;
- final int resultAnotbCount = 0;
- final boolean resultAnotbEmpty = false;
-
- checks(thetaA, thetaB, resultInterTheta, resultInterCount, resultInterEmpty,
- resultAnotbTheta, resultAnotbCount, resultAnotbEmpty);
- }
-
- @Test
- public void resultDegenResultDegen() {
- UpdateSketch thetaA = getSketch(SkType.RESULT_DEGEN, MIDP, GT_MIDP_V); //entries = 0
- UpdateSketch thetaB = getSketch(SkType.RESULT_DEGEN, LOWP, GT_LOWP_V);
- final double resultInterTheta = LOWP_THETA;
- final int resultInterCount = 0;
- final boolean resultInterEmpty = false;
- final double resultAnotbTheta = LOWP_THETA;
- final int resultAnotbCount = 0;
- final boolean resultAnotbEmpty = false;
-
- checks(thetaA, thetaB, resultInterTheta, resultInterCount, resultInterEmpty,
- resultAnotbTheta, resultAnotbCount, resultAnotbEmpty);
- }
-
- @Test
- public void resultDegenEstimation() {
- UpdateSketch thetaA = getSketch(SkType.RESULT_DEGEN, MIDP, GT_MIDP_V); //entries = 0
- UpdateSketch thetaB = getSketch(SkType.ESTIMATION, LOWP, LT_LOWP_V);
final double resultInterTheta = LOWP_THETA;
final int resultInterCount = 0;
final boolean resultInterEmpty = false;
@@ -505,34 +363,29 @@
bldr.setLogNominalEntries(4);
UpdateSketch sk;
switch(skType) {
- case NEW: { //{ 1.0, 0, T} Bin: 101 Oct: 05
+ case EMPTY: { // { 1.0, 0, T}
sk = bldr.build();
break;
}
- case EXACT: { //{ 1.0, >0, F} Bin: 111 Oct: 07
+ case EXACT: { // { 1.0, >0, F}
sk = bldr.build();
sk.update(value);
break;
}
- case ESTIMATION: { //{<1.0, >0, F} Bin: 010 Oct: 02
+ case ESTIMATION: { // {<1.0, >0, F}
bldr.setP(p);
sk = bldr.build();
sk.update(value);
break;
}
- case NEW_DEGEN: { //{<1.0, 0, T} Bin: 001 Oct: 01
- bldr.setP(p);
- sk = bldr.build();
- break;
- }
- case RESULT_DEGEN: { //{<1.0, 0, F} Bin: 000 Oct: 0
+ case DEGENERATE: { // {<1.0, 0, F}
bldr.setP(p);
sk = bldr.build();
sk.update(value);
break;
}
- default: { return null; } //should not happen
+ default: { return null; } // should not happen
}
return sk;
}
diff --git a/src/test/java/org/apache/datasketches/tuple/adouble/AdoubleTest.java b/src/test/java/org/apache/datasketches/tuple/adouble/AdoubleTest.java
index 87396d9..21bc7a3 100644
--- a/src/test/java/org/apache/datasketches/tuple/adouble/AdoubleTest.java
+++ b/src/test/java/org/apache/datasketches/tuple/adouble/AdoubleTest.java
@@ -104,8 +104,8 @@
Assert.assertEquals(sketch.getEstimate(), 0.0);
Assert.assertEquals(sketch.getUpperBound(1), 0.0);
Assert.assertEquals(sketch.getLowerBound(1), 0.0);
- Assert.assertEquals((float)sketch.getTheta(), samplingProbability);
- Assert.assertEquals((float)sketch.getTheta(), samplingProbability);
+ Assert.assertEquals(sketch.getThetaLong(), Long.MAX_VALUE);
+ Assert.assertEquals(sketch.getTheta(), 1.0);
}
@Test
diff --git a/src/test/java/org/apache/datasketches/tuple/aninteger/CornerCaseTupleSetOperationsTest.java b/src/test/java/org/apache/datasketches/tuple/aninteger/CornerCaseTupleSetOperationsTest.java
index 9ca0181..7d518b0 100644
--- a/src/test/java/org/apache/datasketches/tuple/aninteger/CornerCaseTupleSetOperationsTest.java
+++ b/src/test/java/org/apache/datasketches/tuple/aninteger/CornerCaseTupleSetOperationsTest.java
@@ -45,13 +45,11 @@
private static final long GT_MIDP_V = 3L;
private static final float MIDP = 0.5f;
- private static final long LT_MIDP_V = 2L;
private static final long GT_LOWP_V = 6L;
private static final float LOWP = 0.1f;
private static final long LT_LOWP_V = 4L;
- private static final double MIDP_THETA = MIDP;
private static final double LOWP_THETA = LOWP;
private IntegerSummary.Mode mode = IntegerSummary.Mode.Min;
@@ -59,11 +57,10 @@
private IntegerSummarySetOperations setOperations = new IntegerSummarySetOperations(mode, mode);
private enum SkType {
- NEW, //{ 1.0, 0, T} Bin: 101 Oct: 05
- EXACT, //{ 1.0, >0, F} Bin: 110 Oct: 06, specify only value
- ESTIMATION, //{<1.0, >0, F} Bin: 010 Oct: 02, specify only value
- NEW_DEGEN, //{<1.0, 0, T} Bin: 001 Oct: 01, specify only p
- RESULT_DEGEN //{<1.0, 0, F} Bin: 000 Oct: 0, specify p, value
+ EMPTY, // { 1.0, 0, T} Bin: 101 Oct: 05
+ EXACT, // { 1.0, >0, F} Bin: 110 Oct: 06, specify only value
+ ESTIMATION, // {<1.0, >0, F} Bin: 010 Oct: 02, specify only value
+ DEGENERATE // {<1.0, 0, F} Bin: 000 Oct: 0, specify p, value
}
//NOTE: 0 values in getTupleSketch or getThetaSketch are not used.
@@ -80,7 +77,6 @@
boolean resultAnotbEmpty) {
CompactSketch<IntegerSummary> csk;
- //Intersection
Intersection<IntegerSummary> inter = new Intersection<>(setOperations);
csk = inter.intersect(tupleA, tupleB);
@@ -93,8 +89,6 @@
csk = inter.intersect(tupleA.compact(), thetaB.compact(), intSum);
checkResult("Intersect Stateless Tuple, Theta", csk, resultInterTheta, resultInterCount, resultInterEmpty);
-
- //AnotB
csk = AnotB.aNotB(tupleA, tupleB);
checkResult("AnotB Stateless Tuple, Tuple", csk, resultAnotbTheta, resultAnotbCount, resultAnotbEmpty);
csk = AnotB.aNotB(tupleA.compact(), tupleB.compact());
@@ -129,10 +123,10 @@
@Test
- public void newNew() {
- IntegerSketch tupleA = getTupleSketch(SkType.NEW, 0, 0);
- IntegerSketch tupleB = getTupleSketch(SkType.NEW, 0, 0);
- UpdateSketch thetaB = getThetaSketch(SkType.NEW, 0, 0);
+ public void emptyEmpty() {
+ IntegerSketch tupleA = getTupleSketch(SkType.EMPTY, 0, 0);
+ IntegerSketch tupleB = getTupleSketch(SkType.EMPTY, 0, 0);
+ UpdateSketch thetaB = getThetaSketch(SkType.EMPTY, 0, 0);
final double resultInterTheta = 1.0;
final int resultInterCount = 0;
final boolean resultInterEmpty = true;
@@ -145,10 +139,10 @@
}
@Test
- public void newExact() {
- IntegerSketch tupleA = getTupleSketch(SkType.NEW, 0, 0);
- IntegerSketch tupleB = getTupleSketch(SkType.EXACT, 0, GT_MIDP_V);
- UpdateSketch thetaB = getThetaSketch(SkType.EXACT, 0, GT_MIDP_V);
+ public void emptyExact() {
+ IntegerSketch tupleA = getTupleSketch(SkType.EMPTY, 0, 0);
+ IntegerSketch tupleB = getTupleSketch(SkType.EXACT, 0, GT_MIDP_V);
+ UpdateSketch thetaB = getThetaSketch(SkType.EXACT, 0, GT_MIDP_V);
final double resultInterTheta = 1.0;
final int resultInterCount = 0;
final boolean resultInterEmpty = true;
@@ -161,10 +155,10 @@
}
@Test
- public void newNewDegen() {
- IntegerSketch tupleA = getTupleSketch(SkType.NEW, 0, 0);
- IntegerSketch tupleB = getTupleSketch(SkType.NEW_DEGEN, LOWP, 0);
- UpdateSketch thetaB = getThetaSketch(SkType.NEW_DEGEN, LOWP, 0);
+ public void EmptyDegenerate() {
+ IntegerSketch tupleA = getTupleSketch(SkType.EMPTY, 0, 0);
+ IntegerSketch tupleB = getTupleSketch(SkType.DEGENERATE, LOWP, GT_LOWP_V);
+ UpdateSketch thetaB = getThetaSketch(SkType.DEGENERATE, LOWP, GT_LOWP_V);
final double resultInterTheta = 1.0;
final int resultInterCount = 0;
final boolean resultInterEmpty = true;
@@ -177,24 +171,8 @@
}
@Test
- public void newResultDegen() {
- IntegerSketch tupleA = getTupleSketch(SkType.NEW, 0, 0);
- IntegerSketch tupleB = getTupleSketch(SkType.RESULT_DEGEN, LOWP, GT_LOWP_V);
- UpdateSketch thetaB = getThetaSketch(SkType.RESULT_DEGEN, LOWP, GT_LOWP_V);
- final double resultInterTheta = 1.0;
- final int resultInterCount = 0;
- final boolean resultInterEmpty = true;
- final double resultAnotbTheta = 1.0;
- final int resultAnotbCount = 0;
- final boolean resultAnotbEmpty = true;
-
- checks(tupleA, tupleB, thetaB, resultInterTheta, resultInterCount, resultInterEmpty,
- resultAnotbTheta, resultAnotbCount, resultAnotbEmpty);
- }
-
- @Test
- public void newNewEstimation() {
- IntegerSketch tupleA = getTupleSketch(SkType.NEW, 0, 0);
+ public void emptyEstimation() {
+ IntegerSketch tupleA = getTupleSketch(SkType.EMPTY, 0, 0);
IntegerSketch tupleB = getTupleSketch(SkType.ESTIMATION, LOWP, LT_LOWP_V);
UpdateSketch thetaB = getThetaSketch(SkType.ESTIMATION, LOWP, LT_LOWP_V);
final double resultInterTheta = 1.0;
@@ -211,10 +189,10 @@
/*********************/
@Test
- public void exactNew() {
- IntegerSketch tupleA = getTupleSketch(SkType.EXACT, 0, GT_MIDP_V);
- IntegerSketch tupleB = getTupleSketch(SkType.NEW, 0, 0);
- UpdateSketch thetaB = getThetaSketch(SkType.NEW, 0, 0);
+ public void exactEmpty() {
+ IntegerSketch tupleA = getTupleSketch(SkType.EXACT, 0, GT_MIDP_V);
+ IntegerSketch tupleB = getTupleSketch(SkType.EMPTY, 0, 0);
+ UpdateSketch thetaB = getThetaSketch(SkType.EMPTY, 0, 0);
final double resultInterTheta = 1.0;
final int resultInterCount = 0;
final boolean resultInterEmpty = true;
@@ -228,9 +206,9 @@
@Test
public void exactExact() {
- IntegerSketch tupleA = getTupleSketch(SkType.EXACT, 0, GT_MIDP_V);
- IntegerSketch tupleB = getTupleSketch(SkType.EXACT, 0, GT_MIDP_V);
- UpdateSketch thetaB = getThetaSketch(SkType.EXACT, 0, GT_MIDP_V);
+ IntegerSketch tupleA = getTupleSketch(SkType.EXACT, 0, GT_MIDP_V);
+ IntegerSketch tupleB = getTupleSketch(SkType.EXACT, 0, GT_MIDP_V);
+ UpdateSketch thetaB = getThetaSketch(SkType.EXACT, 0, GT_MIDP_V);
final double resultInterTheta = 1.0;
final int resultInterCount = 1;
final boolean resultInterEmpty = false;
@@ -243,26 +221,10 @@
}
@Test
- public void exactNewDegen() {
- IntegerSketch tupleA = getTupleSketch(SkType.EXACT, 0, LT_LOWP_V);
- IntegerSketch tupleB = getTupleSketch(SkType.NEW_DEGEN, LOWP, 0);
- UpdateSketch thetaB = getThetaSketch(SkType.NEW_DEGEN, LOWP, 0);
- final double resultInterTheta = 1.0;
- final int resultInterCount = 0;
- final boolean resultInterEmpty = true;
- final double resultAnotbTheta = 1.0;
- final int resultAnotbCount = 1;
- final boolean resultAnotbEmpty = false;
-
- checks(tupleA, tupleB, thetaB, resultInterTheta, resultInterCount, resultInterEmpty,
- resultAnotbTheta, resultAnotbCount, resultAnotbEmpty);
- }
-
- @Test
- public void exactResultDegen() {
- IntegerSketch tupleA = getTupleSketch(SkType.EXACT, 0, LT_LOWP_V);
- IntegerSketch tupleB = getTupleSketch(SkType.RESULT_DEGEN, LOWP, GT_LOWP_V); //entries = 0
- UpdateSketch thetaB = getThetaSketch(SkType.RESULT_DEGEN, LOWP, GT_LOWP_V);
+ public void exactDegenerate() {
+ IntegerSketch tupleA = getTupleSketch(SkType.EXACT, 0, LT_LOWP_V);
+ IntegerSketch tupleB = getTupleSketch(SkType.DEGENERATE, LOWP, GT_LOWP_V); //entries = 0
+ UpdateSketch thetaB = getThetaSketch(SkType.DEGENERATE, LOWP, GT_LOWP_V);
final double resultInterTheta = LOWP_THETA;
final int resultInterCount = 0;
final boolean resultInterEmpty = false;
@@ -276,7 +238,7 @@
@Test
public void exactEstimation() {
- IntegerSketch tupleA = getTupleSketch(SkType.EXACT, 0, LT_LOWP_V);
+ IntegerSketch tupleA = getTupleSketch(SkType.EXACT, 0, LT_LOWP_V);
IntegerSketch tupleB = getTupleSketch(SkType.ESTIMATION, LOWP, LT_LOWP_V);
UpdateSketch thetaB = getThetaSketch(SkType.ESTIMATION, LOWP, LT_LOWP_V);
final double resultInterTheta = LOWP_THETA;
@@ -293,10 +255,10 @@
/*********************/
@Test
- public void estimationNew() {
+ public void estimationEmpty() {
IntegerSketch tupleA = getTupleSketch(SkType.ESTIMATION, LOWP, LT_LOWP_V);
- IntegerSketch tupleB = getTupleSketch(SkType.NEW, 0, 0);
- UpdateSketch thetaB = getThetaSketch(SkType.NEW, 0, 0);
+ IntegerSketch tupleB = getTupleSketch(SkType.EMPTY, 0, 0);
+ UpdateSketch thetaB = getThetaSketch(SkType.EMPTY, 0, 0);
final double resultInterTheta = 1.0;
final int resultInterCount = 0;
final boolean resultInterEmpty = true;
@@ -311,8 +273,8 @@
@Test
public void estimationExact() {
IntegerSketch tupleA = getTupleSketch(SkType.ESTIMATION, LOWP, LT_LOWP_V);
- IntegerSketch tupleB = getTupleSketch(SkType.EXACT, 0, LT_LOWP_V);
- UpdateSketch thetaB = getThetaSketch(SkType.EXACT, 0, LT_LOWP_V);
+ IntegerSketch tupleB = getTupleSketch(SkType.EXACT, 0, LT_LOWP_V);
+ UpdateSketch thetaB = getThetaSketch(SkType.EXACT, 0, LT_LOWP_V);
final double resultInterTheta = LOWP_THETA;
final int resultInterCount = 1;
final boolean resultInterEmpty = false;
@@ -325,26 +287,10 @@
}
@Test
- public void estimationNewDegen() {
- IntegerSketch tupleA = getTupleSketch(SkType.ESTIMATION, MIDP, LT_MIDP_V);
- IntegerSketch tupleB = getTupleSketch(SkType.NEW_DEGEN, LOWP, 0);
- UpdateSketch thetaB = getThetaSketch(SkType.NEW_DEGEN, LOWP, 0);
- final double resultInterTheta = 1.0;
- final int resultInterCount = 0;
- final boolean resultInterEmpty = true;
- final double resultAnotbTheta = MIDP_THETA;
- final int resultAnotbCount = 1;
- final boolean resultAnotbEmpty = false;
-
- checks(tupleA, tupleB, thetaB, resultInterTheta, resultInterCount, resultInterEmpty,
- resultAnotbTheta, resultAnotbCount, resultAnotbEmpty);
- }
-
- @Test
- public void estimationResultDegen() {
- IntegerSketch tupleA = getTupleSketch(SkType.ESTIMATION, MIDP, LT_LOWP_V);
- IntegerSketch tupleB = getTupleSketch(SkType.RESULT_DEGEN, LOWP, GT_LOWP_V);
- UpdateSketch thetaB = getThetaSketch(SkType.RESULT_DEGEN, LOWP, GT_LOWP_V);
+ public void estimationDegenerate() {
+ IntegerSketch tupleA = getTupleSketch(SkType.ESTIMATION, MIDP, LT_LOWP_V);
+ IntegerSketch tupleB = getTupleSketch(SkType.DEGENERATE, LOWP, GT_LOWP_V);
+ UpdateSketch thetaB = getThetaSketch(SkType.DEGENERATE, LOWP, GT_LOWP_V);
final double resultInterTheta = LOWP_THETA;
final int resultInterCount = 0;
final boolean resultInterEmpty = false;
@@ -358,9 +304,9 @@
@Test
public void estimationEstimation() {
- IntegerSketch tupleA = getTupleSketch(SkType.ESTIMATION, MIDP, LT_LOWP_V);
- IntegerSketch tupleB = getTupleSketch(SkType.ESTIMATION, LOWP, LT_LOWP_V);
- UpdateSketch thetaB = getThetaSketch(SkType.ESTIMATION, LOWP, LT_LOWP_V);
+ IntegerSketch tupleA = getTupleSketch(SkType.ESTIMATION, MIDP, LT_LOWP_V);
+ IntegerSketch tupleB = getTupleSketch(SkType.ESTIMATION, LOWP, LT_LOWP_V);
+ UpdateSketch thetaB = getThetaSketch(SkType.ESTIMATION, LOWP, LT_LOWP_V);
final double resultInterTheta = LOWP_THETA;
final int resultInterCount = 1;
final boolean resultInterEmpty = false;
@@ -375,156 +321,58 @@
/*********************/
@Test
- public void newDegenNew() {
- IntegerSketch tupleA = getTupleSketch(SkType.NEW_DEGEN, LOWP, 0);
- IntegerSketch tupleB = getTupleSketch(SkType.NEW, 0, 0);
- UpdateSketch thetaB = getThetaSketch(SkType.NEW, 0, 0);
+ public void degenerateEmpty() {
+ IntegerSketch tupleA = getTupleSketch(SkType.DEGENERATE, LOWP, GT_LOWP_V); //entries = 0
+ IntegerSketch tupleB = getTupleSketch(SkType.EMPTY, 0, 0);
+ UpdateSketch thetaB = getThetaSketch(SkType.EMPTY, 0, 0);
final double resultInterTheta = 1.0;
final int resultInterCount = 0;
final boolean resultInterEmpty = true;
- final double resultAnotbTheta = 1.0;
+ final double resultAnotbTheta = LOWP_THETA;
final int resultAnotbCount = 0;
- final boolean resultAnotbEmpty = true;
+ final boolean resultAnotbEmpty = false;
checks(tupleA, tupleB, thetaB, resultInterTheta, resultInterCount, resultInterEmpty,
resultAnotbTheta, resultAnotbCount, resultAnotbEmpty);
}
@Test
- public void newDegenExact() {
- IntegerSketch tupleA = getTupleSketch(SkType.NEW_DEGEN, LOWP,0);
- IntegerSketch tupleB = getTupleSketch(SkType.EXACT, 0, LT_LOWP_V);
- UpdateSketch thetaB = getThetaSketch(SkType.EXACT, 0, LT_LOWP_V);
- final double resultInterTheta = 1.0;
+ public void degenerateExact() {
+ IntegerSketch tupleA = getTupleSketch(SkType.DEGENERATE, LOWP, GT_LOWP_V); //entries = 0
+ IntegerSketch tupleB = getTupleSketch(SkType.EXACT, 0, LT_LOWP_V);
+ UpdateSketch thetaB = getThetaSketch(SkType.EXACT, 0, LT_LOWP_V);
+ final double resultInterTheta = LOWP_THETA;
final int resultInterCount = 0;
- final boolean resultInterEmpty = true;
- final double resultAnotbTheta = 1.0;
+ final boolean resultInterEmpty = false;
+ final double resultAnotbTheta = LOWP_THETA;
final int resultAnotbCount = 0;
- final boolean resultAnotbEmpty = true;
+ final boolean resultAnotbEmpty = false;
checks(tupleA, tupleB, thetaB, resultInterTheta, resultInterCount, resultInterEmpty,
resultAnotbTheta, resultAnotbCount, resultAnotbEmpty);
}
@Test
- public void newDegenNewDegen() {
- IntegerSketch tupleA = getTupleSketch(SkType.NEW_DEGEN, MIDP, 0);
- IntegerSketch tupleB = getTupleSketch(SkType.NEW_DEGEN, LOWP, 0);
- UpdateSketch thetaB = getThetaSketch(SkType.NEW_DEGEN, LOWP, 0);
- final double resultInterTheta = 1.0;
+ public void degenerateDegenerate() {
+ IntegerSketch tupleA = getTupleSketch(SkType.DEGENERATE, MIDP, GT_MIDP_V); //entries = 0
+ IntegerSketch tupleB = getTupleSketch(SkType.DEGENERATE, LOWP, GT_LOWP_V);
+ UpdateSketch thetaB = getThetaSketch(SkType.DEGENERATE, LOWP, GT_LOWP_V);
+ final double resultInterTheta = LOWP_THETA;
final int resultInterCount = 0;
- final boolean resultInterEmpty = true;
- final double resultAnotbTheta = 1.0;
+ final boolean resultInterEmpty = false;
+ final double resultAnotbTheta = LOWP_THETA;
final int resultAnotbCount = 0;
- final boolean resultAnotbEmpty = true;
+ final boolean resultAnotbEmpty = false;
checks(tupleA, tupleB, thetaB, resultInterTheta, resultInterCount, resultInterEmpty,
resultAnotbTheta, resultAnotbCount, resultAnotbEmpty);
}
@Test
- public void newDegenResultDegen() {
- IntegerSketch tupleA = getTupleSketch(SkType.NEW_DEGEN, MIDP, 0);
- IntegerSketch tupleB = getTupleSketch(SkType.RESULT_DEGEN, LOWP, GT_LOWP_V);
- UpdateSketch thetaB = getThetaSketch(SkType.RESULT_DEGEN, LOWP, GT_LOWP_V);
- final double resultInterTheta = 1.0;
- final int resultInterCount = 0;
- final boolean resultInterEmpty = true;
- final double resultAnotbTheta = 1.0;
- final int resultAnotbCount = 0;
- final boolean resultAnotbEmpty = true;
-
- checks(tupleA, tupleB, thetaB, resultInterTheta, resultInterCount, resultInterEmpty,
- resultAnotbTheta, resultAnotbCount, resultAnotbEmpty);
- }
-
- @Test
- public void newDegenEstimation() {
- IntegerSketch tupleA = getTupleSketch(SkType.NEW_DEGEN, MIDP, 0);
+ public void degenerateEstimation() {
+ IntegerSketch tupleA = getTupleSketch(SkType.DEGENERATE, MIDP, GT_MIDP_V); //entries = 0
IntegerSketch tupleB = getTupleSketch(SkType.ESTIMATION, LOWP, LT_LOWP_V);
UpdateSketch thetaB = getThetaSketch(SkType.ESTIMATION, LOWP, LT_LOWP_V);
- final double resultInterTheta = 1.0;
- final int resultInterCount = 0;
- final boolean resultInterEmpty = true;
- final double resultAnotbTheta = 1.0;
- final int resultAnotbCount = 0;
- final boolean resultAnotbEmpty = true;
-
- checks(tupleA, tupleB, thetaB, resultInterTheta, resultInterCount, resultInterEmpty,
- resultAnotbTheta, resultAnotbCount, resultAnotbEmpty);
- }
-
- /*********************/
-
- @Test
- public void resultDegenNew() {
- IntegerSketch tupleA = getTupleSketch(SkType.RESULT_DEGEN, LOWP, GT_LOWP_V); //entries = 0
- IntegerSketch tupleB = getTupleSketch(SkType.NEW, 0, 0);
- UpdateSketch thetaB = getThetaSketch(SkType.NEW, 0, 0);
- final double resultInterTheta = 1.0;
- final int resultInterCount = 0;
- final boolean resultInterEmpty = true;
- final double resultAnotbTheta = LOWP_THETA;
- final int resultAnotbCount = 0;
- final boolean resultAnotbEmpty = false;
-
- checks(tupleA, tupleB, thetaB, resultInterTheta, resultInterCount, resultInterEmpty,
- resultAnotbTheta, resultAnotbCount, resultAnotbEmpty);
- }
-
- @Test
- public void resultDegenExact() {
- IntegerSketch tupleA = getTupleSketch(SkType.RESULT_DEGEN, LOWP, GT_LOWP_V); //entries = 0
- IntegerSketch tupleB = getTupleSketch(SkType.EXACT, 0, LT_LOWP_V);
- UpdateSketch thetaB = getThetaSketch(SkType.EXACT, 0, LT_LOWP_V);
- final double resultInterTheta = LOWP_THETA;
- final int resultInterCount = 0;
- final boolean resultInterEmpty = false;
- final double resultAnotbTheta = LOWP_THETA;
- final int resultAnotbCount = 0;
- final boolean resultAnotbEmpty = false;
-
- checks(tupleA, tupleB, thetaB, resultInterTheta, resultInterCount, resultInterEmpty,
- resultAnotbTheta, resultAnotbCount, resultAnotbEmpty);
- }
-
- @Test
- public void resultDegenNewDegen() {
- IntegerSketch tupleA = getTupleSketch(SkType.RESULT_DEGEN, MIDP, GT_MIDP_V); //entries = 0
- IntegerSketch tupleB = getTupleSketch(SkType.NEW_DEGEN, LOWP, 0);
- UpdateSketch thetaB = getThetaSketch(SkType.NEW_DEGEN, LOWP, 0);
- final double resultInterTheta = 1.0;
- final int resultInterCount = 0;
- final boolean resultInterEmpty = true;
- final double resultAnotbTheta = MIDP_THETA;
- final int resultAnotbCount = 0;
- final boolean resultAnotbEmpty = false;
-
- checks(tupleA, tupleB, thetaB, resultInterTheta, resultInterCount, resultInterEmpty,
- resultAnotbTheta, resultAnotbCount, resultAnotbEmpty);
- }
-
- @Test
- public void resultDegenResultDegen() {
- IntegerSketch tupleA = getTupleSketch(SkType.RESULT_DEGEN, MIDP, GT_MIDP_V); //entries = 0
- IntegerSketch tupleB = getTupleSketch(SkType.RESULT_DEGEN, LOWP, GT_LOWP_V);
- UpdateSketch thetaB = getThetaSketch(SkType.RESULT_DEGEN, LOWP, GT_LOWP_V);
- final double resultInterTheta = LOWP_THETA;
- final int resultInterCount = 0;
- final boolean resultInterEmpty = false;
- final double resultAnotbTheta = LOWP_THETA;
- final int resultAnotbCount = 0;
- final boolean resultAnotbEmpty = false;
-
- checks(tupleA, tupleB, thetaB, resultInterTheta, resultInterCount, resultInterEmpty,
- resultAnotbTheta, resultAnotbCount, resultAnotbEmpty);
- }
-
- @Test
- public void resultDegenEstimation() {
- IntegerSketch tupleA = getTupleSketch(SkType.RESULT_DEGEN, MIDP, GT_MIDP_V); //entries = 0
- IntegerSketch tupleB = getTupleSketch(SkType.ESTIMATION, LOWP, LT_LOWP_V);
- UpdateSketch thetaB = getThetaSketch(SkType.ESTIMATION, LOWP, LT_LOWP_V);
final double resultInterTheta = LOWP_THETA;
final int resultInterCount = 0;
final boolean resultInterEmpty = false;
@@ -550,9 +398,9 @@
if (!thetaOk || !entriesOk || !emptyOk) {
StringBuilder sb = new StringBuilder();
sb.append(comment + ": ");
- if (!thetaOk) { sb.append("Got: " + skTheta + ", Expected: " + theta + "; "); }
- if (!entriesOk) { sb.append("Got: " + skEntries + ", Expected: " + entries + "; "); }
- if (!emptyOk) { sb.append("Got: " + skEmpty + ", Expected: " + empty + "."); }
+ if (!thetaOk) { sb.append("theta: expected " + theta + ", got " + skTheta + "; "); }
+ if (!entriesOk) { sb.append("entries: expected " + entries + ", got " + skEntries + "; "); }
+ if (!emptyOk) { sb.append("empty: expected " + empty + ", got " + skEmpty + "."); }
throw new IllegalArgumentException(sb.toString());
}
}
@@ -561,31 +409,27 @@
IntegerSketch sk;
switch(skType) {
- case NEW: { //{ 1.0, 0, T} Bin: 101 Oct: 05
+ case EMPTY: { // { 1.0, 0, T}
sk = new IntegerSketch(4, 2, 1.0f, IntegerSummary.Mode.Min);
break;
}
- case EXACT: { //{ 1.0, >0, F} Bin: 111 Oct: 07
+ case EXACT: { // { 1.0, >0, F}
sk = new IntegerSketch(4, 2, 1.0f, IntegerSummary.Mode.Min);
sk.update(value, 1);
break;
}
- case ESTIMATION: { //{<1.0, >0, F} Bin: 010 Oct: 02
+ case ESTIMATION: { // {<1.0, >0, F}
sk = new IntegerSketch(4, 2, p, IntegerSummary.Mode.Min);
sk.update(value, 1);
break;
}
- case NEW_DEGEN: { //{<1.0, 0, T} Bin: 001 Oct: 01
- sk = new IntegerSketch(4, 2, p, IntegerSummary.Mode.Min);
- break;
- }
- case RESULT_DEGEN: { //{<1.0, 0, F} Bin: 000 Oct: 0
+ case DEGENERATE: { // {<1.0, 0, F}
sk = new IntegerSketch(4, 2, p, IntegerSummary.Mode.Min);
sk.update(value, 1); // > theta
break;
}
- default: { return null; } //should not happen
+ default: { return null; } // should not happen
}
return sk;
}
@@ -597,34 +441,29 @@
UpdateSketch sk;
switch(skType) {
- case NEW: { //{ 1.0, 0, T} Bin: 101 Oct: 05
+ case EMPTY: { // { 1.0, 0, T}
sk = bldr.build();
break;
}
- case EXACT: { //{ 1.0, >0, F} Bin: 111 Oct: 07
+ case EXACT: { // { 1.0, >0, F}
sk = bldr.build();
sk.update(value);
break;
}
- case ESTIMATION: { //{<1.0, >0, F} Bin: 010 Oct: 02
+ case ESTIMATION: { // {<1.0, >0, F}
bldr.setP(p);
sk = bldr.build();
sk.update(value);
break;
}
- case NEW_DEGEN: { //{<1.0, 0, T} Bin: 001 Oct: 01
- bldr.setP(p);
- sk = bldr.build();
- break;
- }
- case RESULT_DEGEN: { //{<1.0, 0, F} Bin: 000 Oct: 0
+ case DEGENERATE: { // {<1.0, 0, F}
bldr.setP(p);
sk = bldr.build();
sk.update(value); // > theta
break;
}
- default: { return null; } //should not happen
+ default: { return null; } // should not happen
}
return sk;
}
diff --git a/src/test/java/org/apache/datasketches/tuple/arrayofdoubles/DirectArrayOfDoublesQuickSelectSketchTest.java b/src/test/java/org/apache/datasketches/tuple/arrayofdoubles/DirectArrayOfDoublesQuickSelectSketchTest.java
index c77664c..aae8c0b 100644
--- a/src/test/java/org/apache/datasketches/tuple/arrayofdoubles/DirectArrayOfDoublesQuickSelectSketchTest.java
+++ b/src/test/java/org/apache/datasketches/tuple/arrayofdoubles/DirectArrayOfDoublesQuickSelectSketchTest.java
@@ -58,9 +58,8 @@
Assert.assertEquals(sketch.getEstimate(), 0.0);
Assert.assertEquals(sketch.getUpperBound(1), 0.0);
Assert.assertEquals(sketch.getLowerBound(1), 0.0);
- Assert.assertEquals(
- (float)(sketch.getThetaLong() / (double) Long.MAX_VALUE), samplingProbability);
- Assert.assertEquals((float)sketch.getTheta(), samplingProbability);
+ Assert.assertEquals(sketch.getThetaLong(), Long.MAX_VALUE);
+ Assert.assertEquals(sketch.getTheta(), 1.0);
}
@Test
diff --git a/src/test/java/org/apache/datasketches/tuple/arrayofdoubles/HeapArrayOfDoublesQuickSelectSketchTest.java b/src/test/java/org/apache/datasketches/tuple/arrayofdoubles/HeapArrayOfDoublesQuickSelectSketchTest.java
index e27cda2..5156574 100644
--- a/src/test/java/org/apache/datasketches/tuple/arrayofdoubles/HeapArrayOfDoublesQuickSelectSketchTest.java
+++ b/src/test/java/org/apache/datasketches/tuple/arrayofdoubles/HeapArrayOfDoublesQuickSelectSketchTest.java
@@ -53,8 +53,8 @@
Assert.assertEquals(sketch.getEstimate(), 0.0);
Assert.assertEquals(sketch.getUpperBound(1), 0.0);
Assert.assertEquals(sketch.getLowerBound(1), 0.0);
- Assert.assertEquals((float)(sketch.getThetaLong() / (double) Long.MAX_VALUE), samplingProbability);
- Assert.assertEquals((float)sketch.getTheta(), samplingProbability);
+ Assert.assertEquals(sketch.getThetaLong(), Long.MAX_VALUE);
+ Assert.assertEquals(sketch.getTheta(), 1.0);
}
@Test