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.c116
1 files changed, 99 insertions, 17 deletions
diff --git a/test/test_tuberia.c b/test/test_tuberia.c
index 8856447..6fe62b5 100644
--- a/test/test_tuberia.c
+++ b/test/test_tuberia.c
@@ -3,6 +3,7 @@
#include <pthread.h>
#include <stdlib.h>
+#include <unistd.h>
static void *process(void *element, void *opaque)
{
@@ -10,7 +11,7 @@ static void *process(void *element, void *opaque)
unsigned int *r;
int *s = opaque;
r = malloc(sizeof(*r));
- *r = *e + *s;
+ *r = *e + (s != NULL ? *s : 0);
free(e);
return r;
}
@@ -45,22 +46,22 @@ static void test_tube_source_stage_alloc_free(void)
static void test_tube_alloc_free(void)
{
- tube *tube;
+ tube *ctx;
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);
+ TEST((ctx = tube_alloc(NULL, NULL, NULL)) == NULL);
+ TEST((ctx = tube_alloc(source, NULL, NULL)) != NULL);
tube_source_and_stages_free(&source);
- tube_free(&tube);
- TEST(tube == NULL);
+ tube_free(&ctx);
+ TEST(ctx == NULL);
}
static void test_tube_inject_retrive(void)
{
- tube *tube;
+ tube *ctx;
tube_source *source;
int sum[] = {7, 5};
unsigned int *e[10];
@@ -71,7 +72,7 @@ static void test_tube_inject_retrive(void)
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);
+ ctx = tube_alloc(source, NULL, NULL);
tube_source_and_stages_free(&source);
for (i = 0; i < sizeof(e)/sizeof(e[0]); i++) {
@@ -79,19 +80,101 @@ static void test_tube_inject_retrive(void)
*e[i] = i;
}
for (i = 0; i < 3; i++) {
- TEST(tube_inject(tube, 1000, e[i]) == 0);
+ TEST(tube_inject(ctx, 1000, e[i]) == 0);
}
- TEST(tube_inject(tube, 1000, e[i]) < 0);
- TEST(tube_start(tube) == 0);
+ TEST(tube_inject(ctx, 1000, e[i]) < 0);
+ TEST(tube_start(ctx) == 0);
for (; i < sizeof(e)/sizeof(e[0]); i++) {
- TEST(tube_inject(tube, 1000, e[i]) == 0);
+ TEST(tube_inject(ctx, 1000, e[i]) == 0);
}
for (i = 0; i < sizeof(e)/sizeof(e[0]); i++) {
- TEST((o = tube_retrive(tube, 1000)) != NULL);
+ TEST((o = tube_retrive(ctx, 1000)) != NULL);
TEST(*o == r[i]);
free(o);
}
- tube_free(&tube);
+ tube_free(&ctx);
+}
+
+static void test_tube_get_queued_get_slots(void)
+{
+ tube *ctx;
+ tube_source *source;
+ unsigned int *e;
+
+ source = tube_source_alloc(2, NULL, NULL, free);
+ tube_stage_append(source, tube_stage_alloc(3, process, NULL, free));
+ ctx = tube_alloc(source, NULL, NULL);
+ tube_source_and_stages_free(&source);
+ tube_start(ctx);
+
+ TEST(tube_get_slots(ctx, 0) == 2);
+ TEST(tube_get_slots(ctx, 1) == 3);
+ TEST(tube_get_queued(ctx, 0) == 0);
+ TEST(tube_get_queued(ctx, 1) == 0);
+
+ e = malloc(sizeof(*e));
+ *e = 1;
+ tube_inject(ctx, 0, e);
+ e = malloc(sizeof(*e));
+ *e = 2;
+ tube_inject(ctx, 0, e);
+ sleep(2);
+
+ TEST(tube_get_slots(ctx, 0) == 2);
+ TEST(tube_get_slots(ctx, 1) == 3);
+ TEST(tube_get_queued(ctx, 0) == 0);
+ TEST(tube_get_queued(ctx, 1) == 2);
+
+ e = malloc(sizeof(*e));
+ *e = 3;
+ tube_inject(ctx, 0, e);
+ e = malloc(sizeof(*e));
+ *e = 4;
+ tube_inject(ctx, 0, e);
+ e = malloc(sizeof(*e));
+ *e = 5;
+ tube_inject(ctx, 1000, e);
+ sleep(2);
+
+ TEST(tube_get_slots(ctx, 0) == 2);
+ TEST(tube_get_slots(ctx, 1) == 3);
+ TEST(tube_get_queued(ctx, 0) == 1);
+ TEST(tube_get_queued(ctx, 1) == 3);
+
+ free(tube_retrive(ctx, 1000));
+ sleep(2);
+
+ TEST(tube_get_slots(ctx, 0) == 2);
+ TEST(tube_get_slots(ctx, 1) == 3);
+ TEST(tube_get_queued(ctx, 0) == 0);
+ TEST(tube_get_queued(ctx, 1) == 3);
+
+ free(tube_retrive(ctx, 1000));
+ sleep(2);
+
+ TEST(tube_get_slots(ctx, 0) == 2);
+ TEST(tube_get_slots(ctx, 1) == 3);
+ TEST(tube_get_queued(ctx, 0) == 0);
+ TEST(tube_get_queued(ctx, 1) == 3);
+
+ free(tube_retrive(ctx, 1000));
+ sleep(2);
+
+ TEST(tube_get_slots(ctx, 0) == 2);
+ TEST(tube_get_slots(ctx, 1) == 3);
+ TEST(tube_get_queued(ctx, 0) == 0);
+ TEST(tube_get_queued(ctx, 1) == 2);
+
+ free(tube_retrive(ctx, 0));
+ free(tube_retrive(ctx, 0));
+ sleep(2);
+
+ TEST(tube_get_slots(ctx, 0) == 2);
+ TEST(tube_get_slots(ctx, 1) == 3);
+ TEST(tube_get_queued(ctx, 0) == 0);
+ TEST(tube_get_queued(ctx, 1) == 0);
+
+ tube_free(&ctx);
}
int main(int argc, char **argv)
@@ -101,9 +184,8 @@ int main(int argc, char **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_get_queued_get_slots();
+ /*test_tube_wait_empty();
test_tube_discard_all();*/
return 0;
}