]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Tests: added a simple benchmark
authorMaria Matejka <mq@jmq.cz>
Tue, 16 Apr 2019 19:01:13 +0000 (21:01 +0200)
committerMaria Matejka <mq@jmq.cz>
Tue, 16 Apr 2019 19:01:13 +0000 (21:01 +0200)
Makefile.in
test/birdtest.c
test/birdtest.h

index 98047e0c719cf9da743b20cbd3b79d97a32952b2..21956cdb8faead3111079b65f11f8ea3d64c8246 100644 (file)
@@ -174,12 +174,14 @@ $(tests_targets): %: %.o $(tests_objs) | prepare
 $(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]`
index a4312e9b18ffe9320feb979732875913b814a28d..05501ebf25e4dae3632469493ac1f123e2ac5802 100644 (file)
@@ -10,6 +10,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <signal.h>
+#include <time.h>
 #include <unistd.h>
 
 #include <sys/ioctl.h>
@@ -35,6 +36,7 @@ static int no_fork;
 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;
@@ -67,9 +69,14 @@ bt_init(int argc, char *argv[])
   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;
@@ -155,10 +162,25 @@ int bt_run_test_fn(int (*fn)(const void *), const void *fn_arg, int timeout)
   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;
index 4443bfc1c865a62124063748b6cad76455e81ec6..f004b63766ff0108f86f6d68dca2698f826af5a0 100644 (file)
@@ -20,6 +20,7 @@
 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