From 20cac9c3c438aac49d1dcd87fec24c17bdcbfa8c Mon Sep 17 00:00:00 2001 From: rsiddharth Date: Sat, 11 Apr 2020 00:53:05 -0400 Subject: nserver: Add Stats_stringify. * nserver/src/stats.c (Stats_stringify): New function definition. * nserver/src/stats.h (Stats_stringify): New function declaration. * nserver/tests/stats_tests.c (test_tests_stringify): Test for Stats_stringify. --- nserver/src/stats.c | 22 ++++++++++++++++++++++ nserver/src/stats.h | 2 ++ nserver/tests/stats_tests.c | 45 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 69 insertions(+) create mode 100644 nserver/tests/stats_tests.c diff --git a/nserver/src/stats.c b/nserver/src/stats.c index 0b793f8..6edf458 100644 --- a/nserver/src/stats.c +++ b/nserver/src/stats.c @@ -65,3 +65,25 @@ char *Stats_dump(Stats *st) error: return NULL; } + +char *Stats_stringify(Stats *st) +{ + size_t stats_str_len = 80; + + // allocate space for stringified stats. + char *stats_str = calloc(stats_str_len, sizeof(char)); + check_mem(stats_str); + + // stringify the stats + int rc = snprintf(stats_str, stats_str_len, + "%.2f::%.2f::%ld::%.2f::%.2f", + st->sum, st->sumsq, st->n, st->min, st->max); + check(rc > 0, "stringify stats failed"); + + return stats_str; + error: + if (stats_str) { + free(stats_str); + } + return NULL; +} diff --git a/nserver/src/stats.h b/nserver/src/stats.h index 776eb21..8fc971e 100644 --- a/nserver/src/stats.h +++ b/nserver/src/stats.h @@ -19,6 +19,8 @@ void Stats_sample(Stats *st, double s); char *Stats_dump(Stats *st); +char *Stats_stringify(Stats *st); + static inline double Stats_mean(Stats *st) { return st->sum / st->n; diff --git a/nserver/tests/stats_tests.c b/nserver/tests/stats_tests.c new file mode 100644 index 0000000..6553ea5 --- /dev/null +++ b/nserver/tests/stats_tests.c @@ -0,0 +1,45 @@ +#include "minunit.h" +#include +#include + +/** + * tests for other stats functions are in + * ../../liblcthw/tests/stats_tests.c + */ + +char *test_stats_stringify() +{ + Stats *st = Stats_create(); + mu_assert(st != NULL, "stats create failed"); + + // fill with dummy data. + st->sum = 8238.33892; + st->sumsq = 4260238.8292; + st->n = 28; + st->min = 28.3921; + st->max = 238.27; + + char *st_str = Stats_stringify(st); + mu_assert(st_str != NULL, "stats stringify failed"); + + char *expected_st_str = "8238.34::4260238.83::28::28.39::238.27"; + mu_assert(strncmp(st_str, expected_st_str, strlen(expected_st_str)) == 0, + "stringified str invalid"); + + // cleanup + free(st_str); + free(st); + + return NULL; +} + +char *all_tests() +{ + mu_suite_start(); + + mu_run_test(test_stats_stringify); + + return NULL; +} + +RUN_TESTS(all_tests); -- cgit v1.2.3