@Override protected ItemsUnion<String> _apply(final ItemsUnion<String> a, final ItemsUnion<String> b) { a.update(b.getResult()); return a; } }
@Test public void sameK() { final ItemsUnion<Long> union = ItemsUnion.getInstance(128, Comparator.naturalOrder()); ItemsSketch<Long> result = union.getResult(); Assert.assertEquals(result.getN(), 0); Assert.assertNull(result.getMinValue()); result = union.getResult(); Assert.assertEquals(result.getN(), 1000); Assert.assertEquals(result.getMinValue(), Long.valueOf(1)); for (int i = 1001; i <= 2000; i++) { sketch1.update((long) i); } union.update(sketch1); result = union.getResult(); Assert.assertEquals(result.getN(), 2000); Assert.assertEquals(result.getMinValue(), Long.valueOf(1)); Assert.assertEquals(result.getQuantile(0.5), 1500, 51); // ~1.7% normalized rank error result = union.getResult(); Assert.assertEquals(result.getN(), 0); Assert.assertNull(result.getMinValue());
@Override public byte[] serialise(final ItemsUnion<String> union) throws SerialisationException { return union.getResult().toByteArray(SERIALISER); }
@Test public void differentK() { final ItemsUnion<Long> union = ItemsUnion.getInstance(512, Comparator.naturalOrder()); ItemsSketch<Long> result = union.getResult(); Assert.assertEquals(result.getN(), 0); Assert.assertNull(result.getMinValue()); result = union.getResult(); Assert.assertEquals(result.getK(), 512); Assert.assertEquals(result.getN(), 10000); for (int i = 10001; i <= 20000; i++) { sketch1.update((long) i); } union.update(sketch1); result = union.getResult(); Assert.assertEquals(result.getK(), 256); Assert.assertEquals(result.getN(), 20000); Assert.assertEquals(result.getQuantile(0.5), 15000, 510); // ~1.7% normalized rank error result = union.getResult(); Assert.assertEquals(result.getN(), 0); Assert.assertNull(result.getMinValue());
@Override protected ItemsSketch<String> _apply(final ItemsSketch<String> a, final ItemsSketch<String> b) { final ItemsUnion<String> union = ItemsUnion.getInstance(Ordering.<String>natural()); union.update(a); union.update(b); return union.getResult(); } }
ItemsSketch<Integer> result = union.getResult(); Assert.assertTrue(result.isEmpty()); Assert.assertEquals(result.getN(), 0); Assert.assertEquals(union.getMaxK(), DEFAULT_K); Assert.assertEquals(union.getEffectiveK(), DEFAULT_K); result = union.getResult(); Assert.assertTrue(result.isEmpty()); Assert.assertEquals(result.getN(), 0); result = union.getResult(); Assert.assertTrue(result.isEmpty()); Assert.assertEquals(result.getN(), 0); result = union.getResult(); Assert.assertTrue(result.isEmpty()); Assert.assertEquals(result.getN(), 0); result = union.getResult(); Assert.assertTrue(result.isEmpty()); Assert.assertEquals(result.getN(), 0);
@Override protected String getTestValue(final ItemsUnion<String> object) { return object.getResult().getQuantile(0.5D); }
@Test public void testAggregate() { final StringsUnionAggregator unionAggregator = new StringsUnionAggregator(); ItemsUnion<String> currentState = union1; assertEquals(3L, currentState.getResult().getN()); assertEquals("2", currentState.getResult().getQuantile(0.5D)); currentState = unionAggregator.apply(currentState, union2); assertEquals(7L, currentState.getResult().getN()); assertEquals("4", currentState.getResult().getQuantile(0.5D)); }
@Test public void differentSmallerK() { final ItemsUnion<Long> union = ItemsUnion.getInstance(128, Comparator.naturalOrder()); final ItemsSketch<Long> sketch1 = ItemsSketch.getInstance(64, Comparator.naturalOrder()); union.update(sketch1); Assert.assertEquals(union.getResult().getK(), 64); sketch1.update(1L); union.update(sketch1); Assert.assertEquals(union.getResult().getK(), 64); }
@Test public void differentLargerK() { final ItemsUnion<Long> union = ItemsUnion.getInstance(128, Comparator.naturalOrder()); final ItemsSketch<Long> sketch1 = ItemsSketch.getInstance(256, Comparator.naturalOrder()); union.update(sketch1); Assert.assertEquals(union.getResult().getK(), 128); sketch1.update(1L); union.update(sketch1); Assert.assertEquals(union.getResult().getK(), 128); }
@Test public void meNullOtherEstBiggerSmaller() { final ItemsUnion<Long> union = ItemsUnion.getInstance(16, Comparator.naturalOrder()); //me null ItemsSketch<Long> skEst = buildIS(32, 64); //other is bigger, est union.update(skEst); Assert.assertEquals(union.getResult().getMinValue(), skEst.getMinValue(), 0.0); Assert.assertEquals(union.getResult().getMaxValue(), skEst.getMaxValue(), 0.0); union.reset(); skEst = buildIS(8, 64); //other is smaller est, union.update(skEst); Assert.assertEquals(union.getResult().getMinValue(), skEst.getMinValue(), 0.0); Assert.assertEquals(union.getResult().getMaxValue(), skEst.getMaxValue(), 0.0); }
@Test public void meEmptyOtherEstBiggerSmaller() { final ItemsUnion<Long> union = ItemsUnion.getInstance(16, Comparator.naturalOrder()); //me null final ItemsSketch<Long> skEmpty = ItemsSketch.getInstance(64, Comparator.naturalOrder()); union.update(skEmpty); //empty at k = 16 ItemsSketch<Long> skExact = buildIS(32, 64); //bigger, est union.update(skExact); Assert.assertEquals(union.getResult().getMinValue(), skExact.getMinValue(), 0.0); Assert.assertEquals(union.getResult().getMaxValue(), skExact.getMaxValue(), 0.0); union.reset(); union.update(skEmpty); //empty at k = 16 skExact = buildIS(8, 16); //smaller, est union.update(skExact); Assert.assertEquals(union.getResult().getMinValue(), skExact.getMinValue(), 0.0); Assert.assertEquals(union.getResult().getMaxValue(), skExact.getMaxValue(), 0.0); }
@Test public void nullAndEmptyInputsToNonEmptyUnion() { final ItemsUnion<Integer> union = ItemsUnion.getInstance(128, Comparator.naturalOrder()); union.update(1); ItemsSketch<Integer> result = union.getResult(); Assert.assertFalse(result.isEmpty()); Assert.assertEquals(result.getN(), 1); Assert.assertEquals(result.getMinValue(), Integer.valueOf(1)); Assert.assertEquals(result.getMaxValue(), Integer.valueOf(1)); union.update((ItemsSketch<Integer>) null); result = union.getResult(); Assert.assertFalse(result.isEmpty()); Assert.assertEquals(result.getN(), 1); Assert.assertEquals(result.getMinValue(), Integer.valueOf(1)); Assert.assertEquals(result.getMaxValue(), Integer.valueOf(1)); union.update(ItemsSketch.getInstance(Comparator.naturalOrder())); result = union.getResult(); Assert.assertFalse(result.isEmpty()); Assert.assertEquals(result.getN(), 1); Assert.assertEquals(result.getMinValue(), Integer.valueOf(1)); Assert.assertEquals(result.getMaxValue(), Integer.valueOf(1)); }
@Test public void meEmptyOtherExactBiggerSmaller() { final ItemsUnion<Long> union = ItemsUnion.getInstance(16, Comparator.naturalOrder()); //me null final ItemsSketch<Long> skEmpty = ItemsSketch.getInstance(64, Comparator.naturalOrder()); union.update(skEmpty); //empty at k = 16 ItemsSketch<Long> skExact = buildIS(32, 63); //bigger, exact union.update(skExact); Assert.assertEquals(union.getResult().getMinValue(), skExact.getMinValue(), 0.0); Assert.assertEquals(union.getResult().getMaxValue(), skExact.getMaxValue(), 0.0); union.reset(); union.update(skEmpty); //empty at k = 16 skExact = buildIS(8, 15); //smaller, exact union.update(skExact); Assert.assertEquals(union.getResult().getMinValue(), skExact.getMinValue(), 0.0); Assert.assertEquals(union.getResult().getMaxValue(), skExact.getMaxValue(), 0.0); }
@Test public void meNullOtherExactBiggerSmaller() { final ItemsUnion<Long> union = ItemsUnion.getInstance(16, Comparator.naturalOrder()); //me null ItemsSketch<Long> skExact = buildIS(32, 31); //other is bigger, exact union.update(skExact); println(skExact.toString(true, true)); println(union.toString(true, true)); Assert.assertEquals(skExact.getQuantile(0.5), union.getResult().getQuantile(0.5), 0.0); union.reset(); skExact = buildIS(8, 15); //other is smaller exact, union.update(skExact); println(skExact.toString(true, true)); println(union.toString(true, true)); Assert.assertEquals(skExact.getQuantile(0.5), union.getResult().getQuantile(0.5), 0.0); }
@Override protected ItemsUnion<String> _apply(final ItemsUnion<String> a, final ItemsUnion<String> b) { a.update(b.getResult()); return a; } }
@Override public byte[] serialise(final ItemsUnion<String> union) throws SerialisationException { return union.getResult().toByteArray(SERIALISER); }
@Override protected ItemsSketch<String> _apply(final ItemsSketch<String> a, final ItemsSketch<String> b) { final ItemsUnion<String> union = ItemsUnion.getInstance(Ordering.<String>natural()); union.update(a); union.update(b); return union.getResult(); } }