Skip to content

Commit

Permalink
[Issue #1] Added time measurements
Browse files Browse the repository at this point in the history
  • Loading branch information
Snaipe committed Feb 7, 2015
1 parent 88fb0e0 commit 7fee020
Show file tree
Hide file tree
Showing 5 changed files with 33 additions and 13 deletions.
1 change: 1 addition & 0 deletions include/criterion/stats.h
Expand Up @@ -45,6 +45,7 @@ struct criterion_test_stats {
int passed_asserts;
int failed_asserts;
int signal;
float elapsed_time;
unsigned progress;
const char *file;

Expand Down
24 changes: 17 additions & 7 deletions src/event.c
Expand Up @@ -45,15 +45,25 @@ struct event *read_event(int fd) {
if (read(fd, &kind, sizeof (unsigned)) < (ssize_t) sizeof (unsigned))
return NULL;

if (kind != ASSERT)
return unique_ptr(struct event, ({ .kind = kind, .data = NULL }));
switch (kind) {
case ASSERT: {
const size_t assert_size = sizeof (struct criterion_assert_stats);
unsigned char *buf = malloc(assert_size);
if (read(fd, buf, assert_size) < (ssize_t) assert_size)
return NULL;

const size_t assert_size = sizeof (struct criterion_assert_stats);
unsigned char *buf = malloc(assert_size);
if (read(fd, buf, assert_size) < (ssize_t) assert_size)
return NULL;
return unique_ptr(struct event, ({ .kind = kind, .data = buf }), destroy_event);
}
case POST_TEST: {
float *elapsed_time = malloc(sizeof (float));
if (read(fd, elapsed_time, sizeof (float)) < (ssize_t) sizeof (float))
return NULL;

return unique_ptr(struct event, ({ .kind = kind, .data = buf }), destroy_event);
return unique_ptr(struct event, ({ .kind = kind, .data = elapsed_time }), destroy_event);
}
default:
return unique_ptr(struct event, ({ .kind = kind, .data = NULL }));
}
}

void send_event(int kind, void *data, size_t size) {
Expand Down
5 changes: 3 additions & 2 deletions src/report.c
Expand Up @@ -53,15 +53,16 @@ ReportHook(PRE_INIT)(struct criterion_test *test) {
}

ReportHook(POST_TEST)(struct criterion_test_stats *stats) {
fprintf(stderr, "%s::%s: %s\n", stats->test->category, stats->test->name, stats->failed ? "FAILURE" : "SUCCESS");
fprintf(stderr, "%s::%s: %s (%3.2fs)\n", stats->test->category, stats->test->name, stats->failed ? "FAILURE" : "SUCCESS", stats->elapsed_time);
}

ReportHook(PRE_TEST)() {}
ReportHook(POST_FINI)() {}

ReportHook(PRE_EVERYTHING)() {}
ReportHook(POST_EVERYTHING)(struct criterion_global_stats *stats) {
fprintf(stderr, "Synthesis: %lu tests were run. %lu passed, %lu failed (with %lu crashes)\n", stats->nb_tests, stats->tests_passed, stats->tests_failed, stats->tests_crashed);
fprintf(stderr, "Synthesis: %lu tests were run. %lu passed, %lu failed (with %lu crashes)\n",
stats->nb_tests, stats->tests_passed, stats->tests_failed, stats->tests_crashed);
}

ReportHook(ASSERT)(struct criterion_assert_stats *stats) {
Expand Down
13 changes: 10 additions & 3 deletions src/runner.c
Expand Up @@ -25,6 +25,7 @@
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
#include <time.h>
#include <csptr/smart_ptr.h>
#include "criterion/assert.h"
#include "stats.h"
Expand Down Expand Up @@ -98,8 +99,13 @@ static void run_test_child(struct criterion_test *test) {
send_event(PRE_INIT, NULL, 0);
(test->data->init ?: nothing)();
send_event(PRE_TEST, NULL, 0);

clock_t before = clock();
(test->test ?: nothing)();
send_event(POST_TEST, NULL, 0);
clock_t after = clock();

float elapsed_time = (float) (after - before) / CLOCKS_PER_SEC;
send_event(POST_TEST, &elapsed_time, sizeof (float));
(test->data->fini ?: nothing)();
send_event(POST_FINI, NULL, 0);
}
Expand Down Expand Up @@ -150,11 +156,12 @@ static void run_test(struct criterion_global_stats *stats, struct criterion_test
stat_push_event(stats, test_stats, &ev);
report(TEST_CRASH, test_stats);
} else {
struct event ev = { .kind = POST_TEST };
float elapsed_time = 0;
struct event ev = { .kind = POST_TEST, .data = &elapsed_time };
stat_push_event(stats, test_stats, &ev);
report(POST_TEST, test_stats);

ev.kind = POST_FINI;
ev = (struct event) { .kind = POST_FINI };
stat_push_event(stats, test_stats, &ev);
report(POST_FINI, test_stats);
}
Expand Down
3 changes: 2 additions & 1 deletion src/stats.c
Expand Up @@ -114,7 +114,8 @@ static void push_assert(s_glob_stats *stats,

static void push_post_test(s_glob_stats *stats,
s_test_stats *test,
UNUSED void *ptr) {
float *ptr) {
test->elapsed_time = *ptr;
if (test->failed_asserts > 0 || test->signal != test->test->data->signal) {
test->failed = 1;
++stats->tests_failed;
Expand Down

0 comments on commit 7fee020

Please sign in to comment.