$(tests_targets): LIBS += $(DAEMON_LIBS)
$(tests_targets_ok): %.ok: %
- $(Q)$* 2>/dev/null && touch $*.ok
+ $(Q)$* $(TESTFLAGS) 2>/dev/null && touch $*.ok
test: testsclean check
check: tests tests_run
tests: $(tests_targets)
tests_run: $(tests_targets_ok)
+benchmark: test
+benchmark: TESTFLAGS+=-b
tags:
cd $(srcdir) ; etags -lc `find $(dirs) -name *.[chY]`
#include <stdlib.h>
#include <string.h>
#include <signal.h>
+#include <time.h>
#include <unistd.h>
#include <sys/ioctl.h>
static int no_timeout;
static int is_terminal; /* Whether stdout is a live terminal or pipe redirect */
+int bt_benchmark;
uint bt_verbose;
const char *bt_filename;
const char *bt_test_id;
bt_test_id = NULL;
is_terminal = isatty(fileno(stdout));
- while ((c = getopt(argc, argv, "lcftv")) >= 0)
+ while ((c = getopt(argc, argv, "blcftv")) >= 0)
switch (c)
{
+ case 'b':
+ bt_benchmark = 1;
+ no_timeout = 1;
+ break;
+
case 'l':
list_tests = 1;
break;
int result;
alarm(timeout);
- if (fn_arg)
- result = fn(fn_arg);
- else
- result = ((int (*)(void))fn)();
+ if (bt_benchmark) {
+ for (int i=0; i<11; i++) {
+ struct timespec begin, end;
+ clock_gettime(CLOCK_MONOTONIC, &begin);
+ if (fn_arg)
+ result = fn(fn_arg);
+ else
+ result = ((int (*)(void))fn)();
+ clock_gettime(CLOCK_MONOTONIC, &end);
+ s64 dif = (end.tv_sec - begin.tv_sec) * 1000000000 + end.tv_nsec - begin.tv_nsec;
+ if (i)
+ bt_log("benchmark: %ld", dif);
+ }
+ } else {
+ if (fn_arg)
+ result = fn(fn_arg);
+ else
+ result = ((int (*)(void))fn)();
+ }
if (!bt_suite_result)
result = 0;
extern int bt_result;
extern int bt_suite_result;
extern char bt_out_fmt_buf[1024];
+extern int bt_benchmark;
extern uint bt_verbose;
#define BT_VERBOSE_NO 0