]> sigrok.org Git - libserialport.git/commitdiff
Add test program for timing functions.
authorMartin Ling <redacted>
Mon, 20 Jan 2020 03:43:49 +0000 (03:43 +0000)
committerMartin Ling <redacted>
Thu, 23 Jan 2020 03:35:47 +0000 (03:35 +0000)
Makefile.am
test_timing.c [new file with mode: 0644]

index a9aca6c06e3056ec95e68e322d01cb16b4ea2207..10493de6a49b6de870a58ff76a58d59120110776 100644 (file)
@@ -53,6 +53,11 @@ nodist_include_HEADERS = libserialport.h
 pkgconfigdir = $(libdir)/pkgconfig
 pkgconfig_DATA = libserialport.pc
 
+TESTS = test_timing
+check_PROGRAMS = test_timing
+test_timing_SOURCES = timing.c test_timing.c
+test_timing_CFLAGS = $(AM_CFLAGS)
+
 EXTRA_DIST = Doxyfile \
        examples/Makefile \
        examples/README \
diff --git a/test_timing.c b/test_timing.c
new file mode 100644 (file)
index 0000000..c08badb
--- /dev/null
@@ -0,0 +1,67 @@
+#include "config.h"
+#include "libserialport.h"
+#include "libserialport_internal.h"
+#include <assert.h>
+#include <unistd.h>
+
+int main(int argc, char *argv[])
+{
+       (void) argc;
+       (void) argv;
+       struct time a, b, c;
+       struct timeval tv;
+       struct timeout to;
+       printf("Testing arithmetic\n");
+       time_set_ms(&a, 10050);
+       time_set_ms(&b, 100);
+       assert(time_greater(&a, &b));
+       assert(!time_greater(&b, &a));
+       time_add(&a, &b, &c);
+       assert(time_as_ms(&c) == 10150);
+       time_sub(&a, &b, &c);
+       assert(time_as_ms(&c) == 9950);
+       time_as_timeval(&a, &tv);
+       assert(tv.tv_sec == 10);
+       assert(tv.tv_usec == 50000);
+       time_get(&a);
+       printf("Sleeping for 1s\n");
+       sleep(1);
+       time_get(&b);
+       time_sub(&b, &a, &c);
+       printf("Measured: %ums\n", time_as_ms(&c));
+       assert(time_as_ms(&c) >= 999);
+       assert(time_as_ms(&c) <= 1001);
+       printf("Starting 3s timeout\n");
+       timeout_start(&to, 3000);
+       printf("Time to wait: %dms\n", timeout_remaining_ms(&to));
+       printf("Sleeping for 1s\n");
+       sleep(1);
+       timeout_update(&to);
+       assert(!timeout_check(&to));
+       printf("Sleeping for 1s\n");
+       sleep(1);
+       timeout_update(&to);
+       assert(!timeout_check(&to));
+       printf("Remaining: %ums\n", timeout_remaining_ms(&to));
+       printf("Sleeping for 1s\n");
+       sleep(1);
+       timeout_update(&to);
+       assert(timeout_check(&to));
+       printf("Timeout expired\n");
+       printf("Starting 2s timeout\n");
+       timeout_start(&to, 2000);
+       printf("Limiting steps to 1s\n");
+       timeout_limit(&to, 1000);
+       printf("Time to wait: %ums\n", timeout_remaining_ms(&to));
+       printf("Sleeping for 1s\n");
+       sleep(1);
+       timeout_update(&to);
+       assert(!timeout_check(&to));
+       printf("Remaining: %ums\n", timeout_remaining_ms(&to));
+       printf("Sleeping for 1s\n");
+       sleep(1);
+       timeout_update(&to);
+       assert(timeout_check(&to));
+       printf("Timeout expired\n");
+       return 0;
+}