minmax: New module, safe min and max macros
[ccan] / ccan / minmax / test / run.c
1 #include <ccan/minmax/minmax.h>
2 #include <ccan/tap/tap.h>
3
4 int main(void)
5 {
6         int a, b;
7
8         /* This is how many tests you plan to run */
9         plan_tests(23);
10
11         ok1(min(1, 2) == 1);
12         ok1(max(1, 2) == 2);
13         ok1(min(-1, 1) == -1);
14         ok1(max(-1, 1) == 1);
15
16         ok1(min(-1U, 1U) == 1U);
17         ok1(max(-1U, 1U) == -1U);
18
19         ok1(max_t(signed int, -1, 1U) == 1);
20         ok1(max_t(unsigned int, -1, 1) == -1U);
21
22         ok1(min_t(signed int, -1, 1U) == -1);
23         ok1(min_t(unsigned int, -1, 1) == 1U);
24
25         ok1(clamp(1, 2, 5) == 2);
26         ok1(clamp(2, 2, 5) == 2);
27         ok1(clamp(3, 2, 5) == 3);
28         ok1(clamp(5, 2, 5) == 5);
29         ok1(clamp(6, 2, 5) == 5);
30
31         ok1(clamp(-1, 2, 5) == 2);
32         ok1(clamp(-1U, 2U, 5U) == 5U);
33
34         ok1(clamp_t(signed int, -1, 2, 5) == 2);
35         ok1(clamp_t(unsigned int, -1, 2, 5) == 5);
36
37         /* test for double evaluation */
38         a = b = 0;
39         ok1(min(a++, b++) == 0);
40         ok1((a == 1) && (b == 1));
41         ok1(max(++a, ++b) == 2);
42         ok1((a == 2) && (b == 2));
43
44         /* This exits depending on whether all tests passed */
45         return exit_status();
46 }