aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/dag.c80
-rw-r--r--tests/dag_merge.json3
-rw-r--r--tests/meson.build19
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)