@Test public void doubleSum() { ArrayOfDoublesUpdatableSketch sketch = new ArrayOfDoublesUpdatableSketchBuilder().build(); sketch.update(1, new double[] {1.0}); Assert.assertEquals(sketch.getRetainedEntries(), 1); Assert.assertEquals(sketch.getValues()[0][0], 1.0); sketch.update(1, new double[] {0.7}); Assert.assertEquals(sketch.getRetainedEntries(), 1); Assert.assertEquals(sketch.getValues()[0][0], 1.7); sketch.update(1, new double[] {0.8}); Assert.assertEquals(sketch.getRetainedEntries(), 1); Assert.assertEquals(sketch.getValues()[0][0], 2.5); }
@Test public void doubleSum() { ArrayOfDoublesUpdatableSketch sketch = new ArrayOfDoublesUpdatableSketchBuilder(). build(WritableMemory.wrap(new byte[1000000])); sketch.update(1, new double[] {1.0}); Assert.assertEquals(sketch.getRetainedEntries(), 1); Assert.assertEquals(sketch.getValues()[0][0], 1.0); sketch.update(1, new double[] {0.7}); Assert.assertEquals(sketch.getRetainedEntries(), 1); Assert.assertEquals(sketch.getValues()[0][0], 1.7); sketch.update(1, new double[] {0.8}); Assert.assertEquals(sketch.getRetainedEntries(), 1); Assert.assertEquals(sketch.getValues()[0][0], 2.5); }
@Test public void serializeDeserializeExact() { ArrayOfDoublesUpdatableSketch sketch1 = new ArrayOfDoublesUpdatableSketchBuilder().build(); sketch1.update(1, new double[] {1.0}); ArrayOfDoublesUpdatableSketch sketch2 = ArrayOfDoublesUpdatableSketch.heapify(WritableMemory.wrap(sketch1.toByteArray())); Assert.assertEquals(sketch2.getEstimate(), 1.0); double[][] values = sketch2.getValues(); Assert.assertEquals(values.length, 1); Assert.assertEquals(values[0][0], 1.0); // the same key, so still one unique sketch2.update(1, new double[] {1.0}); Assert.assertEquals(sketch2.getEstimate(), 1.0); sketch2.update(2, new double[] {1.0}); Assert.assertEquals(sketch2.getEstimate(), 2.0); }
@Test public void serializeDeserializeExact() throws Exception { ArrayOfDoublesUpdatableSketch sketch1 = new ArrayOfDoublesUpdatableSketchBuilder(). build(WritableMemory.wrap(new byte[1000000])); sketch1.update(1, new double[] {1.0}); ArrayOfDoublesUpdatableSketch sketch2 = ArrayOfDoublesUpdatableSketch.wrap(WritableMemory.wrap(sketch1.toByteArray())); Assert.assertEquals(sketch2.getEstimate(), 1.0); double[][] values = sketch2.getValues(); Assert.assertEquals(values.length, 1); Assert.assertEquals(values[0][0], 1.0); // the same key, so still one unique sketch2.update(1, new double[] {1.0}); Assert.assertEquals(sketch2.getEstimate(), 1.0); sketch2.update(2, new double[] {1.0}); Assert.assertEquals(sketch2.getEstimate(), 2.0); }
Assert.assertEquals(sketch.getTheta(), 1.0); double[][] values = sketch.getValues(); Assert.assertEquals(values.length, 4096); int count = 0;
Assert.assertEquals(sketch.getRetainedEntries(), 4096); double[][] values = sketch.getValues(); int count = 0; for (double[] array: values) {
Assert.assertTrue(sketch.getEstimate() < sketch.getUpperBound(1)); double[][] values = sketch.getValues(); Assert.assertTrue(values.length >= 4096); int count = 0;
Assert.assertEquals(sketch.getTheta(), 1.0); double[][] values = sketch.getValues(); Assert.assertEquals(values.length, 4096); int count = 0;
@Test public void heapToDirectExactTwoDoubles() { double[] valuesArr = {1.0, 2.0}; ArrayOfDoublesUpdatableSketch sketch1 = new ArrayOfDoublesUpdatableSketchBuilder().setNumberOfValues(2).build(); sketch1.update("a", valuesArr); sketch1.update("b", valuesArr); sketch1.update("c", valuesArr); sketch1.update("d", valuesArr); sketch1.update("a", valuesArr); noopUpdates(sketch1, valuesArr); ArrayOfDoublesUpdatableSketch sketch2 = ArrayOfDoublesUpdatableSketch.wrap(WritableMemory.wrap(sketch1.toByteArray())); sketch2.update("b", valuesArr); sketch2.update("c", valuesArr); sketch2.update("d", valuesArr); Assert.assertFalse(sketch2.isEmpty()); Assert.assertFalse(sketch2.isEstimationMode()); Assert.assertEquals(sketch2.getEstimate(), 4.0); Assert.assertEquals(sketch2.getUpperBound(1), 4.0); Assert.assertEquals(sketch2.getLowerBound(1), 4.0); Assert.assertEquals(sketch2.getThetaLong(), Long.MAX_VALUE); Assert.assertEquals(sketch2.getTheta(), 1.0); double[][] values = sketch2.getValues(); Assert.assertEquals(values.length, 4); for (double[] array: values) { Assert.assertEquals(array.length, 2); Assert.assertEquals(array[0], 2.0); Assert.assertEquals(array[1], 4.0); } }
Assert.assertEquals(sketch2.getThetaLong(), Long.MAX_VALUE); Assert.assertEquals(sketch2.getTheta(), 1.0); double[][] values = sketch2.getValues(); Assert.assertEquals(values.length, 4); for (double[] array: values) {