@Test public void serialVersion1Compatibility() throws Exception { byte[] bytes = TestUtil.readBytesFromFile(getClass().getClassLoader() .getResource("UpdatableSketchWithDoubleSummary4K_serialVersion1.bin").getFile()); UpdatableSketch<Double, DoubleSummary> sketch = Sketches.heapifyUpdatableSketch( Memory.wrap(bytes), new DoubleSummaryDeserializer(), new DoubleSummaryFactory()); Assert.assertTrue(sketch.isEstimationMode()); Assert.assertEquals(sketch.getEstimate(), 8192, 8192 * 0.99); Assert.assertEquals(sketch.getRetainedEntries(), 4096); int count = 0; SketchIterator<DoubleSummary> it = sketch.iterator(); while (it.next()) { Assert.assertEquals(it.getSummary().getValue(), 10.0); count++; } Assert.assertEquals(count, 4096); }
@Test public void isEmpty() { UpdatableSketch<Double, DoubleSummary> sketch = new UpdatableSketchBuilder<>(new DoubleSummaryFactory()).build(); Assert.assertTrue(sketch.isEmpty()); Assert.assertFalse(sketch.isEstimationMode()); Assert.assertEquals(sketch.getEstimate(), 0.0); Assert.assertEquals(sketch.getUpperBound(1), 0.0); Assert.assertEquals(sketch.getLowerBound(1), 0.0); Assert.assertEquals(sketch.getThetaLong(), Long.MAX_VALUE); Assert.assertEquals(sketch.getTheta(), 1.0); Assert.assertNotNull(sketch.toString()); SketchIterator<DoubleSummary> it = sketch.iterator(); Assert.assertNotNull(it); Assert.assertFalse(it.next()); }
@Test public void doubleSummaryDefaultSumMode() { UpdatableSketch<Double, DoubleSummary> sketch = new UpdatableSketchBuilder<>( new DoubleSummaryFactory()).build(); { sketch.update(1, 1.0); Assert.assertEquals(sketch.getRetainedEntries(), 1); SketchIterator<DoubleSummary> it = sketch.iterator(); Assert.assertTrue(it.next()); Assert.assertEquals(it.getSummary().getValue(), 1.0); Assert.assertFalse(it.next()); } { sketch.update(1, 0.7); Assert.assertEquals(sketch.getRetainedEntries(), 1); SketchIterator<DoubleSummary> it = sketch.iterator(); Assert.assertTrue(it.next()); Assert.assertEquals(it.getSummary().getValue(), 1.7); Assert.assertFalse(it.next()); } { sketch.update(1, 0.8); Assert.assertEquals(sketch.getRetainedEntries(), 1); SketchIterator<DoubleSummary> it = sketch.iterator(); Assert.assertTrue(it.next()); Assert.assertEquals(it.getSummary().getValue(), 2.5); Assert.assertFalse(it.next()); } }
@Test public void doubleSummaryMaxMode() { UpdatableSketch<Double, DoubleSummary> sketch = new UpdatableSketchBuilder<>( new DoubleSummaryFactory(DoubleSummary.Mode.Max)).build(); { sketch.update(1, 1.0); Assert.assertEquals(sketch.getRetainedEntries(), 1); SketchIterator<DoubleSummary> it = sketch.iterator(); Assert.assertTrue(it.next()); Assert.assertEquals(it.getSummary().getValue(), 1.0); Assert.assertFalse(it.next()); } { sketch.update(1, 0.7); Assert.assertEquals(sketch.getRetainedEntries(), 1); SketchIterator<DoubleSummary> it = sketch.iterator(); Assert.assertTrue(it.next()); Assert.assertEquals(it.getSummary().getValue(), 1.0); Assert.assertFalse(it.next()); } { sketch.update(1, 2.0); Assert.assertEquals(sketch.getRetainedEntries(), 1); SketchIterator<DoubleSummary> it = sketch.iterator(); Assert.assertTrue(it.next()); Assert.assertEquals(it.getSummary().getValue(), 2.0); Assert.assertFalse(it.next()); } }
SketchIterator<DoubleSummary> it = sketch.iterator(); Assert.assertTrue(it.next()); Assert.assertEquals(it.getSummary().getValue(), 1.0); SketchIterator<DoubleSummary> it = sketch.iterator(); Assert.assertTrue(it.next()); Assert.assertEquals(it.getSummary().getValue(), 0.7); SketchIterator<DoubleSummary> it = sketch.iterator(); Assert.assertTrue(it.next()); Assert.assertEquals(it.getSummary().getValue(), 0.7);
SketchIterator<DoubleSummary> it = sketch.iterator(); while (it.next()) { Assert.assertEquals(it.getSummary().getValue(), 1.0);
SketchIterator<DoubleSummary> it = sketch.iterator(); while (it.next()) { Assert.assertEquals(it.getSummary().getValue(), 1.0);
@Test public void serializeDeserializeExact() throws Exception { UpdatableSketch<Double, DoubleSummary> sketch1 = new UpdatableSketchBuilder<>(new DoubleSummaryFactory()).build(); sketch1.update(1, 1.0); UpdatableSketch<Double, DoubleSummary> sketch2 = Sketches.heapifyUpdatableSketch( Memory.wrap(sketch1.toByteArray()), new DoubleSummaryDeserializer(), new DoubleSummaryFactory()); Assert.assertEquals(sketch2.getEstimate(), 1.0); SketchIterator<DoubleSummary> it = sketch2.iterator(); Assert.assertTrue(it.next()); Assert.assertEquals(it.getSummary().getValue(), 1.0); Assert.assertFalse(it.next()); // the same key, so still one unique sketch2.update(1, 1.0); Assert.assertEquals(sketch2.getEstimate(), 1.0); sketch2.update(2, 1.0); Assert.assertEquals(sketch2.getEstimate(), 2.0); }