qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH 2/2] Tests for rolling statistics code


From: Dr. David Alan Gilbert (git)
Subject: [Qemu-devel] [PATCH 2/2] Tests for rolling statistics code
Date: Fri, 27 Feb 2015 19:06:52 +0000

From: "Dr. David Alan Gilbert" <address@hidden>

Signed-off-by: Dr. David Alan Gilbert <address@hidden>
---
 tests/Makefile             |   3 +
 tests/test-rolling-stats.c | 161 +++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 164 insertions(+)
 create mode 100644 tests/test-rolling-stats.c

diff --git a/tests/Makefile b/tests/Makefile
index 307035c..2d42eb2 100644
--- a/tests/Makefile
+++ b/tests/Makefile
@@ -72,6 +72,8 @@ check-unit-y += tests/test-qemu-opts$(EXESUF)
 gcov-files-test-qemu-opts-y = qom/test-qemu-opts.c
 check-unit-y += tests/test-write-threshold$(EXESUF)
 gcov-files-test-write-threshold-y = block/write-threshold.c
+check-unit-y += tests/test-rolling-stats$(EXESUF)
+gcov-files-test-rolling-stats = util/rolling-stats.c
 
 check-block-$(CONFIG_POSIX) += tests/qemu-iotests-quick.sh
 
@@ -367,6 +369,7 @@ tests/vhost-user-test$(EXESUF): tests/vhost-user-test.o 
qemu-char.o qemu-timer.o
 tests/qemu-iotests/socket_scm_helper$(EXESUF): 
tests/qemu-iotests/socket_scm_helper.o
 tests/test-qemu-opts$(EXESUF): tests/test-qemu-opts.o libqemuutil.a 
libqemustub.a
 tests/test-write-threshold$(EXESUF): tests/test-write-threshold.o 
$(block-obj-y) libqemuutil.a libqemustub.a
+tests/test-rolling-stats$(EXESUF): tests/test-rolling-stats.o libqemuutil.a 
libqemustub.a
 
 ifeq ($(CONFIG_POSIX),y)
 LIBS += -lutil
diff --git a/tests/test-rolling-stats.c b/tests/test-rolling-stats.c
new file mode 100644
index 0000000..85dc949
--- /dev/null
+++ b/tests/test-rolling-stats.c
@@ -0,0 +1,161 @@
+/*
+ * Test rolling statistics framework
+ *
+ * Copyright 2015 Red Hat, Inc. and/or its affiliates
+ *
+ * Authors:
+ *   Dr. David Alan Gilbert <address@hidden>
+ *
+ * This work is licensed under the terms of the GNU LGPL, version 2 or later.
+ * See the COPYING.LIB file in the top-level directory.
+ *
+ */
+
+#include "qemu-common.h"
+#include "qemu/rolling-stats.h"
+
+static void test_1(void)
+{
+    RStats *r = rstats_init(5, 0.2);
+    char *str;
+    
+    str = rstats_as_pretty_string(r);
+    g_assert_cmpstr(str, ==, "Min/Max: 0, 0 Mean: 0 (Weighted: 0)"
+                             " Count: 0 Values: ");
+    g_free(str);
+    str = rstats_as_json_string(r);
+    g_assert_cmpstr(str, ==, "{ \"min\": 0, \"max\": 0, \"mean\": 0,"
+                             " \"weighted_mean\": 0, \"count\": 0,"
+                             " \"values\": [ ] }");
+    g_free(str);
+
+    rstats_add_value(r, 1.0, 11);
+    str = rstats_as_pretty_string(r);
+    g_assert_cmpstr(str, ==, "Min/Max: 1, 1 Mean: 1 (Weighted: 1)"
+                             " Count: 1 Values: address@hidden");
+    g_free(str);
+    str = rstats_as_json_string(r);
+    g_assert_cmpstr(str, ==, "{ \"min\": 1, \"max\": 1, \"mean\": 1,"
+                             " \"weighted_mean\": 1, \"count\": 1,"
+                             " \"values\": ["
+                             " { \"value\": 1, \"tag\": 11 }"
+                             " ] }");
+    g_free(str);
+
+    rstats_add_value(r, 2.0, 22);
+    str = rstats_as_pretty_string(r);
+    g_assert_cmpstr(str, ==, "Min/Max: 1, 2 Mean: 1.5 (Weighted: 1.8)"
+                             " Count: 2 Values: address@hidden, 
address@hidden");
+    g_free(str);
+    str = rstats_as_json_string(r);
+    g_assert_cmpstr(str, ==, "{ \"min\": 1, \"max\": 2, \"mean\": 1.5,"
+                             " \"weighted_mean\": 1.8, \"count\": 2,"
+                             " \"values\": ["
+                             " { \"value\": 1, \"tag\": 11 },"
+                             " { \"value\": 2, \"tag\": 22 }"
+                             " ] }");
+    g_free(str);
+
+    rstats_add_value(r, -1.5, 33);
+    str = rstats_as_pretty_string(r);
+    g_assert_cmpstr(str, ==, "Min/Max: -1.5, 2 Mean: 0.5 (Weighted: -0.84)"
+                             " Count: 3 Values: address@hidden, 
address@hidden, address@hidden");
+    g_free(str);
+    str = rstats_as_json_string(r);
+    g_assert_cmpstr(str, ==, "{ \"min\": -1.5, \"max\": 2, \"mean\": 0.5,"
+                             " \"weighted_mean\": -0.84, \"count\": 3,"
+                             " \"values\": ["
+                             " { \"value\": 1, \"tag\": 11 },"
+                             " { \"value\": 2, \"tag\": 22 },"
+                             " { \"value\": -1.5, \"tag\": 33 }"
+                             " ] }");
+    g_free(str);
+
+    rstats_add_value(r, 0.5, 44);
+    str = rstats_as_pretty_string(r);
+    g_assert_cmpstr(str, ==, "Min/Max: -1.5, 2 Mean: 0.5 (Weighted: 0.232)"
+                             " Count: 4 Values: address@hidden, 
address@hidden, address@hidden, address@hidden");
+    g_free(str);
+    str = rstats_as_json_string(r);
+    g_assert_cmpstr(str, ==, "{ \"min\": -1.5, \"max\": 2,"
+                             " \"mean\": 0.5,"
+                             " \"weighted_mean\": 0.232, \"count\": 4,"
+                             " \"values\": ["
+                             " { \"value\": 1, \"tag\": 11 },"
+                             " { \"value\": 2, \"tag\": 22 },"
+                             " { \"value\": -1.5, \"tag\": 33 },"
+                             " { \"value\": 0.5, \"tag\": 44 }"
+                             " ] }");
+    g_free(str);
+
+
+    rstats_add_value(r, 1000.123, 55);
+    str = rstats_as_pretty_string(r);
+    g_assert_cmpstr(str, ==, "Min/Max: -1.5, 1000.123 Mean: 200.4246"
+                             " (Weighted: 800.1448)"
+                             " Count: 5 Values: address@hidden, 
address@hidden, address@hidden, address@hidden"
+                             ", address@hidden");
+    g_free(str);
+    str = rstats_as_json_string(r);
+    g_assert_cmpstr(str, ==, "{ \"min\": -1.5, \"max\": 1000.123,"
+                             " \"mean\": 200.4246,"
+                             " \"weighted_mean\": 800.1448, \"count\": 5,"
+                             " \"values\": ["
+                             " { \"value\": 1, \"tag\": 11 },"
+                             " { \"value\": 2, \"tag\": 22 },"
+                             " { \"value\": -1.5, \"tag\": 33 },"
+                             " { \"value\": 0.5, \"tag\": 44 },"
+                             " { \"value\": 1000.123, \"tag\": 55 }"
+                             " ] }");
+    g_free(str);
+
+    /*
+     * We've got 5 spaces in the value array and this is the 6th value,
+     * so we start to overwrite.
+     */
+    rstats_add_value(r, 10, 66);
+    str = rstats_as_pretty_string(r);
+    g_assert_cmpstr(str, ==, "Min/Max: -1.5, 1000.123 Mean: 202.2246"
+                             " (Weighted: 168.02896)"
+                             " Count: 6 Values: address@hidden, 
address@hidden, address@hidden"
+                             ", address@hidden, address@hidden");
+    g_free(str);
+    str = rstats_as_json_string(r);
+    g_assert_cmpstr(str, ==, "{ \"min\": -1.5, \"max\": 1000.123,"
+                             " \"mean\": 202.2246,"
+                             " \"weighted_mean\": 168.02896, \"count\": 6,"
+                             " \"values\": ["
+                             " { \"value\": 2, \"tag\": 22 },"
+                             " { \"value\": -1.5, \"tag\": 33 },"
+                             " { \"value\": 0.5, \"tag\": 44 },"
+                             " { \"value\": 1000.123, \"tag\": 55 },"
+                             " { \"value\": 10, \"tag\": 66 }"
+                             " ] }");
+    g_free(str);
+
+
+    /* Try a reset */
+    rstats_reset(r);
+    rstats_add_value(r, 30, 77);
+    str = rstats_as_pretty_string(r);
+    g_assert_cmpstr(str, ==, "Min/Max: 30, 30 Mean: 30"
+                             " (Weighted: 30)"
+                             " Count: 1 Values: address@hidden");
+    g_free(str);
+    str = rstats_as_json_string(r);
+    g_assert_cmpstr(str, ==, "{ \"min\": 30, \"max\": 30, \"mean\": 30,"
+                             " \"weighted_mean\": 30, \"count\": 1,"
+                             " \"values\": ["
+                             " { \"value\": 30, \"tag\": 77 }"
+                             " ] }");
+    g_free(str);
+
+    rstats_destroy(r);
+}
+
+int main(int argc, char **argv)
+{
+    g_test_init(&argc, &argv, NULL);
+    g_test_add_func("/utils/rolling_stats", test_1);
+    return g_test_run();
+}
-- 
2.1.0




reply via email to

[Prev in Thread] Current Thread [Next in Thread]