aboutsummaryrefslogtreecommitdiff
path: root/test/test_tuberia.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/test_tuberia.c')
-rw-r--r--test/test_tuberia.c110
1 files changed, 110 insertions, 0 deletions
diff --git a/test/test_tuberia.c b/test/test_tuberia.c
new file mode 100644
index 0000000..8856447
--- /dev/null
+++ b/test/test_tuberia.c
@@ -0,0 +1,110 @@
+#include "../src/tuberia.h"
+#include "test.h"
+
+#include <pthread.h>
+#include <stdlib.h>
+
+static void *process(void *element, void *opaque)
+{
+ unsigned int *e = element;
+ unsigned int *r;
+ int *s = opaque;
+ r = malloc(sizeof(*r));
+ *r = *e + *s;
+ free(e);
+ return r;
+}
+
+static void test_tube_source_stage_alloc_free(void)
+{
+ tube_source *source;
+ tube_stage *stage;
+ TEST((source = tube_source_alloc(0, NULL, NULL, free)) == NULL);
+ TEST((source = tube_source_alloc(1, NULL, NULL, free)) != NULL);
+ tube_source_and_stages_free(&source);
+ TEST(source == NULL);
+ TEST((source = tube_source_alloc(3, NULL, NULL, free)) != NULL);
+ tube_source_and_stages_free(&source);
+ TEST(source == NULL);
+ TEST((stage = tube_stage_alloc(0, NULL, NULL, free)) == NULL);
+ TEST((stage = tube_stage_alloc(3, NULL, NULL, free)) == NULL);
+ TEST((stage = tube_stage_alloc(0, process, NULL, free)) == NULL);
+ TEST((stage = tube_stage_alloc(1, process, NULL, free)) != NULL);
+ tube_stage_free(&stage);
+ TEST(stage == NULL);
+ TEST((stage = tube_stage_alloc(3, process, NULL, free)) != NULL);
+ tube_stage_free(&stage);
+ TEST(stage == NULL);
+ TEST((source = tube_source_alloc(1, NULL, NULL, free)) != NULL);
+ TEST(tube_stage_append(source, tube_stage_alloc(1, process, NULL, free)) == 0);
+ TEST(tube_stage_append(source, tube_stage_alloc(1, process, NULL, free)) == 0);
+ TEST(tube_stage_append(source, tube_stage_alloc(1, process, NULL, free)) == 0);
+ tube_source_and_stages_free(&source);
+ TEST(source == NULL);
+}
+
+static void test_tube_alloc_free(void)
+{
+ tube *tube;
+ tube_source *source;
+ source = tube_source_alloc(1, NULL, NULL, free);
+ tube_stage_append(source, tube_stage_alloc(1, process, NULL, free));
+ tube_stage_append(source, tube_stage_alloc(1, process, NULL, free));
+ tube_stage_append(source, tube_stage_alloc(1, process, NULL, free));
+ TEST((tube = tube_alloc(NULL, NULL, NULL)) == NULL);
+ TEST((tube = tube_alloc(source, NULL, NULL)) != NULL);
+ tube_source_and_stages_free(&source);
+ tube_free(&tube);
+ TEST(tube == NULL);
+}
+
+static void test_tube_inject_retrive(void)
+{
+ tube *tube;
+ tube_source *source;
+ int sum[] = {7, 5};
+ unsigned int *e[10];
+ unsigned int r[10] = {12, 13, 14, 15, 16, 17, 18, 19, 20, 21};
+ unsigned int *o;
+ unsigned int i;
+
+ source = tube_source_alloc(3, NULL, NULL, free);
+ tube_stage_append(source, tube_stage_alloc(2, process, &sum[0], free));
+ tube_stage_append(source, tube_stage_alloc(4, process, &sum[1], free));
+ tube = tube_alloc(source, NULL, NULL);
+ tube_source_and_stages_free(&source);
+
+ for (i = 0; i < sizeof(e)/sizeof(e[0]); i++) {
+ e[i] = malloc(sizeof(*e[i]));
+ *e[i] = i;
+ }
+ for (i = 0; i < 3; i++) {
+ TEST(tube_inject(tube, 1000, e[i]) == 0);
+ }
+ TEST(tube_inject(tube, 1000, e[i]) < 0);
+ TEST(tube_start(tube) == 0);
+ for (; i < sizeof(e)/sizeof(e[0]); i++) {
+ TEST(tube_inject(tube, 1000, e[i]) == 0);
+ }
+ for (i = 0; i < sizeof(e)/sizeof(e[0]); i++) {
+ TEST((o = tube_retrive(tube, 1000)) != NULL);
+ TEST(*o == r[i]);
+ free(o);
+ }
+ tube_free(&tube);
+}
+
+int main(int argc, char **argv)
+{
+ (void)argc;
+ (void)argv;
+ test_tube_source_stage_alloc_free();
+ test_tube_alloc_free();
+ test_tube_inject_retrive();
+ /*test_tube_get_queued();
+ test_tube_get_slots();
+ test_tube_wait_empty();
+ test_tube_discard_all();*/
+ return 0;
+}
+