aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/test_version_compare.c173
1 files changed, 173 insertions, 0 deletions
diff --git a/tests/test_version_compare.c b/tests/test_version_compare.c
new file mode 100644
index 0000000..2efd730
--- /dev/null
+++ b/tests/test_version_compare.c
@@ -0,0 +1,173 @@
+#include "testing.h"
+#include "version_compare.h"
+
+struct TestCase_version_compare {
+ char *a, *op, *b;
+ int expected;
+};
+
+struct TestCase_version_compare test_cases_version_compare[] = {
+ {"0", "=", "0", 1},
+ {"0", "<", "1",1},
+ {"0", "<=", "1",1},
+ {"0", ">", "1",0},
+ {"0", ">=", "1",0},
+ {"0", "!=", "1",1},
+
+ {"1a", "=", "1b", 0},
+ {"1a", "<", "1b", 1},
+ {"1a", "<=", "1b", 1},
+ {"1a", ">", "1b", 0},
+ {"1a", ">=", "1b", 0},
+ {"1a", "!=", "1b", 1},
+
+ {"1.0", "=", "1.0.0", 1},
+ {"1.0", "<", "1.0.0", 0},
+ {"1.0", "<=", "1.0.0", 1},
+ {"1.0", ">", "1.0.0", 0},
+ {"1.0", ">=", "1.0.0", 1},
+ {"1.0", "!=", "1.0.0", 0},
+
+ {"1.0rc1", "=", "1.0.0", 0},
+ {"1.0rc1", "<", "1.0.0", 1},
+ {"1.0rc1", "<=", "1.0.0", 1},
+ {"1.0rc1", ">", "1.0.0", 0},
+ {"1.0rc1", ">=", "1.0.0", 0},
+ {"1.0rc1", "!=", "1.0.0", 1},
+
+ {"1.0rc1", "=", "1.0.0rc1", 1},
+ {"1.0rc1", "<", "1.0.0rc1", 0},
+ {"1.0rc1", "<=", "1.0.0rc1", 1},
+ {"1.0rc1", ">", "1.0.0rc1", 0},
+ {"1.0rc1", ">=", "1.0.0rc1", 1},
+ {"1.0rc1", "!=", "1.0.0rc1", 0},
+
+ {"1.0rc1", "=", "1.0.0dev1", 0},
+ {"1.0rc1", "<", "1.0.0dev1", 0},
+ {"1.0rc1", "<=", "1.0.0dev1", 0},
+ {"1.0rc1", ">", "1.0.0dev1", 1},
+ {"1.0rc1", ">=", "1.0.0dev1", 1},
+ {"1.0rc1", "!=", "1.0.0dev1", 1},
+
+ {"1.0post1", "=", "1.0.0dev1", 0},
+ {"1.0post1", "<", "1.0.0dev1", 0},
+ {"1.0post1", "<=", "1.0.0dev1", 0},
+ {"1.0post1", ">", "1.0.0dev1", 1},
+ {"1.0post1", ">=", "1.0.0dev1", 1},
+ {"1.0post1", "!=", "1.0.0dev1", 1},
+
+ {"1.0post1", "=", "1.0.0", 0},
+ {"1.0post1", "<", "1.0.0", 0},
+ {"1.0post1", "<=", "1.0.0", 0},
+ {"1.0post1", ">", "1.0.0", 1},
+ {"1.0post1", ">=", "1.0.0", 1},
+ {"1.0post1", "!=", "1.0.0", 1},
+
+ {"1.0dev1", "=", "1.0.0dev1", 1},
+ {"1.0dev1", "<", "1.0.0dev1", 0},
+ {"1.0dev1", "<=", "1.0.0dev1", 1},
+ {"1.0dev1", ">", "1.0.0dev1", 0},
+ {"1.0dev1", ">=", "1.0.0dev1", 1},
+ {"1.0dev1", "!=", "1.0.0dev1", 0},
+
+ {"1.0a", "=", "1.0.0", 0},
+ {"1.0a", "<", "1.0.0", 0},
+ {"1.0a", "<=", "1.0.0", 0},
+ {"1.0a", ">", "1.0.0", 1},
+ {"1.0a", ">=", "1.0.0", 1},
+ {"1.0a", "!=", "1.0.0", 1},
+
+ {"1.0.3", "=", "2.0.0", 0},
+ {"1.0.3", "<", "2.0.0", 1},
+ {"1.0.3", "<=", "2.0.0", 1},
+ {"1.0.3", ">", "2.0.0", 0},
+ {"1.0.3", ">=", "2.0.0", 0},
+ {"1.0.3", "!=", "2.0.0", 1},
+
+ {"2022.1", "=", "2022.4", 0},
+ {"2022.1", "<", "2022.4", 1},
+ {"2022.1", "<=", "2022.4", 1},
+ {"2022.1", ">", "2022.4", 0},
+ {"2022.1", ">=", "2022.4", 0},
+ {"2022.1", "!=", "2022.4", 1},
+
+ {"1:2022.1", "=", "2022.4", 0},
+ {"1:2022.1", "<", "2022.4", 1},
+ {"1:2022.1", "<=", "2022.4", 1},
+ {"1:2022.1", ">", "2022.4", 0},
+ {"1:2022.1", ">=", "2022.4", 0},
+ {"1:2022.1", "!=", "2022.4", 1},
+
+ {"1:2022.1", "=", "2:2022.4", 0},
+ {"1:2022.1", "<", "2:2022.4", 1},
+ {"1:2022.1", "<=", "2:2022.4", 1},
+ {"1:2022.1", ">", "2:2022.4", 0},
+ {"1:2022.1", ">=", "2:2022.4", 0},
+ {"1:2022.1", "!=", "2:2022.4", 1},
+
+ {"2:2022.4", "=", "1:2022.1", 0},
+ {"2:2022.4", "<", "1:2022.1", 0},
+ {"2:2022.4", "<=", "1:2022.1", 0},
+ {"2:2022.4", ">", "1:2022.1", 1},
+ {"2:2022.4", ">=", "1:2022.1", 1},
+ {"2:2022.4", "!=", "1:2022.1", 1},
+
+ {"2022.1", "=", "2:2022.1", 0},
+ {"2022.1", "<", "2:2022.1", 1},
+ {"2022.1", "<=", "2:2022.1", 1},
+ {"2022.1", ">", "2:2022.1", 0},
+ {"2022.1", ">=", "2:2022.1", 0},
+ {"2022.1", "!=", "2:2022.1", 1},
+
+ {"2022.4", "=", "2022.1", 0},
+ {"2022.4", "<", "2022.1", 0},
+ {"2022.4", "<=", "2022.1", 0},
+ {"2022.4", ">", "2022.1", 1},
+ {"2022.4", ">=", "2022.1", 1},
+ {"2022.4", "!=", "2022.1", 1},
+
+ // Error cases
+ {NULL, "", "", -1},
+ {"", NULL, "", -1},
+ {"", "", NULL, -1},
+ {NULL, NULL, NULL, -1},
+ {"", "=", "", -1},
+ {" ", "=", " ", -1},
+ {"a", "", "a", -1},
+ {"a", "", "b", -1},
+ {"a", "@", "b", -1},
+};
+
+void run_cases_version_compare(void) {
+ int failed = 0;
+ const size_t size = sizeof(test_cases_version_compare) / sizeof(test_cases_version_compare[0]);
+ for (size_t i = 0; i < size; i++) {
+ int result = 0;
+ const struct TestCase_version_compare *test = &test_cases_version_compare[i];
+ const int op = version_parse_operator(test->op);
+ result = version_compare(op, test->a, test->b);
+ STASIS_ASSERT(test->expected == result, "unexpected result");
+
+ fprintf(stderr, "'%s' '%s' '%s' is %s (%d)",
+ test->a ? test->a : "NULL",
+ test->op ? test->op : "NULL",
+ test->b ? test->b : "NULL",
+ result == test->expected ? "EXPECTED" : "UNEXPECTED",
+ result);
+ if (test->expected != result) {
+ fprintf(stderr, " [FAILED: got %d, expected %d]\n", result, test->expected);
+ } else {
+ puts("");
+ }
+ }
+}
+
+int main(void) {
+ STASIS_TEST_BEGIN_MAIN();
+ STASIS_TEST_FUNC *tests[] = {
+ run_cases_version_compare,
+ };
+ STASIS_TEST_RUN(tests);
+
+ STASIS_TEST_END_MAIN();
+}