summaryrefslogtreecommitdiff
path: root/src/test/minunit.h
blob: b1bfda7458842c0c2fc82105f8a00f5e267f1c48 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#ifndef MINUNIT_H
#define MINUNIT_H

#include <stdio.h>

#define STR_IMPL(x) #x
#define STR(x) STR_IMPL(x)

#define MU_INDENT "   "

/* minunit testing macros from /www.jera.com/techinfo/jtns/jtn002.html */
#define mu_assert(test, message) do { if (!(test)) return message "\n" MU_INDENT "[" __FILE__ ":" STR(__LINE__) "]"; } while (0)
#define mu_assert_equal(a, b) mu_assert(a == b, "'" #a "' is not equal to '" #b "'")
#define mu_assert_unequal(a, b) mu_assert(a != b, "'" #a "' is equal to '" #b "'")
#define mu_assert_streq(a, b) mu_assert(strcmp(a, b) == 0, "'" #a "' is not equal to '" #b "'")

#define mu_run_test(name, test) do {					\
      const char *message = test();					\
      tests_run++;							\
      if (message) {							\
	 printf(MU_INDENT "test '%s' failed: %s\n", name, message);	\
	 tests_failed++;						\
      }									\
   } while (0)
#define mu_run_suite(suite) do {		\
      int tests_run_old = tests_run;		\
      printf("suite: " #suite "\n");		\
      suite();					\
      printf(MU_INDENT "ran %d tests\n\n",	\
	     tests_run - tests_run_old);	\
   } while(0)
#define mu_tests_finished() do {					\
      printf("ran %d tests, %d failed\n", tests_run, tests_failed);	\
      return tests_failed;						\
   } while(0)

#define mu_test const char *

extern int tests_run, tests_failed;

#endif