opt: allow parameter names in arguments.
[ccan] / ccan / asort / test / run.c
1 #include <ccan/asort/asort.h>
2 #include <ccan/asort/asort.c>
3 #include <ccan/array_size/array_size.h>
4 #include <ccan/tap/tap.h>
5 #include <limits.h>
6 #include <stdbool.h>
7
8 static int test_cmp(const int *key, const int *elt, int *flag)
9 {
10         if (*key < *elt)
11                 return -1 * *flag;
12         else if (*key > *elt)
13                 return 1 * *flag;
14
15         return 0;
16 }
17
18 static bool is_sorted(const int arr[], unsigned int size)
19 {
20         unsigned int i;
21
22         for (i = 1; i < size; i++)
23                 if (arr[i] < arr[i-1])
24                         return false;
25         return true;
26 }
27
28 static bool is_reverse_sorted(const int arr[], unsigned int size)
29 {
30         unsigned int i;
31
32         for (i = 1; i < size; i++)
33                 if (arr[i] > arr[i-1])
34                         return false;
35         return true;
36 }
37
38 static void psuedo_random_array(int arr[], unsigned int size)
39 {
40         unsigned int i;
41
42         for (i = 0; i < size; i++)
43                 arr[i] = i * (INT_MAX / 4 - 7);
44 }
45
46 #define TEST_SIZE 100
47
48 int main(void)
49 {
50         int tmparr[TEST_SIZE];
51         int multiplier = 1;
52
53         plan_tests(4);
54
55         psuedo_random_array(tmparr, TEST_SIZE);
56         ok1(!is_sorted(tmparr, TEST_SIZE));
57         ok1(!is_reverse_sorted(tmparr, TEST_SIZE));
58
59         asort(tmparr, TEST_SIZE, test_cmp, &multiplier);
60         ok1(is_sorted(tmparr, TEST_SIZE));
61
62         psuedo_random_array(tmparr, TEST_SIZE);
63         multiplier = -1;
64         asort(tmparr, TEST_SIZE, test_cmp, &multiplier);
65         ok1(is_reverse_sorted(tmparr, TEST_SIZE));
66
67         return exit_status();
68 }