aboutsummaryrefslogtreecommitdiff
path: root/src/test.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/test.c')
-rw-r--r--src/test.c158
1 files changed, 158 insertions, 0 deletions
diff --git a/src/test.c b/src/test.c
new file mode 100644
index 0000000..37a3b64
--- /dev/null
+++ b/src/test.c
@@ -0,0 +1,158 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include "k8055.h"
+
+static int port = 0;
+
+
+int test_all_analog(k8055_device* device) {
+
+ for (int i = 0; i < 256; ++i)
+ if (k8055_set_all_analog(device, i, i) !=0 )
+ return -1;
+ return 0;
+}
+
+int test_all_digital(k8055_device* device) {
+ for (int i = 0; i < 256; ++i)
+ if (k8055_set_all_digital(device, i) !=0 )
+ return -1;
+ return 0;
+}
+
+int test_analog(k8055_device* device) {
+ struct timespec reqtime;
+ reqtime.tv_sec = 0;
+ reqtime.tv_nsec = 500000000;
+
+ if (k8055_set_analog(device, 0, 0) != 0) return -1;
+ if (k8055_set_analog(device, 1, 0) != 0) return -1;
+ nanosleep(&reqtime, NULL);
+ if (k8055_set_analog(device, 0, 255) != 0) return -1;
+ if (k8055_set_analog(device, 1, 255) != 0) return -1;
+ nanosleep(&reqtime, NULL);
+ return 0;
+}
+
+int test_digital(k8055_device* device) {
+ struct timespec reqtime;
+ reqtime.tv_sec = 0;
+ reqtime.tv_nsec = 500000000;
+
+ for (int i = 0; i < 8; ++i)
+ if (k8055_set_digital(device, i, false) != 0) return -1;
+ nanosleep(&reqtime, NULL);
+ for (int i = 0; i < 8; ++i)
+ if (k8055_set_digital(device, i, true) != 0) return -1;
+ nanosleep(&reqtime, NULL);
+ return 0;
+}
+
+int test_get_all_input(k8055_device* device) {
+ if (k8055_get_all_input(device, NULL, NULL, NULL, NULL, NULL, false) != 0) return -1;
+ if (k8055_get_all_input(device, NULL, NULL, NULL, NULL, NULL, true) != 0) return -1;
+ return 0;
+}
+
+int test_get_all_output(k8055_device* device) {
+ unsigned int iseed = (unsigned int)time(NULL);
+ srand(iseed);
+
+
+ int a0 = rand() % 256;
+ int a1 = rand() % 256;
+ int d = rand() % 256;
+
+ if (k8055_set_all_analog(device, a0, a1) != 0) return -1;
+ if (k8055_set_all_digital(device, d) != 0) return -1;
+
+ int ga0;
+ int ga1;
+ int gd;
+ k8055_get_all_output(device, &gd, &ga0, &ga1, NULL, NULL);
+
+ if ((a0 != ga0) || (a1 != ga1) || (d != gd)) return -1;
+ return 0;
+}
+
+int run_test(const char* name, int (*f)(k8055_device*), k8055_device* device) {
+ puts(name);
+ int result = f(device);
+ if (result == 0) puts("= success =");
+ else puts("= FAILED =");
+ puts("");
+ return result;
+}
+
+int run_all() {
+ k8055_debug(true);
+ k8055_device* device = NULL;
+
+ size_t n = 6;
+ char* names[] = {
+ "= write all analog =",
+ "= write all digital =",
+ "= write analog =",
+ "= write digital =",
+ "= read input =",
+ "= read output ="
+ };
+
+ int (*tests[])(k8055_device*) = {
+ test_all_analog,
+ test_all_digital,
+ test_analog,
+ test_digital,
+ test_get_all_input,
+ test_get_all_output
+ };
+
+
+
+ printf("= open k8055 on port %i =\n", port);
+ if (k8055_open_device(port, &device) == 0) {
+ puts("= success =");
+ puts("");
+ } else {
+ puts("= FAILED =\n");
+ puts("");
+ return -1;
+ }
+
+ for (int j = 0; j < n; ++j)
+ run_test(names[j], tests[j], device);
+
+ printf("= reopen k8055 on port %i =\n", port);
+ k8055_close_device(device);
+ if (k8055_open_device(port, &device) == 0) {
+ puts("= success =");
+ puts("");
+ } else {
+ puts("= FAILED =\n");
+ puts("");
+ return -1;
+ }
+
+ for (int j = 0; j < n; ++j)
+ run_test(names[j], tests[j], device);
+
+
+ puts("turning everything off");
+ k8055_set_all_analog(device, 0, 0);
+ k8055_set_all_digital(device, 0);
+ k8055_close_device(device);
+
+ return 0;
+}
+
+int main(int argc, char *argv[]) {
+ if (argc <= 1) port = 0;
+ else port = atoi(argv[1]);
+
+ int r = run_all();
+ puts("");
+ if (r == 0) puts("all tests completed successfully");
+ else puts("some tests FAILED");
+ return r;
+}