@Override public byte[] serialise(final DoublesUnion union) throws SerialisationException { return union.getResult().toByteArray(); }
sketchData.write(StringUtils.encodeBase64String(sketch.toByteArray(true))); sketchData.newLine();
@Override public byte[] toByteArray() { if (gadget_ == null) { return DoublesSketch.builder().setK(maxK_).build().toByteArray(); } return gadget_.toByteArray(); }
@Test(expectedExceptions = SketchesArgumentException.class) public void wrapFromUpdateSketch() { final int k = 4; final int n = 27; final UpdateDoublesSketch qs = HeapUpdateDoublesSketchTest.buildAndLoadQS(k, n); final byte[] qsBytes = qs.toByteArray(); final Memory qsMem = Memory.wrap(qsBytes); DirectCompactDoublesSketch.wrapInstance(qsMem); fail(); }
@Test public void checkKisTwo() { int k = 2; UpdateDoublesSketch qs1 = DoublesSketch.builder().setK(k).build(); double err = qs1.getNormalizedRankError(false); assertTrue(err < 1.0); byte[] arr = qs1.toByteArray(true); //8 assertEquals(arr.length, DoublesSketch.getCompactStorageBytes(k, 0)); qs1.update(1.0); arr = qs1.toByteArray(true); //40 assertEquals(arr.length, DoublesSketch.getCompactStorageBytes(k, 1)); }
@Test public void wrapEmptyUpdateSketch() { final UpdateDoublesSketch s1 = DoublesSketch.builder().build(); final WritableMemory mem = WritableMemory.wrap(ByteBuffer.wrap(s1.toByteArray()).order(ByteOrder.nativeOrder())); final UpdateDoublesSketch s2 = DirectUpdateDoublesSketch.wrapInstance(mem); assertTrue(s2.isEmpty()); assertEquals(s2.getN(), 0); assertTrue(Double.isNaN(s2.getMinValue())); assertTrue(Double.isNaN(s2.getMaxValue())); s2.reset(); // empty: so should be a no-op assertEquals(s2.getN(), 0); }
@Test public void checkKisTwoDeprecated() { int k = 2; UpdateDoublesSketch qs1 = DoublesSketch.builder().setK(k).build(); double err = qs1.getNormalizedRankError(false); assertTrue(err < 1.0); byte[] arr = qs1.toByteArray(true); //8 assertEquals(arr.length, DoublesSketch.getCompactStorageBytes(k, 0)); assertEquals(arr.length, qs1.getCompactStorageBytes()); qs1.update(1.0); arr = qs1.toByteArray(true); //40 assertEquals(arr.length, DoublesSketch.getCompactStorageBytes(k, 1)); assertEquals(arr.length, qs1.getCompactStorageBytes()); }
@Test public void heapifyFromUpdateSketch() { final int k = 4; final int n = 45; final UpdateDoublesSketch qs = buildAndLoadQS(k, n); final byte[] qsBytes = qs.toByteArray(); final Memory qsMem = Memory.wrap(qsBytes); final HeapCompactDoublesSketch compactQs = HeapCompactDoublesSketch.heapifyInstance(qsMem); DoublesSketchTest.testSketchEquality(qs, compactQs); assertNull(compactQs.getMemory()); }
@Test public void heapifyEmptyUpdateSketch() { final UpdateDoublesSketch s1 = DoublesSketch.builder().build(); final Memory mem = Memory.wrap(s1.toByteArray()); DoublesSketch s2 = DoublesSketch.heapify(mem); Assert.assertTrue(s2.isEmpty()); }
@Test public void checkEmptyDirect() { try (WritableDirectHandle wdh = WritableMemory.allocateDirect(1000)) { WritableMemory mem = wdh.get(); UpdateDoublesSketch sketch = DoublesSketch.builder().build(mem); sketch.toByteArray(); //exercises a specific path } }
@Test public void checkToByteArray() { UpdateDoublesSketch ds = DoublesSketch.builder().build(); //k = 128 ds.update(1); ds.update(2); byte[] arr = ds.toByteArray(false); assertEquals(arr.length, ds.getUpdatableStorageBytes()); }
@Test public void heapToDirect() { UpdateDoublesSketch heapSketch = DoublesSketch.builder().build(); for (int i = 0; i < 1000; i++) { heapSketch.update(i); } DoublesSketch directSketch = DoublesSketch.wrap(WritableMemory.wrap(heapSketch.toByteArray(false))); assertEquals(directSketch.getMinValue(), 0.0); assertEquals(directSketch.getMaxValue(), 999.0); assertEquals(directSketch.getQuantile(0.5), 500.0, 4.0); }
@Test public void checkGetStorageBytes2() { int k = PreambleUtil.DEFAULT_K; long v = 1; UpdateDoublesSketch qs = DoublesSketch.builder().setK(k).build(); for (int i = 0; i< 1000; i++) { qs.update(v++); // for (int j = 0; j < 1000; j++) { // qs.update(v++); // } byte[] byteArr = qs.toByteArray(false); assertEquals(byteArr.length, qs.getUpdatableStorageBytes()); } }
@Test(expectedExceptions = SketchesArgumentException.class) public void wrapUnionFromCompact() { UpdateDoublesSketch s1 = DoublesSketch.builder().build(); s1.update(1); s1.update(2); Memory mem = Memory.wrap(s1.toByteArray(true)); DoublesUnion.wrap(mem); fail(); }
@Test public void heapifyCompactSketch() { UpdateDoublesSketch s1 = DoublesSketch.builder().build(); s1.update(1); s1.update(2); Memory mem = Memory.wrap(s1.toByteArray(true)); DoublesSketch s2 = DoublesSketch.heapify(mem); Assert.assertEquals(s2.getMinValue(), 1.0); Assert.assertEquals(s2.getMaxValue(), 2.0); }
@Test public void heapifySparseSketch() { UpdateDoublesSketch s1 = DoublesSketch.builder().build(); s1.update(1); s1.update(2); Memory mem = Memory.wrap(s1.toByteArray(false)); DoublesSketch s2 = DoublesSketch.heapify(mem); Assert.assertEquals(s2.getMinValue(), 1.0); Assert.assertEquals(s2.getMaxValue(), 2.0); }
@Test public void heapifyAndUpdateSparseSketch() { UpdateDoublesSketch s1 = DoublesSketch.builder().build(); s1.update(1); s1.update(2); Memory mem = Memory.wrap(s1.toByteArray(false)); UpdateDoublesSketch s2 = (UpdateDoublesSketch) DoublesSketch.heapify(mem); s2.update(3); Assert.assertEquals(s2.getMinValue(), 1.0); Assert.assertEquals(s2.getMaxValue(), 3.0); }
@Test public void heapifyUnionFromSparse() { UpdateDoublesSketch s1 = DoublesSketch.builder().build(); s1.update(1); s1.update(2); Memory mem = Memory.wrap(s1.toByteArray(false)); DoublesUnion u = DoublesUnion.heapify(mem); u.update(3); DoublesSketch s2 = u.getResult(); Assert.assertEquals(s2.getMinValue(), 1.0); Assert.assertEquals(s2.getMaxValue(), 3.0); }
@Test public void heapifyUnionFromCompact() { UpdateDoublesSketch s1 = DoublesSketch.builder().build(); s1.update(1); s1.update(2); Memory mem = Memory.wrap(s1.toByteArray(true)); DoublesUnion u = DoublesUnion.heapify(mem); u.update(3); DoublesSketch s2 = u.getResult(); Assert.assertEquals(s2.getMinValue(), 1.0); Assert.assertEquals(s2.getMaxValue(), 3.0); }
@Test public void checkToString() { int k = PreambleUtil.DEFAULT_K; int n = 1000000; UpdateDoublesSketch qs = DoublesSketch.builder().setK(k).build(); for (int i=0; i<n; i++) { qs.update(i); } byte[] byteArr = qs.toByteArray(); DoublesSketch.toString(byteArr); println(DoublesSketch.toString(Memory.wrap(byteArr))); }