#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(); }