summaryrefslogtreecommitdiffstats
path: root/eval/src/tests/eval/aggr/aggr_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'eval/src/tests/eval/aggr/aggr_test.cpp')
-rw-r--r--eval/src/tests/eval/aggr/aggr_test.cpp28
1 files changed, 28 insertions, 0 deletions
diff --git a/eval/src/tests/eval/aggr/aggr_test.cpp b/eval/src/tests/eval/aggr/aggr_test.cpp
index b1da9704bfc..603fdb508e2 100644
--- a/eval/src/tests/eval/aggr/aggr_test.cpp
+++ b/eval/src/tests/eval/aggr/aggr_test.cpp
@@ -5,6 +5,7 @@
using vespalib::Stash;
using namespace vespalib::eval;
+using namespace vespalib::eval::aggr;
TEST("require that aggregator list returns appropriate entries") {
auto list = Aggregator::list();
@@ -83,4 +84,31 @@ TEST("require that MIN aggregator works as expected") {
aggr.next(200.0), EXPECT_EQUAL(aggr.result(), 100.0);
}
+template <template <typename T> typename A>
+float aggr_merge(const std::vector<float> &a, const std::vector<float> &b) {
+ A<float> aggr0;
+ A<float> aggr1;
+ A<float> aggr2;
+ A<float> aggr3;
+ for (float v: a) {
+ aggr1.sample(v);
+ }
+ for (float v: b) {
+ aggr2.sample(v);
+ }
+ aggr0.merge(aggr1);
+ aggr2.merge(aggr3);
+ aggr0.merge(aggr2);
+ return aggr0.result();
+}
+
+TEST("require that aggregator merge works") {
+ EXPECT_EQUAL(aggr_merge<Avg>({1,2},{3,4}), 2.5);
+ EXPECT_EQUAL(aggr_merge<Count>({1,2},{3,4}), 4.0);
+ EXPECT_EQUAL(aggr_merge<Prod>({1,2},{3,4}), 24.0);
+ EXPECT_EQUAL(aggr_merge<Sum>({1,2},{3,4}), 10.0);
+ EXPECT_EQUAL(aggr_merge<Max>({1,2},{3,4}), 4.0);
+ EXPECT_EQUAL(aggr_merge<Min>({1,2},{3,4}), 1.0);
+}
+
TEST_MAIN() { TEST_RUN_ALL(); }