@Override public synchronized Object get() { return union.getResult(); }
@Nullable @Override public DoublesSketch getObject() { return union.getResult(); }
@Override public synchronized Object get(final ByteBuffer buffer, final int position) { return unions.get(buffer).get(position).getResult(); }
@Override protected DoublesUnion _apply(final DoublesUnion a, final DoublesUnion b) { a.update(b.getResult()); return a; } }
@Override public byte[] serialise(final DoublesUnion union) throws SerialisationException { return union.getResult().toByteArray(); }
@Override protected Double getTestValue(final DoublesUnion object) { return object.getResult().getQuantile(0.5D); // assertEquals(quantile1, unionDeserialised.getResult().getQuantile(0.5D), DELTA); }
@Override protected DoublesSketch _apply(final DoublesSketch a, final DoublesSketch b) { final DoublesUnion union = DoublesUnion.builder().setMaxK(a.getK()).build(); union.update(a); union.update(b); return union.getResult(); } }
@Test public void testAggregate() { final DoublesUnionAggregator unionAggregator = new DoublesUnionAggregator(); DoublesUnion currentState = union1; assertEquals(3L, currentState.getResult().getN()); assertEquals(2.0D, currentState.getResult().getQuantile(0.5D), DELTA); currentState = unionAggregator.apply(currentState, union2); assertEquals(7L, currentState.getResult().getN()); assertEquals(4.0D, currentState.getResult().getQuantile(0.5D), DELTA); }
@Test public void testIt() { java.nio.ByteBuffer bb = java.nio.ByteBuffer.allocate(1<<20).order(ByteOrder.nativeOrder()); WritableMemory mem = WritableMemory.wrap(bb); int k = 1024; DoublesSketch qsk = new DoublesSketchBuilder().setK(k).build(); DoublesUnion u1 = DoublesUnion.heapify(qsk); u1.getResult().putMemory(mem); DoublesUnion u2 = DoublesUnion.heapify(mem); DoublesSketch qsk2 = u2.getResult(); assertTrue(qsk2.isEmpty()); }
@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 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 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 checkUnion6Direct() { final int k1 = 8; final int n1 = 2 * k1; //16 final int k2 = 16; final int n2 = 2 * k2; //32 final DoublesSketch sk1 = buildAndLoadDQS(k1, n1, 0); final DoublesSketch sk2 = buildAndLoadDQS(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)); }
@Test public void checkMerge() { int k = PreambleUtil.DEFAULT_K; int n = 1000000; DoublesSketch qs1 = buildAndLoadQS(k,n,0); DoublesSketch qs2 = buildAndLoadQS(k,0,0); //empty DoublesUnion union = DoublesUnion.heapify(qs2); union.update(qs1); DoublesSketch result = union.getResult(); double med1 = qs1.getQuantile(0.5); double med2 = result.getQuantile(0.5); assertEquals(med1, med2, 0.0); //println(med1+","+med2); }
@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 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 checkUnionUpdateLogic2() { DoublesSketch qs1 = DoublesSketch.builder().build(); final DoublesSketch qs2 = DoublesSketch.builder().build(); final DoublesUnion union = DoublesUnion.builder().build(); union.update(qs1); union.update(qs2); //case 5 qs1 = buildAndLoadQS(128, 1000); union.update(qs1); union.update(qs2); //case 9 final DoublesSketch result = union.getResult(); //println(union.toString(true, true)); assertEquals(result.getMaxValue(), 1000.0, 0.0); assertEquals(result.getMinValue(), 1.0, 0.0); }