diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/dag.c | 80 | ||||
-rw-r--r-- | tests/dag_merge.json | 3 | ||||
-rw-r--r-- | tests/meson.build | 19 |
3 files changed, 102 insertions, 0 deletions
diff --git a/tests/dag.c b/tests/dag.c new file mode 100644 index 0000000..065536b --- /dev/null +++ b/tests/dag.c @@ -0,0 +1,80 @@ +#include <stdio.h> +#include <errno.h> +#include <string.h> + +#include "util.h" +#include "queue.h" +#include "evanix.h" +#include "solver_sjf.h" +#include "test.h" + +/* + * A C A C + * \ + + / = \ / + * B B B B + */ + +struct evanix_opts_t evanix_opts = { + .close_unused_fd = false, + .isflake = false, + .ispipelined = true, + .isdryrun = false, + .max_build = 0, + .system = NULL, + .solver_report = false, + .check_cache_status = false, + .solver = solver_sjf, + .break_evanix = false, +}; + +static void test_merge() +{ + FILE *stream; + struct job *job, *a, *b, *c; + struct queue_thread *qt; + int ret; + + stream = fopen("../tests/dag_merge.json", "r"); + test_assert(stream != NULL); + + ret = queue_thread_new(&qt, stream); + if (ret < 0) + goto out_free_stram; + + + /* A */ + ret = job_read(qt->stream, &job); + test_assert(ret == JOB_READ_SUCCESS); + ret = queue_htab_job_merge(&job, &qt->queue->htab); + test_assert(ret >= 0); + a = job; + + /* B */ + ret = job_read(qt->stream, &job); + test_assert(ret == JOB_READ_SUCCESS); + ret = queue_htab_job_merge(&job, &qt->queue->htab); + test_assert(ret >= 0); + b = job; + + /* C */ + ret = job_read(qt->stream, &job); + test_assert(ret == JOB_READ_SUCCESS); + ret = queue_htab_job_merge(&job, &qt->queue->htab); + test_assert(ret >= 0); + c = job; + + ret = job_read(qt->stream, &job); + test_assert(ret == JOB_READ_EOF); + + test_assert(a->deps[0] == b); + test_assert(a->deps[0] == c->deps[0]); + +out_free_stram: + fclose(stream); + queue_thread_free(qt); +} + +int main(void) +{ + test_run(test_merge); +} diff --git a/tests/dag_merge.json b/tests/dag_merge.json new file mode 100644 index 0000000..5aca18e --- /dev/null +++ b/tests/dag_merge.json @@ -0,0 +1,3 @@ +{"name":"a","attr":"a","drvPath":"/nox/store/a.drv","inputDrvs":{"/nox/store/b.drv":["out"]},"outputs":{"out":"/nox/store/a"}} +{"attr":"b","name":"b","drvPath":"/nox/store/b.drv","inputDrvs":{},"outputs":{"out":"/nox/store/b"}} +{"name":"c","attr":"c","drvPath":"/nox/store/c.drv","inputDrvs":{"/nox/store/b.drv":["out"]},"outputs":{"out":"/nox/store/b"}} diff --git a/tests/meson.build b/tests/meson.build new file mode 100644 index 0000000..22ce6b8 --- /dev/null +++ b/tests/meson.build @@ -0,0 +1,19 @@ +dag_test = executable( + 'dag_test', + [ + 'dag.c', + '../src/jobs.c', + '../src/util.c', + '../src/queue.c', + '../src/build.c', + '../src/jobid.c', + '../src/solver_conformity.c', + '../src/solver_highs.c', + '../src/solver_sjf.c', + ], + + include_directories: evanix_inc, + dependencies: [ cjson_dep, highs_dep ], +) + +test('dag', dag_test) |