@Override public synchronized void aggregate() { final DoublesSketch sketch = selector.getObject(); if (sketch == null) { return; } union.update(sketch); }
@Override public void fold(final ColumnValueSelector selector) { final DoublesSketch sketch = (DoublesSketch) selector.getObject(); union.update(sketch); }
@Override protected DoublesUnion _apply(final DoublesUnion a, final DoublesUnion b) { a.update(b.getResult()); return a; } }
@Override public synchronized void aggregate(final ByteBuffer buffer, final int position) { final DoublesSketch sketch = selector.getObject(); if (sketch == null) { return; } final DoublesUnion union = unions.get(buffer).get(position); union.update(sketch); }
@Override public DoublesUnion deserialise(final byte[] bytes) throws SerialisationException { final DoublesUnion union = DoublesUnion.builder().build(); union.update(WritableMemory.wrap(bytes)); return union; }
@Test public void checkUnionNulls() { final DoublesUnion union = DoublesUnionImpl.heapInstance(128); final DoublesSketch sk1 = union.getResultAndReset(); final DoublesSketch sk2 = union.getResultAndReset(); assertNull(sk1); assertNull(sk2); union.update(sk2); final DoublesSketch sk3 = union.getResultAndReset(); assertNull(sk3); }
@Test public void updateWithDoubleValueOnly() { final DoublesUnion union = DoublesUnion.builder().build(); union.update(123.456); final DoublesSketch qs = union.getResultAndReset(); assertEquals(qs.getN(), 1); }
@Test public void checkUnion7Direct() { final DoublesUnion union = DoublesUnionImpl.heapInstance(16); final DoublesSketch skEst = buildAndLoadDQS(32, 64); //other is bigger, est union.update(skEst); final DoublesSketch result = union.getResult(); assertEquals(result.getMaxValue(), 64, 0.0); assertEquals(result.getMinValue(), 1.0, 0.0); // println(skEst.toString(true, true)); // println(union.toString(true, true)); }
@Test public void checkReverseMerge() { int k = PreambleUtil.DEFAULT_K; DoublesSketch qs1 = buildAndLoadQS(k, 1000, 0); DoublesSketch qs2 = buildAndLoadQS(2*k,1000, 1000); DoublesUnion union = DoublesUnion.heapify(qs2); union.update(qs1); //attempt merge into larger k DoublesSketch result = union.getResult(); assertEquals(result.getK(), k); }
@Test public void differentLargerK() { final DoublesUnion union = DoublesUnion.builder().setMaxK(128).build(); final UpdateDoublesSketch sketch1 = buildAndLoadQS(256, 0); union.update(sketch1); Assert.assertEquals(union.getResult().getK(), 128); sketch1.update(1.0); union.update(sketch1); Assert.assertEquals(union.getResult().getK(), 128); }
@Test public void differentLargerKDirect() { final DoublesUnion union = DoublesUnion.builder().setMaxK(128).build(); final UpdateDoublesSketch sketch1 = buildAndLoadDQS(256, 0); union.update(sketch1); Assert.assertEquals(union.getResult().getK(), 128); sketch1.update(1.0); union.update(sketch1); Assert.assertEquals(union.getResult().getK(), 128); }
@Test public void mergeTest() { DoublesSketch dqs1 = buildAndLoadDQS(128, 256); DoublesSketch dqs2 = buildAndLoadDQS(128, 256, 256); DoublesUnion union = DoublesUnion.builder().setMaxK(128).build(); union.update(dqs1); union.update(dqs2); DoublesSketch result = union.getResult(); double median = result.getQuantile(0.5); println("Median: " + median); assertEquals(median, 258.0, .05 * 258); }
@Test public void checkUnion7() { final DoublesUnion union = DoublesUnionImpl.heapInstance(16); final DoublesSketch skEst = buildAndLoadQS(32, 64); //other is bigger, est union.update(skEst); println(skEst.toString(true, true)); println(union.toString(true, true)); final DoublesSketch result = union.getResult(); assertEquals(result.getMaxValue(), 64, 0.0); assertEquals(result.getMinValue(), 1.0, 0.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 checkUnion6() { final int k1 = 8; final int n1 = 2 * k1; //16 final int k2 = 16; final int n2 = 2 * k2; //32 final DoublesSketch sk1 = buildAndLoadQS(k1, n1, 0); final DoublesSketch sk2 = buildAndLoadQS(k2, n2, n1); final DoublesUnion union = DoublesUnionImpl.heapifyInstance(sk1); union.update(sk2); final DoublesSketch result = union.getResult(); assertEquals(result.getMaxValue(), n1 + n2, 0.0); assertEquals(result.getMinValue(), 1.0, 0.0); println("\nFinal" + union.getResult().toString(true, true)); }