@Test public void checkPuts() { long n1 = 1001; UpdateDoublesSketch qsk = buildAndLoadQS(32, (int)n1); long n2 = qsk.getN(); assertEquals(n2, n1); int bbCnt1 = qsk.getBaseBufferCount(); long pat1 = qsk.getBitPattern(); qsk.putBitPattern(pat1 + 1); //corrupt the pattern long pat2 = qsk.getBitPattern(); assertEquals(pat1 + 1, pat2); qsk.putBaseBufferCount(bbCnt1 + 1); //corrupt the bbCount int bbCnt2 = qsk.getBaseBufferCount(); assertEquals(bbCnt1 + 1, bbCnt2); qsk.putN(n1 + 1); //corrupt N long n3 = qsk.getN(); assertEquals(n1 + 1, n3); assertNull(qsk.getMemory()); }
@Test public void checkPutCombinedBuffer() { final int k = PreambleUtil.DEFAULT_K; final int cap = 32 + ((2 * k) << 3); WritableMemory mem = WritableMemory.wrap(new byte[cap]); final UpdateDoublesSketch qs = DoublesSketch.builder().setK(k).build(mem); mem = qs.getMemory(); assertEquals(mem.getCapacity(), cap); assertTrue(qs.isEmpty()); final int n = 16; final double[] data = new double[n]; for (int i = 0; i < n; ++i) { data[i] = i + 1; } qs.putBaseBufferCount(n); qs.putN(n); qs.putCombinedBuffer(data); final double[] combBuf = qs.getCombinedBuffer(); assertEquals(combBuf, data); // shouldn't have changed min/max values assertTrue(Double.isNaN(qs.getMinValue())); assertTrue(Double.isNaN(qs.getMaxValue())); }
s2.putBaseBufferCount(5); fail(); } catch (final SketchesReadOnlyException e) {
@Test public void checkMisc() { int k = PreambleUtil.DEFAULT_K; int n = 48; int cap = 32 + ((2 * k) << 3); WritableMemory mem = WritableMemory.wrap(new byte[cap]); UpdateDoublesSketch qs = DoublesSketch.builder().setK(k).build(mem); mem = qs.getMemory(); assertEquals(mem.getCapacity(), cap); double[] combBuf = qs.getCombinedBuffer(); assertEquals(combBuf.length, 2 * k); qs = buildAndLoadDQS(k, n); qs.update(Double.NaN); int n2 = (int)qs.getN(); assertEquals(n2, n); combBuf = qs.getCombinedBuffer(); assertEquals(combBuf.length, ceilingPowerOf2(n)); // since n < k println(qs.toString(true, true)); qs.reset(); assertEquals(qs.getN(), 0); qs.putBaseBufferCount(0); }