#ifndef _LSR_TEST_H #define _LSR_TEST_H #include #include #include "lsup_repo.h" /** * Minimal unit testing framework. * Inspired from http://www.jera.com/techinfo/jtns/jtn002.html */ /** @brief assert true. */ #define ASSERT(test, msg) do { \ if (!(test)) {\ fprintf(\ stderr, "!!! Assertion failed at %s:%d. Message: %s\n", \ __FILE__, __LINE__, msg); \ return -1; \ }\ } while (0) /** @brief Expect that two int values are equal. */ #define EXPECT_INT_EQ(got, exp) do { \ if ((exp) != (got)) {\ fprintf(\ stderr, "!!! Test failed at %s:%d. Expected: %lu; got: %lu\n",\ __FILE__, __LINE__, (size_t)(exp), (size_t)(got)); \ return -1; \ }\ } while (0) /** @brief Expect that two string values are equal. */ #define EXPECT_STR_EQ(got, exp) do { \ const char *_str1 = (exp); \ const char *_str2 = (got); \ if (((_str1 == NULL) ^ (_str2 == NULL)) || strcmp(_str1, _str2) != 0) {\ fprintf(\ stderr, "!!! Test failed at %s:%d. Expected: %s; got: %s\n", \ __FILE__, __LINE__, (exp), (got)); \ return -1; \ }\ } while (0) #define EXPECT_PASS(exp) do { \ int rc = (exp); \ if (rc != LSUP_OK) {\ fprintf(\ stderr, "!!! Test failed at %s:%d. Error: %s (%d)\n",\ __FILE__, __LINE__, LSUP_strerror(rc), rc); \ return -1; \ }\ } while (0) /** @brief Run a test by function name. * * The function must not accept any parameters. */ #define RUN(test) do { int rc = test(); tests_run++; \ if (rc != 0) return -1; } while (0) int tests_run; #endif /* _LSR_TEST_H */