#include "tumbler.h" #include #include #include #include static void expect_string(const tumbler_t *t, const char *want) { char *got = NULL; tumbler_result_t r = tumbler_to_string(t, &got); assert(r.code == TUMBLER_OK); assert(strcmp(got, want) == 0); free(got); } static tumbler_t parse(const char *s) { tumbler_t t = {0}; tumbler_result_t r = tumbler_parse(s, &t); assert(r.code == TUMBLER_OK); return t; } static void test_compare(void) { const char *line[] = { "1", "1.1", "1.1.1", "1.1.2", "1.1.3", "1.2", "1.2.1", "1.2.2", "1.3", "1.4", "2" }; for (size_t i = 0; i + 1 < sizeof(line) / sizeof(line[0]); i++) { tumbler_t a = parse(line[i]); tumbler_t b = parse(line[i + 1]); assert(tumbler_compare(&a, &b) < 0); tumbler_free(&a); tumbler_free(&b); } { tumbler_t a = parse("1"); tumbler_t b = parse("1.0.0"); assert(tumbler_compare(&a, &b) == 0); tumbler_free(&a); tumbler_free(&b); } } static void test_arithmetic(void) { tumbler_t a, b, out = {0}; a = parse("3"); b = parse("2.16.3"); assert(tumbler_add(&a, &b, &out).code == TUMBLER_OK); expect_string(&out, "5.16.3"); tumbler_free(&a); tumbler_free(&b); tumbler_free(&out); a = parse("25.6.46.93"); b = parse("0.0.3.1.21"); assert(tumbler_add(&a, &b, &out).code == TUMBLER_OK); expect_string(&out, "25.6.49.1.21"); tumbler_free(&a); tumbler_free(&b); tumbler_free(&out); a = parse("1.4.3"); b = parse("1.1.1"); assert(tumbler_subtract_strong(&a, &b, &out).code == TUMBLER_OK); expect_string(&out, "0.3.3"); tumbler_free(&out); assert(tumbler_subtract(&a, &b, &out).code == TUMBLER_OK); expect_string(&out, "0.3.3"); tumbler_free(&a); tumbler_free(&b); tumbler_free(&out); a = parse("0.3.3.3.4.5.6"); b = parse("0.1.1.3.3.3.3"); assert(tumbler_subtract_weak(&a, &b, &out).code == TUMBLER_OK); expect_string(&out, "0.2"); tumbler_free(&a); tumbler_free(&b); tumbler_free(&out); a = parse("1.2.3"); b = parse("1.1"); assert(tumbler_subtract(&a, &b, &out).code == TUMBLER_OK); expect_string(&out, "0.1.3"); tumbler_free(&a); tumbler_free(&b); tumbler_free(&out); } int main(void) { test_compare(); test_arithmetic(); puts("tumbler tests: ok"); return 0; }