[Issue #1] Added time measurements

This commit is contained in:
Snaipe 2015-02-07 14:22:08 +01:00
parent 96c05610cc
commit c28cff39b8
4 changed files with 29 additions and 10 deletions

View file

@ -46,6 +46,7 @@ struct criterion_test_stats {
int passed_asserts;
int failed_asserts;
int signal;
float elapsed_time;
unsigned progress;
const char *file;

View file

@ -40,15 +40,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) {

View file

@ -24,6 +24,7 @@
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <time.h>
#include <csptr/smart_ptr.h>
#include "criterion/options.h"
#include "stats.h"
@ -87,8 +88,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();
double elapsed_time = (double) (after - before) / CLOCKS_PER_SEC;
send_event(POST_TEST, &elapsed_time, sizeof (double));
(test->data->fini ?: nothing)();
send_event(POST_FINI, NULL, 0);
}
@ -124,7 +130,8 @@ 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 };
double elapsed_time = 0;
struct event ev = { .kind = POST_TEST, .data = &elapsed_time };
stat_push_event(stats, test_stats, &ev);
report(POST_TEST, test_stats);

View file

@ -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;