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