@CombineFunction public static void merge(@AggregationState State state, State other) { NumericHistogram input = other.get(); NumericHistogram previous = state.get(); if (previous == null) { state.set(input); } else { previous.mergeWith(input); } }
@Test public void testMergeSame() { NumericHistogram histogram = new NumericHistogram(10, 3); for (int i = 0; i < 1000; i++) { histogram.add(i); } Map<Double, Double> expected = Maps.transformValues(histogram.getBuckets(), value -> value * 2); histogram.mergeWith(histogram); assertEquals(histogram.getBuckets(), expected); }
@Test public void testMergeDifferent() { NumericHistogram histogram1 = new NumericHistogram(10, 3); NumericHistogram histogram2 = new NumericHistogram(10, 3); for (int i = 0; i < 1000; i++) { histogram1.add(i); histogram2.add(i + 1000); } NumericHistogram expected = new NumericHistogram(10, 1000); for (Map.Entry<Double, Double> entry : histogram1.getBuckets().entrySet()) { expected.add(entry.getKey(), entry.getValue()); } for (Map.Entry<Double, Double> entry : histogram2.getBuckets().entrySet()) { expected.add(entry.getKey(), entry.getValue()); } expected.compact(); histogram1.mergeWith(histogram2); assertEquals(histogram1.getBuckets(), expected.getBuckets()); } }
@CombineFunction public static void merge(State state, State other) { NumericHistogram input = other.get(); NumericHistogram previous = state.get(); if (previous == null) { state.set(input); } else { previous.mergeWith(input); } }
@Test public void testMergeSame() throws Exception { NumericHistogram histogram = new NumericHistogram(10, 3); for (int i = 0; i < 1000; i++) { histogram.add(i); } Map<Double, Double> expected = Maps.transformValues(histogram.getBuckets(), value -> value * 2); histogram.mergeWith(histogram); assertEquals(histogram.getBuckets(), expected); }
@Test public void testMergeDifferent() throws Exception { NumericHistogram histogram1 = new NumericHistogram(10, 3); NumericHistogram histogram2 = new NumericHistogram(10, 3); for (int i = 0; i < 1000; i++) { histogram1.add(i); histogram2.add(i + 1000); } NumericHistogram expected = new NumericHistogram(10, 1000); for (Map.Entry<Double, Double> entry : histogram1.getBuckets().entrySet()) { expected.add(entry.getKey(), entry.getValue()); } for (Map.Entry<Double, Double> entry : histogram2.getBuckets().entrySet()) { expected.add(entry.getKey(), entry.getValue()); } expected.compact(); histogram1.mergeWith(histogram2); assertEquals(histogram1.getBuckets(), expected.getBuckets()); } }