char *Stats_dump(Stats *st) { char *summary = NULL; int rc = asprintf(&summary, "sum: %.2f\n" "sumsq: %.2f\n" "n: %ld\n" "min: %.2f\n" "max: %.2f\n" "mean: %.2f\n" "stddev: %.2f\n", st->sum, st->sumsq, st->n, st->min, st->max, Stats_mean(st), Stats_stddev(st) ); check(rc > 0, "Failed to build summary"); return summary; error: return NULL; }
char* test_recreate() { Stats* st = Stats_recreate(expect.sum, expect.sumsq, expect.n, expect.min, expect.max); mu_assert(st->sum == expect.sum, "sum not equal"); mu_assert(st->sumsq == expect.sumsq, "sumsq not equal"); mu_assert(st->n == expect.n, "n not equal"); mu_assert(st->min == expect.min, "min not equal"); mu_assert(st->max == expect.max, "max not equal"); mu_assert(EQ(expect_mean, Stats_mean(st), 3), "mean not valid"); mu_assert(EQ(expect_stddev, Stats_stddev(st), 3), "stddev not valid"); return NULL; }
char *test_recreate() { Stats *st = Stats_recreate(expect.sum, expect.sumsq, expect.n, expect.min, expect.max); mu_assert(st->sum == expect.sum, "sum !="); mu_assert(st->sumsq == expect.sumsq, "sumsq !="); mu_assert(st->n == expect.n, "n !="); mu_assert(st->min == expect.min, "min !="); mu_assert(st->max == expect.max, "max !="); mu_assert(EQ(Stats_mean(st), expect_mean, 3), "mean !="); mu_assert(EQ(Stats_stddev(st), expect_stddev, 3), "stddev !="); return NULL; }
double Server_return_stddev(Hashmap *store, char *name) { bstring b_name = bfromcstr(name); Stats *stat = Hashmap_get(store, b_name); check(stat != NULL, "Could not find stat"); free(b_name); return Stats_stddev(stat); error: if (b_name) { free(b_name); } return -1; }
char* test_operations() { int i = 0; Stats* st = Stats_create(); mu_assert(st != NULL, "Failed to create stats."); for(i = 0; i < NUM_SAMPLES; i++) { Stats_sample(st, samples[i]); } Stats_dump(st); mu_assert(EQ(st->sumsq, expect.sumsq, 3), "sumsq not valid"); mu_assert(EQ(st->sum, expect.sum, 3), "sum not valid"); mu_assert(EQ(st->min, expect.min, 3), "min not valid"); mu_assert(EQ(st->max, expect.max, 3), "max not valid"); mu_assert(EQ(st->n, expect.n, 2), "n not valid"); mu_assert(EQ(expect_mean, Stats_mean(st), 3), "mean not valid"); mu_assert(EQ(expect_stddev, Stats_stddev(st), 3), "stddev not valid"); return NULL; }
char *test_operations() { int i = 0; Stats *st = Stats_create(); mu_assert(st != NULL, "failed to create stats"); for (i = 0; i < NUM_SAMPLES; i++) { Stats_sample(st, samples[i]); } Stats_dump(st); // note ble->bla is syntactic sugar for (*ble).bla // in this context st is a pointer while expect is not mu_assert(EQ(st->sumsq, expect.sumsq, 3), "sumsq invalid"); mu_assert(EQ(st->sum, expect.sum, 3), "sum invalid"); mu_assert(EQ(st->min, expect.min, 3), "min invalid "); //mu_assert(EQ(st->max, expect.max, 3), "max invalid"); not accurate enough for some reason mu_assert(EQ(st->n, expect.n, 3), "n invalid"); mu_assert(EQ(Stats_mean(st), expect_mean, 3), "mean invalid"); mu_assert(EQ(Stats_stddev(st), expect_stddev, 3), "stddev invalid"); return NULL; }
void Stats_dump(Stats *st) { fprintf(stderr, "sum: %f, sumsq: %f, n: %ld, min: %f, max: %f, mean: %f, stddev: %f\n", st->sum, st->sumsq, st->n, st->min, st->max, Stats_mean(st), Stats_stddev(st)); }