diff options
Diffstat (limited to 'test/test_tuberia.c')
-rw-r--r-- | test/test_tuberia.c | 110 |
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; +} + |