This is an automated email from the ASF dual-hosted git repository. leerho pushed a commit to branch fix_codeql_alerts in repository https://gitbox.apache.org/repos/asf/datasketches-java.git
commit 12d1874c4c3e05d74c43d544a810cea0726aaefa Author: Lee Rhodes <[email protected]> AuthorDate: Fri Dec 9 16:37:00 2022 -0800 This fixes all of the "High", "Error", and "Warnings" issues detected by CodeQL. However, there were some that I classified as "Won't Fix" and "False Positive". But I'm not sure if CodeQL will remember those markings. --- .github/workflows/codeql.yml | 1 + .../java/org/apache/datasketches/common/Util.java | 30 +++++++++++++++++++++- .../java/org/apache/datasketches/cpc/CpcUnion.java | 2 +- .../org/apache/datasketches/cpc/PreambleUtil.java | 2 +- .../java/org/apache/datasketches/fdt/Group.java | 14 ++++++---- .../java/org/apache/datasketches/hll/HllUtil.java | 2 +- .../sampling/ReservoirItemsSketch.java | 2 +- .../sampling/ReservoirLongsSketch.java | 2 +- .../datasketches/tuple/QuickSelectSketch.java | 2 +- .../org/apache/datasketches/common/UtilTest.java | 18 +++++++++++++ .../datasketches/cpc/CpcCompressionTest.java | 2 +- .../org/apache/datasketches/cpc/TestAllTest.java | 2 +- .../apache/datasketches/frequencies/DistTest.java | 4 +-- .../org/apache/datasketches/hll/UnionTest.java | 4 +-- .../quantiles/CustomQuantilesTest.java | 7 ++--- .../quantiles/DirectUpdateDoublesSketchTest.java | 2 +- .../quantiles/HeapCompactDoublesSketchTest.java | 2 +- .../GenericInequalitySearchTest.java | 28 ++++++++++---------- .../quantilescommon/InequalitySearchTest.java | 2 +- .../sampling/ReservoirLongsSketchTest.java | 21 +++------------ .../datasketches/theta/BackwardConversions.java | 2 +- .../theta/ConcurrentHeapQuickSelectSketchTest.java | 30 ++++++++++------------ .../theta/DirectQuickSelectSketchTest.java | 27 +++++++++---------- .../datasketches/theta/HeapAlphaSketchTest.java | 20 +++++++-------- .../theta/HeapQuickSelectSketchTest.java | 20 +++++++-------- 25 files changed, 138 insertions(+), 110 deletions(-) diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index edcce802..9faa687e 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -8,6 +8,7 @@ on: branches: [ 'master' ] schedule: - cron: '10 17 * * 4' + workflow_dispatch: jobs: analyze: diff --git a/src/main/java/org/apache/datasketches/common/Util.java b/src/main/java/org/apache/datasketches/common/Util.java index 44c02b6d..d333771c 100644 --- a/src/main/java/org/apache/datasketches/common/Util.java +++ b/src/main/java/org/apache/datasketches/common/Util.java @@ -136,6 +136,34 @@ public final class Util { return arr; } + //Byte array conversions + + static long[] convertToLongArray(final byte[] byteArr, final boolean littleEndian) { + int len = byteArr.length; + long[] longArr = new long[len / 8 + (len % 8 != 0 ? 1 : 0)]; + int off = 0; + int longArrIdx = 0; + while (off < len) { + int rem = Math.min(len - 1 - off, 7); + long tgt = 0; + if (littleEndian) { + for (int j = off + rem, k = 0; j >= off; --j, k++) { + tgt |= (byteArr[j] & 0XFFL) << (k * 8); + } + } else { //BE + for (int j = off + rem, k = rem; j >= off; --j, k--) { + tgt |= (byteArr[j] & 0XFFL) << (k * 8); + } + } + off += 8; + longArr[longArrIdx++] = tgt; + } + return longArr; + } + + + + //String Related /** @@ -562,7 +590,7 @@ public final class Util { return pow(base, floor(logBaseOfX(base, x))); } - // Logrithm related + // Logarithm related /** * The log base 2 of the value diff --git a/src/main/java/org/apache/datasketches/cpc/CpcUnion.java b/src/main/java/org/apache/datasketches/cpc/CpcUnion.java index 72166df1..2cd7663b 100644 --- a/src/main/java/org/apache/datasketches/cpc/CpcUnion.java +++ b/src/main/java/org/apache/datasketches/cpc/CpcUnion.java @@ -298,7 +298,7 @@ public class CpcUnion { final int state = ((sourceFlavorOrd - 1) << 1) | ((union.bitMatrix != null) ? 1 : 0); switch (state) { case 0 : { //A: Sparse, bitMatrix == null, accumulator valid - if ((union.accumulator.getFlavor() == EMPTY) //lgtm [java/dereferenced-value-may-be-null] + if ((union.accumulator.getFlavor() == EMPTY) && (union.lgK == source.lgK)) { union.accumulator = source.copy(); break; diff --git a/src/main/java/org/apache/datasketches/cpc/PreambleUtil.java b/src/main/java/org/apache/datasketches/cpc/PreambleUtil.java index 3c63bd7f..e3379f58 100644 --- a/src/main/java/org/apache/datasketches/cpc/PreambleUtil.java +++ b/src/main/java/org/apache/datasketches/cpc/PreambleUtil.java @@ -790,7 +790,7 @@ final class PreambleUtil { final long memCap = mem.getCapacity(); final long expectedCap = offsetBytes + (4L * lengthInts); checkCapacity(memCap, expectedCap); - for (int i = 0; i < lengthInts; i++) { + for (long i = 0; i < lengthInts; i++) { sb.append(String.format(fmt, i, mem.getInt(offsetBytes + (4L * i)))).append(LS); } } diff --git a/src/main/java/org/apache/datasketches/fdt/Group.java b/src/main/java/org/apache/datasketches/fdt/Group.java index 90bde42d..0d676a99 100644 --- a/src/main/java/org/apache/datasketches/fdt/Group.java +++ b/src/main/java/org/apache/datasketches/fdt/Group.java @@ -21,8 +21,7 @@ package org.apache.datasketches.fdt; /** * Defines a Group from a Frequent Distinct Tuple query. This class is called internally during - * post processing and is not inteded to be called by the user. - * Note: this class has a natural ordering that is inconsistent with equals. + * post processing and is not intended to be called by the user. * @author Lee Rhodes */ public class Group implements Comparable<Group> { @@ -49,7 +48,7 @@ public class Group implements Comparable<Group> { * @param count the number of retained rows associated with this group * @param estimate the estimate of the original population associated with this group * @param ub the upper bound of the estimate - * @param lb the lower bound of the extimate + * @param lb the lower bound of the estimate * @param fraction the fraction of all retained rows of the sketch associated with this group * @param rse the estimated Relative Standard Error for this group. * @return return this @@ -114,8 +113,6 @@ public class Group implements Comparable<Group> { } /** - * Note: this class has a natural ordering that is inconsistent with equals. - * Ignore FindBugs EQ_COMPARETO_USE_OBJECT_EQUALS warning. * @param that The Group to compare to */ @Override @@ -123,5 +120,12 @@ public class Group implements Comparable<Group> { return that.count - count; //decreasing } + @Override + public boolean equals(Object that) { + if (this == that) { return true; } + if (!(that instanceof Group)) { return false; } + return ((Group)that).count == count; + } + } diff --git a/src/main/java/org/apache/datasketches/hll/HllUtil.java b/src/main/java/org/apache/datasketches/hll/HllUtil.java index 0a1ef518..939e5315 100644 --- a/src/main/java/org/apache/datasketches/hll/HllUtil.java +++ b/src/main/java/org/apache/datasketches/hll/HllUtil.java @@ -97,7 +97,7 @@ final class HllUtil { static CurMode checkPreamble(final Memory mem) { checkBounds(0, 8, mem.getCapacity()); //need min 8 bytes final int preInts = extractPreInts(mem); - checkBounds(0, preInts * Integer.BYTES, mem.getCapacity()); + checkBounds(0, (long)preInts * Integer.BYTES, mem.getCapacity()); final int serVer = extractSerVer(mem); final int famId = extractFamilyId(mem); final CurMode curMode = extractCurMode(mem); diff --git a/src/main/java/org/apache/datasketches/sampling/ReservoirItemsSketch.java b/src/main/java/org/apache/datasketches/sampling/ReservoirItemsSketch.java index f591f466..a00a2c09 100644 --- a/src/main/java/org/apache/datasketches/sampling/ReservoirItemsSketch.java +++ b/src/main/java/org/apache/datasketches/sampling/ReservoirItemsSketch.java @@ -517,7 +517,7 @@ public final class ReservoirItemsSketch<T> { return new SampleSubsetSummary(0.0, 0.0, 0.0, 0.0); } - final long numSamples = getNumSamples(); + final int numSamples = getNumSamples(); final double samplingRate = numSamples / (double) itemsSeen_; assert samplingRate >= 0.0; assert samplingRate <= 1.0; diff --git a/src/main/java/org/apache/datasketches/sampling/ReservoirLongsSketch.java b/src/main/java/org/apache/datasketches/sampling/ReservoirLongsSketch.java index 3b2e79c5..60d27750 100644 --- a/src/main/java/org/apache/datasketches/sampling/ReservoirLongsSketch.java +++ b/src/main/java/org/apache/datasketches/sampling/ReservoirLongsSketch.java @@ -444,7 +444,7 @@ public final class ReservoirLongsSketch { return new SampleSubsetSummary(0.0, 0.0, 0.0, 0.0); } - final long numSamples = getNumSamples(); + final int numSamples = getNumSamples(); final double samplingRate = numSamples / (double) itemsSeen_; assert samplingRate >= 0.0; assert samplingRate <= 1.0; diff --git a/src/main/java/org/apache/datasketches/tuple/QuickSelectSketch.java b/src/main/java/org/apache/datasketches/tuple/QuickSelectSketch.java index 6e6f1eaf..6146174a 100644 --- a/src/main/java/org/apache/datasketches/tuple/QuickSelectSketch.java +++ b/src/main/java/org/apache/datasketches/tuple/QuickSelectSketch.java @@ -192,7 +192,7 @@ class QuickSelectSketch<S extends Summary> extends Sketch<S> { lgCurrentCapacity_ = mem.getByte(offset++); //byte 6 lgResizeFactor_ = mem.getByte(offset++); //byte 7 - checkBounds(0, preambleLongs * 8, mem.getCapacity()); + checkBounds(0, preambleLongs * 8L, mem.getCapacity()); final boolean isInSamplingMode = (flags & 1 << Flags.IS_IN_SAMPLING_MODE.ordinal()) > 0; samplingProbability_ = isInSamplingMode ? mem.getFloat(offset) : 1f; //bytes 8 - 11 if (isInSamplingMode) { diff --git a/src/test/java/org/apache/datasketches/common/UtilTest.java b/src/test/java/org/apache/datasketches/common/UtilTest.java index a0871dbb..09bd6aa1 100644 --- a/src/test/java/org/apache/datasketches/common/UtilTest.java +++ b/src/test/java/org/apache/datasketches/common/UtilTest.java @@ -32,6 +32,7 @@ import static org.apache.datasketches.common.Util.checkIfIntPowerOf2; import static org.apache.datasketches.common.Util.checkIfLongPowerOf2; import static org.apache.datasketches.common.Util.checkIfMultipleOf8AndGT0; import static org.apache.datasketches.common.Util.checkProbability; +import static org.apache.datasketches.common.Util.convertToLongArray; import static org.apache.datasketches.common.Util.exactLog2OfInt; import static org.apache.datasketches.common.Util.exactLog2OfLong; import static org.apache.datasketches.common.Util.floorPowerBaseOfDouble; @@ -434,6 +435,23 @@ public class UtilTest { } catch (final SketchesArgumentException e) { } } + @Test + static void checkConvertToLongArray() { + byte[] arr = {1,2,3,4,5,6,7,8,9,10,11,12}; + + long[] out = convertToLongArray(arr, false); + String s = org.apache.datasketches.common.Util.zeroPad(Long.toHexString(out[0]), 16); + assertEquals(s, "0807060504030201"); + s = org.apache.datasketches.common.Util.zeroPad(Long.toHexString(out[1]), 16); + assertEquals(s, "000000000c0b0a09"); + + out = convertToLongArray(arr, true); + s = org.apache.datasketches.common.Util.zeroPad(Long.toHexString(out[0]), 16); + assertEquals(s, "0102030405060708"); + s = org.apache.datasketches.common.Util.zeroPad(Long.toHexString(out[1]), 16); + assertEquals(s, "00000000090a0b0c"); + } + //Resources @Test diff --git a/src/test/java/org/apache/datasketches/cpc/CpcCompressionTest.java b/src/test/java/org/apache/datasketches/cpc/CpcCompressionTest.java index c8c85e37..9a33aa71 100644 --- a/src/test/java/org/apache/datasketches/cpc/CpcCompressionTest.java +++ b/src/test/java/org/apache/datasketches/cpc/CpcCompressionTest.java @@ -178,7 +178,7 @@ public class CpcCompressionTest { int bb; // numBaseBits for (bb = 0; bb <= 11; bb++) { - final Long numWordsWritten = + final long numWordsWritten = lowLevelCompressPairs(pairArray, numPairs, bb, compressedWords); println("numWordsWritten = " + numWordsWritten + ", bb = " + bb); diff --git a/src/test/java/org/apache/datasketches/cpc/TestAllTest.java b/src/test/java/org/apache/datasketches/cpc/TestAllTest.java index 7ef12f02..ce847fc3 100644 --- a/src/test/java/org/apache/datasketches/cpc/TestAllTest.java +++ b/src/test/java/org/apache/datasketches/cpc/TestAllTest.java @@ -57,7 +57,7 @@ public class TestAllTest { int len = 16; long[] arr = new long[len]; Arrays.fill(arr, pat); - long trueCount = len * Long.bitCount(pat); + long trueCount = (long)len * Long.bitCount(pat); long testCount = BitMatrix.countCoupons(arr); assertEquals(testCount, trueCount); } diff --git a/src/test/java/org/apache/datasketches/frequencies/DistTest.java b/src/test/java/org/apache/datasketches/frequencies/DistTest.java index 0ce9fb20..d6d56da1 100644 --- a/src/test/java/org/apache/datasketches/frequencies/DistTest.java +++ b/src/test/java/org/apache/datasketches/frequencies/DistTest.java @@ -37,11 +37,11 @@ public class DistTest { // the zeta function, used by the below zipf function // (this is not often called from outside this library) // ... but have made it public now to speed things up - int i; + long i; double ans = 0.0; for (i = 1; i <= n; i++) { - ans += Math.pow(1. / i, theta); + ans += Math.pow(1.0 / i, theta); } return (ans); } diff --git a/src/test/java/org/apache/datasketches/hll/UnionTest.java b/src/test/java/org/apache/datasketches/hll/UnionTest.java index 29e15108..d3485ebc 100644 --- a/src/test/java/org/apache/datasketches/hll/UnionTest.java +++ b/src/test/java/org/apache/datasketches/hll/UnionTest.java @@ -437,7 +437,7 @@ public class UnionTest { public void checkUnionHeapifyRebuildAfterMerge() { int lgK = 12; //Build 2 sketches in HLL (dense) mode. - int u = (lgK < 8) ? 16 : 1 << (lgK - 3); + int u = (lgK < 8) ? 16 : 1 << (lgK - 3); //allows changing lgK above HllSketch sk1 = new HllSketch(lgK); HllSketch sk2 = new HllSketch(lgK); for (int i = 0; i < u; i++) { @@ -467,7 +467,7 @@ public class UnionTest { WritableMemory wmem = WritableMemory.allocate(bytes); new Union(lgK, wmem); // result is unused, relying on side effect int trueCount = 0; - int delta = (lgK < 8) ? 16 : 1 << (lgK - 3); + int delta = (lgK < 8) ? 16 : 1 << (lgK - 3); //allows to vary lgK above for (int i = 0; i < 3; i++) { Union.writableWrap(wmem).update(buildSketch(trueCount, delta)); trueCount += delta; diff --git a/src/test/java/org/apache/datasketches/quantiles/CustomQuantilesTest.java b/src/test/java/org/apache/datasketches/quantiles/CustomQuantilesTest.java index abe66bd3..44b1b0c2 100644 --- a/src/test/java/org/apache/datasketches/quantiles/CustomQuantilesTest.java +++ b/src/test/java/org/apache/datasketches/quantiles/CustomQuantilesTest.java @@ -19,7 +19,8 @@ package org.apache.datasketches.quantiles; -import static org.apache.datasketches.quantilescommon.LinearRanksAndQuantiles.*; +import static org.apache.datasketches.quantilescommon.LinearRanksAndQuantiles.getTrueDoubleQuantile; +import static org.apache.datasketches.quantilescommon.LinearRanksAndQuantiles.getTrueDoubleRank; import static org.apache.datasketches.quantilescommon.QuantileSearchCriteria.EXCLUSIVE; import static org.apache.datasketches.quantilescommon.QuantileSearchCriteria.INCLUSIVE; import static org.testng.Assert.assertEquals; @@ -80,7 +81,7 @@ public class CustomQuantilesTest { println(" Q of the smallest rank > r. If r = 1.0 => null or NaN"); printf("%12s%12s%12s\n", "Ranks", "Quantiles", "CompRank"); double inc = 1.0 / (2 * N); - for (int j = 0; j <= (2 * N); j++) { + for (long j = 0; j <= (2 * N); j++) { double nr = (j * inc); double q = sk.getQuantile(nr, EXCLUSIVE); double qTrue = getTrueDoubleQuantile(cumWtsArr, quantilesArr, nr, EXCLUSIVE); @@ -105,7 +106,7 @@ public class CustomQuantilesTest { println(" Q of the smallest rank >= r."); printf("%12s%12s%12s\n", "Ranks", "Quantiles", "CompRank"); inc = 1.0 / (2 * N); - for (int j = 0; j <= (2 * N); j++) { + for (long j = 0; j <= (2 * N); j++) { double nr = (j * inc); double q = sk.getQuantile(nr, INCLUSIVE); double qTrue = getTrueDoubleQuantile(cumWtsArr, quantilesArr, nr, INCLUSIVE); diff --git a/src/test/java/org/apache/datasketches/quantiles/DirectUpdateDoublesSketchTest.java b/src/test/java/org/apache/datasketches/quantiles/DirectUpdateDoublesSketchTest.java index 6335a844..f87409e3 100644 --- a/src/test/java/org/apache/datasketches/quantiles/DirectUpdateDoublesSketchTest.java +++ b/src/test/java/org/apache/datasketches/quantiles/DirectUpdateDoublesSketchTest.java @@ -296,7 +296,7 @@ public class DirectUpdateDoublesSketchTest { static UpdateDoublesSketch buildAndLoadDQS(int k, long n, int startV) { UpdateDoublesSketch qs = buildDQS(k, n); - for (int i=1; i<=n; i++) { + for (long i = 1; i <= n; i++) { qs.update(startV + i); } return qs; diff --git a/src/test/java/org/apache/datasketches/quantiles/HeapCompactDoublesSketchTest.java b/src/test/java/org/apache/datasketches/quantiles/HeapCompactDoublesSketchTest.java index fa958b74..0581c44a 100644 --- a/src/test/java/org/apache/datasketches/quantiles/HeapCompactDoublesSketchTest.java +++ b/src/test/java/org/apache/datasketches/quantiles/HeapCompactDoublesSketchTest.java @@ -94,7 +94,7 @@ public class HeapCompactDoublesSketchTest { // modify to make v2, clear compact flag, and insert a -1 in the middle of the base buffer PreambleUtil.insertSerVer(mem, 2); PreambleUtil.insertFlags(mem, 0); - final long tgtAddr = COMBINED_BUFFER + ((Double.BYTES * k) / 2); + final long tgtAddr = COMBINED_BUFFER + ((Double.BYTES * (long)k) / 2); mem.putDouble(tgtAddr, -1.0); assert mem.getDouble(tgtAddr - Double.BYTES) > mem.getDouble(tgtAddr); diff --git a/src/test/java/org/apache/datasketches/quantilescommon/GenericInequalitySearchTest.java b/src/test/java/org/apache/datasketches/quantilescommon/GenericInequalitySearchTest.java index e039f76b..ee949593 100644 --- a/src/test/java/org/apache/datasketches/quantilescommon/GenericInequalitySearchTest.java +++ b/src/test/java/org/apache/datasketches/quantilescommon/GenericInequalitySearchTest.java @@ -43,7 +43,7 @@ public class GenericInequalitySearchTest { private final Comparator<Float> comparator = Comparator.naturalOrder(); - + //CodeQL may complain about boxed values, but Java Generics require objects. private static Float[] buildRandFloatArr(final int len) { final Float[] arr = new Float[len]; Float v = 1.0f; @@ -54,18 +54,18 @@ public class GenericInequalitySearchTest { return arr; } - @Test //visual testing only - //@SuppressWarnings("unused") - private static void checkBuildRandArr() { - final int len = 10; - for (int i = 0; i < 10; i++) { - final Float[] tarr = buildRandFloatArr(len); - for (int j = 0; j < len; j++) { - printf("%4.1f,", tarr[j]); - } - println(""); - } - } +// @Test //visual testing only +// //@SuppressWarnings("unused") +// private static void viewBuildRandArr() { +// final int len = 10; +// for (int i = 0; i < 10; i++) { +// final Float[] tarr = buildRandFloatArr(len); +// for (int j = 0; j < len; j++) { +// printf("%4.1f,", tarr[j]); +// } +// println(""); +// } +// } @Test public void checkBinSearchFltLimits() { @@ -287,7 +287,7 @@ public class GenericInequalitySearchTest { return ""; } - private final static boolean enablePrinting = false; + private final static boolean enablePrinting = true; /** * @param format the format diff --git a/src/test/java/org/apache/datasketches/quantilescommon/InequalitySearchTest.java b/src/test/java/org/apache/datasketches/quantilescommon/InequalitySearchTest.java index 121494c8..3a74d228 100644 --- a/src/test/java/org/apache/datasketches/quantilescommon/InequalitySearchTest.java +++ b/src/test/java/org/apache/datasketches/quantilescommon/InequalitySearchTest.java @@ -64,7 +64,7 @@ public class InequalitySearchTest { long v = 1L; for (int i = 0; i < len; i++) { arr[i] = v; - v += 2 * randDelta(); + v += 2L * randDelta(); } return arr; } diff --git a/src/test/java/org/apache/datasketches/sampling/ReservoirLongsSketchTest.java b/src/test/java/org/apache/datasketches/sampling/ReservoirLongsSketchTest.java index 56c0ea04..799e008b 100644 --- a/src/test/java/org/apache/datasketches/sampling/ReservoirLongsSketchTest.java +++ b/src/test/java/org/apache/datasketches/sampling/ReservoirLongsSketchTest.java @@ -32,15 +32,14 @@ import static org.testng.Assert.fail; import java.io.PrintWriter; import java.io.StringWriter; -import org.testng.annotations.Test; - -import org.apache.datasketches.memory.Memory; -import org.apache.datasketches.memory.WritableMemory; import org.apache.datasketches.common.Family; import org.apache.datasketches.common.ResizeFactor; import org.apache.datasketches.common.SketchesArgumentException; import org.apache.datasketches.common.SketchesException; import org.apache.datasketches.common.SketchesStateException; +import org.apache.datasketches.memory.Memory; +import org.apache.datasketches.memory.WritableMemory; +import org.testng.annotations.Test; public class ReservoirLongsSketchTest { private static final double EPS = 1e-8; @@ -532,20 +531,6 @@ public class ReservoirLongsSketchTest { } } - static String printBytesAsLongs(final byte[] byteArr) { - final StringBuilder sb = new StringBuilder(); - for (int i = 0; i < byteArr.length; i += 8) { - for (int j = i + 7; j >= i; --j) { - final String str = Integer.toHexString(byteArr[j] & 0XFF); - sb.append(org.apache.datasketches.common.Util.zeroPad(str, 2)); - } - sb.append(org.apache.datasketches.common.Util.LS); - - } - - return sb.toString(); - } - /** * Wrapper around System.out.println() allowing a simple way to disable logging in tests * diff --git a/src/test/java/org/apache/datasketches/theta/BackwardConversions.java b/src/test/java/org/apache/datasketches/theta/BackwardConversions.java index 80b5d55c..18cd6e86 100644 --- a/src/test/java/org/apache/datasketches/theta/BackwardConversions.java +++ b/src/test/java/org/apache/datasketches/theta/BackwardConversions.java @@ -226,7 +226,7 @@ public class BackwardConversions { wmem.putLong(16, skV3.getThetaLong()); } final long[] arr = skV3.getCache(); - wmem.putLongArray(preLongs * 8, arr, 0, entries); + wmem.putLongArray(preLongs * 8L, arr, 0, entries); return wmem; } } diff --git a/src/test/java/org/apache/datasketches/theta/ConcurrentHeapQuickSelectSketchTest.java b/src/test/java/org/apache/datasketches/theta/ConcurrentHeapQuickSelectSketchTest.java index 1ca0da8f..2261edc3 100644 --- a/src/test/java/org/apache/datasketches/theta/ConcurrentHeapQuickSelectSketchTest.java +++ b/src/test/java/org/apache/datasketches/theta/ConcurrentHeapQuickSelectSketchTest.java @@ -173,8 +173,8 @@ public class ConcurrentHeapQuickSelectSketchTest { assertEquals(local2.getEstimate(), u, 0.0); assertEquals(local2.getLowerBound(2), u, 0.0); assertEquals(local2.getUpperBound(2), u, 0.0); - assertEquals(local2.isEmpty(), false); - assertEquals(local2.isEstimationMode(), false); + assertFalse(local2.isEmpty()); + assertFalse(local2.isEstimationMode()); assertEquals(local2.getResizeFactor(), local.getResizeFactor()); local2.toString(true, true, 8, true); } @@ -197,7 +197,7 @@ public class ConcurrentHeapQuickSelectSketchTest { double localEst = local.getEstimate(); double localLB = local.getLowerBound(2); double localUB = local.getUpperBound(2); - assertEquals(local.isEstimationMode(), true); + assertTrue(local.isEstimationMode()); byte[] serArr = shared.toByteArray(); Memory srcMem = Memory.wrap(serArr); @@ -210,8 +210,8 @@ public class ConcurrentHeapQuickSelectSketchTest { assertEquals(local2.getEstimate(), localEst); assertEquals(local2.getLowerBound(2), localLB); assertEquals(local2.getUpperBound(2), localUB); - assertEquals(local2.isEmpty(), false); - assertEquals(local2.isEstimationMode(), true); + assertFalse(local2.isEmpty()); + assertTrue(local2.isEstimationMode()); assertEquals(local2.getResizeFactor(), local.getResizeFactor()); } @@ -219,8 +219,7 @@ public class ConcurrentHeapQuickSelectSketchTest { public void checkHeapifyMemoryEstimating() { int lgK = 9; int k = 1 << lgK; - int u = 2*k; - boolean estimating = (u > k); + int u = 2*k; //thus estimating SharedLocal sl = new SharedLocal(lgK); UpdateSketch local = sl.local; @@ -234,7 +233,7 @@ public class ConcurrentHeapQuickSelectSketchTest { double localEst = local.getEstimate(); double localLB = local.getLowerBound(2); double localUB = local.getUpperBound(2); - assertEquals(local.isEstimationMode(), estimating); + assertTrue(local.isEstimationMode()); assertFalse(local.isDirect()); assertFalse(local.hasMemory()); @@ -252,15 +251,14 @@ public class ConcurrentHeapQuickSelectSketchTest { assertEquals(local2.getLowerBound(2), localLB); assertEquals(local2.getUpperBound(2), localUB); assertEquals(local2.isEmpty(), false); - assertEquals(local2.isEstimationMode(), estimating); + assertTrue(local2.isEstimationMode()); } @Test public void checkHQStoCompactForms() { int lgK = 9; int k = 1 << lgK; - int u = 4*k; - boolean estimating = (u > k); + int u = 4*k; //thus estimating int maxBytes = (k << 4) + (Family.QUICKSELECT.getMinPreLongs() << 3); @@ -286,7 +284,7 @@ public class ConcurrentHeapQuickSelectSketchTest { int sharedBytes = shared.getCurrentBytes(); int sharedCompBytes = shared.getCompactBytes(); assertEquals(sharedBytes, maxBytes); - assertEquals(local.isEstimationMode(), estimating); + assertTrue(local.isEstimationMode()); CompactSketch comp1, comp2, comp3, comp4; @@ -296,7 +294,7 @@ public class ConcurrentHeapQuickSelectSketchTest { assertEquals(comp1.getLowerBound(2), localLB); assertEquals(comp1.getUpperBound(2), localUB); assertEquals(comp1.isEmpty(), false); - assertEquals(comp1.isEstimationMode(), estimating); + assertTrue(comp1.isEstimationMode()); assertEquals(comp1.getCompactBytes(), sharedCompBytes); assertEquals(comp1.getClass().getSimpleName(), "HeapCompactSketch"); @@ -306,7 +304,7 @@ public class ConcurrentHeapQuickSelectSketchTest { assertEquals(comp2.getLowerBound(2), localLB); assertEquals(comp2.getUpperBound(2), localUB); assertEquals(comp2.isEmpty(), false); - assertEquals(comp2.isEstimationMode(), estimating); + assertTrue(comp2.isEstimationMode()); assertEquals(comp2.getCompactBytes(), sharedCompBytes); assertEquals(comp2.getClass().getSimpleName(), "HeapCompactSketch"); @@ -319,7 +317,7 @@ public class ConcurrentHeapQuickSelectSketchTest { assertEquals(comp3.getLowerBound(2), localLB); assertEquals(comp3.getUpperBound(2), localUB); assertEquals(comp3.isEmpty(), false); - assertEquals(comp3.isEstimationMode(), estimating); + assertTrue(comp3.isEstimationMode()); assertEquals(comp3.getCompactBytes(), sharedCompBytes); assertEquals(comp3.getClass().getSimpleName(), "DirectCompactSketch"); @@ -330,7 +328,7 @@ public class ConcurrentHeapQuickSelectSketchTest { assertEquals(comp4.getLowerBound(2), localLB); assertEquals(comp4.getUpperBound(2), localUB); assertEquals(comp4.isEmpty(), false); - assertEquals(comp4.isEstimationMode(), estimating); + assertTrue(comp4.isEstimationMode()); assertEquals(comp4.getCompactBytes(), sharedCompBytes); assertEquals(comp4.getClass().getSimpleName(), "DirectCompactSketch"); comp4.toString(false, true, 0, false); diff --git a/src/test/java/org/apache/datasketches/theta/DirectQuickSelectSketchTest.java b/src/test/java/org/apache/datasketches/theta/DirectQuickSelectSketchTest.java index 802b897f..5191c7c6 100644 --- a/src/test/java/org/apache/datasketches/theta/DirectQuickSelectSketchTest.java +++ b/src/test/java/org/apache/datasketches/theta/DirectQuickSelectSketchTest.java @@ -122,8 +122,7 @@ public class DirectQuickSelectSketchTest { @Test public void checkHeapifyMemoryEstimating() { int k = 512; - int u = 2*k; - boolean estimating = (u > k); + int u = 2*k; //thus estimating try (WritableHandle h = makeNativeMemory(k)) { WritableMemory mem = h.getWritable(); @@ -134,7 +133,7 @@ public class DirectQuickSelectSketchTest { double sk1est = sk1.getEstimate(); double sk1lb = sk1.getLowerBound(2); double sk1ub = sk1.getUpperBound(2); - assertEquals(sk1.isEstimationMode(), estimating); + assertTrue(sk1.isEstimationMode()); assertEquals(sk1.getClass().getSimpleName(), "DirectQuickSelectSketch"); int curCount1 = sk1.getRetainedEntries(true); assertTrue(sk1.isDirect()); @@ -148,7 +147,7 @@ public class DirectQuickSelectSketchTest { assertEquals(sk2.getLowerBound(2), sk1lb); assertEquals(sk2.getUpperBound(2), sk1ub); assertEquals(sk2.isEmpty(), false); - assertEquals(sk2.isEstimationMode(), estimating); + assertTrue(sk2.isEstimationMode()); assertEquals(sk2.getClass().getSimpleName(), "HeapQuickSelectSketch"); int curCount2 = sk2.getRetainedEntries(true); long[] cache = sk2.getCache(); @@ -288,8 +287,7 @@ public class DirectQuickSelectSketchTest { @Test public void checkWrapMemoryEst() { int k = 512; - int u = 2*k; - boolean estimating = (u > k); + int u = 2*k; //thus estimating try (WritableHandle h = makeNativeMemory(k)) { WritableMemory mem = h.getWritable(); @@ -299,7 +297,7 @@ public class DirectQuickSelectSketchTest { double sk1est = sk1.getEstimate(); double sk1lb = sk1.getLowerBound(2); double sk1ub = sk1.getUpperBound(2); - assertEquals(sk1.isEstimationMode(), estimating); + assertTrue(sk1.isEstimationMode()); Sketch sk2 = Sketch.wrap(mem); @@ -307,7 +305,7 @@ public class DirectQuickSelectSketchTest { assertEquals(sk2.getLowerBound(2), sk1lb); assertEquals(sk2.getUpperBound(2), sk1ub); assertEquals(sk2.isEmpty(), false); - assertEquals(sk2.isEstimationMode(), estimating); + assertTrue(sk2.isEstimationMode()); } catch (final Exception e) { throw new RuntimeException(e); } @@ -316,8 +314,7 @@ public class DirectQuickSelectSketchTest { @Test public void checkDQStoCompactForms() { int k = 512; - int u = 4*k; - boolean estimating = (u > k); + int u = 4*k; //thus estimating try (WritableHandle h = makeNativeMemory(k)) { WritableMemory mem = h.getWritable(); @@ -338,7 +335,7 @@ public class DirectQuickSelectSketchTest { double uskEst = usk.getEstimate(); double uskLB = usk.getLowerBound(2); double uskUB = usk.getUpperBound(2); - assertEquals(usk.isEstimationMode(), estimating); + assertTrue(usk.isEstimationMode()); CompactSketch csk; @@ -347,7 +344,7 @@ public class DirectQuickSelectSketchTest { assertEquals(csk.getLowerBound(2), uskLB); assertEquals(csk.getUpperBound(2), uskUB); assertEquals(csk.isEmpty(), false); - assertEquals(csk.isEstimationMode(), estimating); + assertTrue(csk.isEstimationMode()); assertEquals(csk.getClass().getSimpleName(), "HeapCompactSketch"); csk = usk.compact(true, null); @@ -355,7 +352,7 @@ public class DirectQuickSelectSketchTest { assertEquals(csk.getLowerBound(2), uskLB); assertEquals(csk.getUpperBound(2), uskUB); assertEquals(csk.isEmpty(), false); - assertEquals(csk.isEstimationMode(), estimating); + assertTrue(csk.isEstimationMode()); assertEquals(csk.getClass().getSimpleName(), "HeapCompactSketch"); int bytes = usk.getCompactBytes(); @@ -368,7 +365,7 @@ public class DirectQuickSelectSketchTest { assertEquals(csk.getLowerBound(2), uskLB); assertEquals(csk.getUpperBound(2), uskUB); assertEquals(csk.isEmpty(), false); - assertEquals(csk.isEstimationMode(), estimating); + assertTrue(csk.isEstimationMode()); assertEquals(csk.getClass().getSimpleName(), "DirectCompactSketch"); mem2.clear(); @@ -377,7 +374,7 @@ public class DirectQuickSelectSketchTest { assertEquals(csk.getLowerBound(2), uskLB); assertEquals(csk.getUpperBound(2), uskUB); assertEquals(csk.isEmpty(), false); - assertEquals(csk.isEstimationMode(), estimating); + assertTrue(csk.isEstimationMode()); assertEquals(csk.getClass().getSimpleName(), "DirectCompactSketch"); csk.toString(false, true, 0, false); } catch (final Exception e) { diff --git a/src/test/java/org/apache/datasketches/theta/HeapAlphaSketchTest.java b/src/test/java/org/apache/datasketches/theta/HeapAlphaSketchTest.java index f245b470..8682020e 100644 --- a/src/test/java/org/apache/datasketches/theta/HeapAlphaSketchTest.java +++ b/src/test/java/org/apache/datasketches/theta/HeapAlphaSketchTest.java @@ -185,9 +185,8 @@ public class HeapAlphaSketchTest { @Test public void checkHeapifyMemoryEstimating() { int k = 512; - int u = 2*k; + int u = 2*k; //thus estimating long seed = ThetaUtil.DEFAULT_UPDATE_SEED; - boolean estimating = (u > k); //int maxBytes = (k << 4) + (Family.ALPHA.getLowPreLongs()); UpdateSketch sk1 = UpdateSketch.builder().setFamily(fam_).setSeed(seed) @@ -200,7 +199,7 @@ public class HeapAlphaSketchTest { double sk1est = sk1.getEstimate(); double sk1lb = sk1.getLowerBound(2); double sk1ub = sk1.getUpperBound(2); - assertEquals(sk1.isEstimationMode(), estimating); + assertTrue(sk1.isEstimationMode()); byte[] byteArray = sk1.toByteArray(); Memory mem = Memory.wrap(byteArray); @@ -211,15 +210,14 @@ public class HeapAlphaSketchTest { assertEquals(sk2.getLowerBound(2), sk1lb); assertEquals(sk2.getUpperBound(2), sk1ub); assertEquals(sk2.isEmpty(), false); - assertEquals(sk2.isEstimationMode(), estimating); + assertTrue(sk2.isEstimationMode()); assertEquals(sk2.getClass().getSimpleName(), sk1.getClass().getSimpleName()); } @Test public void checkAlphaToCompactForms() { int k = 512; - int u = 4*k; - boolean estimating = (u > k); + int u = 4*k; //thus estimating UpdateSketch usk = UpdateSketch.builder().setFamily(fam_).setNominalEntries(k).build(); HeapAlphaSketch sk1 = (HeapAlphaSketch)usk; //for internal checks @@ -233,7 +231,7 @@ public class HeapAlphaSketchTest { //Alpha is more accurate, and size is a statistical variable about k // so cannot be directly compared to the compact forms - assertEquals(usk.isEstimationMode(), estimating); + assertTrue(usk.isEstimationMode()); CompactSketch comp1, comp2, comp3, comp4; @@ -249,7 +247,7 @@ public class HeapAlphaSketchTest { assertEquals(comp1bytes, (comp1curCount << 3) + (Family.COMPACT.getMaxPreLongs() << 3)); assertEquals(comp1.isEmpty(), false); - assertEquals(comp1.isEstimationMode(), estimating); + assertTrue(comp1.isEstimationMode()); assertEquals(comp1.getClass().getSimpleName(), "HeapCompactSketch"); comp2 = usk.compact(true, null); @@ -258,7 +256,7 @@ public class HeapAlphaSketchTest { assertEquals(comp2.getLowerBound(2), comp1lb); assertEquals(comp2.getUpperBound(2), comp1ub); assertEquals(comp2.isEmpty(), false); - assertEquals(comp2.isEstimationMode(), estimating); + assertTrue(comp2.isEstimationMode()); assertEquals(comp1bytes, comp2.getCompactBytes()); assertEquals(comp1curCount, comp2.getRetainedEntries(true)); assertEquals(comp2.getClass().getSimpleName(), "HeapCompactSketch"); @@ -275,7 +273,7 @@ public class HeapAlphaSketchTest { assertEquals(comp3.getLowerBound(2), comp1lb); assertEquals(comp3.getUpperBound(2), comp1ub); assertEquals(comp3.isEmpty(), false); - assertEquals(comp3.isEstimationMode(), estimating); + assertTrue(comp3.isEstimationMode()); assertEquals(comp1bytes, comp3.getCompactBytes()); assertEquals(comp1curCount, comp3.getRetainedEntries(true)); assertEquals(comp3.getClass().getSimpleName(), "DirectCompactSketch"); @@ -287,7 +285,7 @@ public class HeapAlphaSketchTest { assertEquals(comp4.getLowerBound(2), comp1lb); assertEquals(comp4.getUpperBound(2), comp1ub); assertEquals(comp4.isEmpty(), false); - assertEquals(comp4.isEstimationMode(), estimating); + assertTrue(comp4.isEstimationMode()); assertEquals(comp1bytes, comp4.getCompactBytes()); assertEquals(comp1curCount, comp4.getRetainedEntries(true)); assertEquals(comp4.getClass().getSimpleName(), "DirectCompactSketch"); diff --git a/src/test/java/org/apache/datasketches/theta/HeapQuickSelectSketchTest.java b/src/test/java/org/apache/datasketches/theta/HeapQuickSelectSketchTest.java index 55be006a..6cf4c365 100644 --- a/src/test/java/org/apache/datasketches/theta/HeapQuickSelectSketchTest.java +++ b/src/test/java/org/apache/datasketches/theta/HeapQuickSelectSketchTest.java @@ -179,9 +179,8 @@ public class HeapQuickSelectSketchTest { @Test public void checkHeapifyMemoryEstimating() { int k = 512; - int u = 2*k; + int u = 2*k; //thus estimating long seed = ThetaUtil.DEFAULT_UPDATE_SEED; - boolean estimating = (u > k); UpdateSketch sk1 = UpdateSketch.builder().setFamily(fam_).setSeed(seed).setNominalEntries(k).build(); for (int i=0; i<u; i++) { @@ -191,7 +190,7 @@ public class HeapQuickSelectSketchTest { double sk1est = sk1.getEstimate(); double sk1lb = sk1.getLowerBound(2); double sk1ub = sk1.getUpperBound(2); - assertEquals(sk1.isEstimationMode(), estimating); + assertTrue(sk1.isEstimationMode()); byte[] byteArray = sk1.toByteArray(); Memory mem = Memory.wrap(byteArray); @@ -202,15 +201,14 @@ public class HeapQuickSelectSketchTest { assertEquals(sk2.getLowerBound(2), sk1lb); assertEquals(sk2.getUpperBound(2), sk1ub); assertEquals(sk2.isEmpty(), false); - assertEquals(sk2.isEstimationMode(), estimating); + assertTrue(sk2.isEstimationMode()); assertEquals(sk2.getClass().getSimpleName(), sk1.getClass().getSimpleName()); } @Test public void checkHQStoCompactForms() { int k = 512; - int u = 4*k; - boolean estimating = (u > k); + int u = 4*k; //thus estimating //boolean compact = false; int maxBytes = (k << 4) + (Family.QUICKSELECT.getMinPreLongs() << 3); @@ -237,7 +235,7 @@ public class HeapQuickSelectSketchTest { int uskBytes = usk.getCurrentBytes(); //size stored as UpdateSketch int uskCompBytes = usk.getCompactBytes(); //size stored as CompactSketch assertEquals(uskBytes, maxBytes); - assertEquals(usk.isEstimationMode(), estimating); + assertTrue(usk.isEstimationMode()); CompactSketch comp1, comp2, comp3, comp4; @@ -247,7 +245,7 @@ public class HeapQuickSelectSketchTest { assertEquals(comp1.getLowerBound(2), uskLB); assertEquals(comp1.getUpperBound(2), uskUB); assertEquals(comp1.isEmpty(), false); - assertEquals(comp1.isEstimationMode(), estimating); + assertTrue(comp1.isEstimationMode()); assertEquals(comp1.getCompactBytes(), uskCompBytes); assertEquals(comp1.getClass().getSimpleName(), "HeapCompactSketch"); @@ -257,7 +255,7 @@ public class HeapQuickSelectSketchTest { assertEquals(comp2.getLowerBound(2), uskLB); assertEquals(comp2.getUpperBound(2), uskUB); assertEquals(comp2.isEmpty(), false); - assertEquals(comp2.isEstimationMode(), estimating); + assertTrue(comp2.isEstimationMode()); assertEquals(comp2.getCompactBytes(), uskCompBytes); assertEquals(comp2.getClass().getSimpleName(), "HeapCompactSketch"); @@ -270,7 +268,7 @@ public class HeapQuickSelectSketchTest { assertEquals(comp3.getLowerBound(2), uskLB); assertEquals(comp3.getUpperBound(2), uskUB); assertEquals(comp3.isEmpty(), false); - assertEquals(comp3.isEstimationMode(), estimating); + assertTrue(comp3.isEstimationMode()); assertEquals(comp3.getCompactBytes(), uskCompBytes); assertEquals(comp3.getClass().getSimpleName(), "DirectCompactSketch"); @@ -281,7 +279,7 @@ public class HeapQuickSelectSketchTest { assertEquals(comp4.getLowerBound(2), uskLB); assertEquals(comp4.getUpperBound(2), uskUB); assertEquals(comp4.isEmpty(), false); - assertEquals(comp4.isEstimationMode(), estimating); + assertTrue(comp4.isEstimationMode()); assertEquals(comp4.getCompactBytes(), uskCompBytes); assertEquals(comp4.getClass().getSimpleName(), "DirectCompactSketch"); comp4.toString(false, true, 0, false); --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
