@Override public DoubleSummary union(final DoubleSummary a, final DoubleSummary b) { final DoubleSummary result = new DoubleSummary(summaryMode_); if (a != null) { result.update(a.getValue()); } if (b != null) { result.update(b.getValue()); } return result; }
@Override public DeserializeResult<DoubleSummary> heapifySummary(final Memory mem) { return DoubleSummary.fromMemory(mem); }
@Test public void serialVersion1Compatibility() throws Exception { byte[] bytes = TestUtil.readBytesFromFile(getClass().getClassLoader() .getResource("CompactSketchWithDoubleSummary4K_serialVersion1.bin").getFile()); Sketch<DoubleSummary> sketch = Sketches.heapifySketch(Memory.wrap(bytes), new DoubleSummaryDeserializer()); 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(), 1.0); count++; } Assert.assertEquals(count, 4096); }
@SuppressWarnings("unchecked") @Override public DoubleSummary copy() { return new DoubleSummary(value_, mode_); }
@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); }
@Override public DoubleSummary newSummary() { return new DoubleSummary(summaryMode_); }
@Test public void updateDoubleSummary() { DoubleSummary ds = new DoubleSummary(); ds.update(1.0); Assert.assertEquals(ds.getValue(), 1.0); }
@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()); } }
/** * Creates an instance of the DoubleSummary given a serialized representation * @param mem Memory object with serialized DoubleSummary * @return DeserializedResult object, which contains a DoubleSummary object and number of bytes * read from the Memory */ public static DeserializeResult<DoubleSummary> fromMemory(final Memory mem) { return new DeserializeResult<DoubleSummary>(new DoubleSummary(mem.getDouble(VALUE_DOUBLE), Mode.values()[mem.getByte(MODE_BYTE)]), SERIALIZED_SIZE_BYTES); }
@Override public DeserializeResult<DoubleSummary> heapifySummary(final Memory mem) { return DoubleSummary.fromMemory(mem); }
@Override public DoubleSummary union(final DoubleSummary a, final DoubleSummary b) { final DoubleSummary result = new DoubleSummary(summaryMode_); if (a != null) { result.update(a.getValue()); } if (b != null) { result.update(b.getValue()); } return result; }
@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()); } }
@SuppressWarnings("unchecked") @Override public DoubleSummary copy() { return new DoubleSummary(value_, mode_); }
SketchIterator<DoubleSummary> it = sketch.iterator(); Assert.assertTrue(it.next()); Assert.assertEquals(it.getSummary().getValue(), 1.0); Assert.assertFalse(it.next()); SketchIterator<DoubleSummary> it = sketch.iterator(); Assert.assertTrue(it.next()); Assert.assertEquals(it.getSummary().getValue(), 0.7); Assert.assertFalse(it.next()); SketchIterator<DoubleSummary> it = sketch.iterator(); Assert.assertTrue(it.next()); Assert.assertEquals(it.getSummary().getValue(), 0.7); Assert.assertFalse(it.next());
@Override public DoubleSummary newSummary() { return new DoubleSummary(summaryMode_); }
@Test public void filledSketchShouldFilterOutElements() { UpdatableSketch<Double, DoubleSummary> sketch = new UpdatableSketchBuilder<>(new DoubleSummaryFactory()).build(); fillSketch(sketch, numberOfElements, 0.0); fillSketch(sketch, 2 * numberOfElements, 1.0); Filter<DoubleSummary> filter = new Filter<>(o -> o.getValue() < 0.5); Sketch<DoubleSummary> filteredSketch = filter.filter(sketch); Assert.assertEquals(filteredSketch.getEstimate(), (double) numberOfElements); Assert.assertEquals(filteredSketch.getThetaLong(), sketch.getThetaLong()); Assert.assertFalse(filteredSketch.isEmpty()); Assert.assertTrue(filteredSketch.getLowerBound(1) <= filteredSketch.getEstimate()); Assert.assertTrue(filteredSketch.getUpperBound(1) >= filteredSketch.getEstimate()); }
/** * Creates an instance of the DoubleSummary given a serialized representation * @param mem Memory object with serialized DoubleSummary * @return DeserializedResult object, which contains a DoubleSummary object and number of bytes * read from the Memory */ public static DeserializeResult<DoubleSummary> fromMemory(final Memory mem) { return new DeserializeResult<DoubleSummary>(new DoubleSummary(mem.getDouble(VALUE_DOUBLE), Mode.values()[mem.getByte(MODE_BYTE)]), SERIALIZED_SIZE_BYTES); }
@Test public void exactModeFromQuickSelectSketch() { UpdatableSketch<Double, DoubleSummary> us = new UpdatableSketchBuilder<>(new DoubleSummaryFactory()).build(); us.update(1, 1.0); us.update(2, 1.0); us.update(3, 1.0); us.update(1, 1.0); us.update(2, 1.0); us.update(3, 1.0); CompactSketch<DoubleSummary> sketch = us.compact(); Assert.assertFalse(sketch.isEmpty()); Assert.assertFalse(sketch.isEstimationMode()); Assert.assertEquals(sketch.getEstimate(), 3.0); Assert.assertEquals(sketch.getLowerBound(1), 3.0); Assert.assertEquals(sketch.getUpperBound(1), 3.0); Assert.assertEquals(sketch.getRetainedEntries(), 3); Assert.assertEquals(sketch.getThetaLong(), Long.MAX_VALUE); Assert.assertEquals(sketch.getTheta(), 1.0); SketchIterator<DoubleSummary> it = sketch.iterator(); int count = 0; while (it.next()) { Assert.assertEquals(it.getSummary().getValue(), 2.0); count++; } Assert.assertEquals(count, 3); }
SketchIterator<DoubleSummary> it = sketch.iterator(); while (it.next()) { Assert.assertEquals(it.getSummary().getValue(), 1.0); count++;
SketchIterator<DoubleSummary> it = sketch.iterator(); while (it.next()) { Assert.assertEquals(it.getSummary().getValue(), 1.0); count++;