diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/include/testing.h | 27 | ||||
| -rw-r--r-- | tests/test_version_compare.c | 172 |
2 files changed, 189 insertions, 10 deletions
diff --git a/tests/include/testing.h b/tests/include/testing.h index 80d5aa2..e446908 100644 --- a/tests/include/testing.h +++ b/tests/include/testing.h @@ -57,32 +57,39 @@ inline void stasis_testing_record_result_summary() { size_t failed = 0; size_t skipped = 0; size_t passed = 0; - int do_message; + int do_message = 0; + int do_reason = 0; static char status_msg[255] = {0}; for (size_t i = 0; i < stasis_test_results_i; i++) { if (stasis_test_results[i].status && stasis_test_results[i].skip) { strcpy(status_msg, "SKIP"); do_message = 1; + do_reason = 1; skipped++; } else if (!stasis_test_results[i].status) { strcpy(status_msg, "FAIL"); do_message = 1; + do_reason = 1; failed++; } else { +#ifdef STASIS_TEST_VERBOSE + do_message = 1; +#endif strcpy(status_msg, "PASS"); - do_message = 0; passed++; } - fprintf(stdout, "[%s] %s:%d :: %s() => %s", - status_msg, - stasis_test_results[i].filename, - stasis_test_results[i].lineno, - stasis_test_results[i].funcname, - stasis_test_results[i].msg_assertion); if (do_message) { - fprintf(stdout, "\n \\_ %s", stasis_test_results[i].msg_reason); + fprintf(stdout, "[%s] %s:%d :: %s() => %s", + status_msg, + stasis_test_results[i].filename, + stasis_test_results[i].lineno, + stasis_test_results[i].funcname, + stasis_test_results[i].msg_assertion); + if (do_reason) { + fprintf(stdout, "\n \\_ %s", stasis_test_results[i].msg_reason); + } + fprintf(stdout, "\n"); } - fprintf(stdout, "\n"); } fprintf(stdout, "\n[UNIT] %zu tests passed, %zu tests failed, %zu tests skipped out of %zu\n", passed, failed, skipped, stasis_test_results_i); } diff --git a/tests/test_version_compare.c b/tests/test_version_compare.c new file mode 100644 index 0000000..2a3458f --- /dev/null +++ b/tests/test_version_compare.c @@ -0,0 +1,172 @@ +#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) { + 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(); +} |
