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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
#include <ccan/asort/asort.h>
#include <ccan/asort/asort.c>
#include <ccan/array_size/array_size.h>
#include <ccan/tap/tap.h>
#include <limits.h>
#include <stdbool.h>
static int test_cmp(const int *key, const int *elt, int *flag)
{
if (*key < *elt)
return -1 * *flag;
else if (*key > *elt)
return 1 * *flag;
return 0;
}
static bool is_sorted(const int arr[], unsigned int size)
{
unsigned int i;
for (i = 1; i < size; i++)
if (arr[i] < arr[i-1])
return false;
return true;
}
static bool is_reverse_sorted(const int arr[], unsigned int size)
{
unsigned int i;
for (i = 1; i < size; i++)
if (arr[i] > arr[i-1])
return false;
return true;
}
static void psuedo_random_array(int arr[], unsigned int size)
{
unsigned int i;
for (i = 0; i < size; i++)
arr[i] = i * (INT_MAX / 4 - 7);
}
#define TEST_SIZE 100
int main(void)
{
int tmparr[TEST_SIZE];
int multiplier = 1;
plan_tests(4);
psuedo_random_array(tmparr, TEST_SIZE);
ok1(!is_sorted(tmparr, TEST_SIZE));
ok1(!is_reverse_sorted(tmparr, TEST_SIZE));
asort(tmparr, TEST_SIZE, test_cmp, &multiplier);
ok1(is_sorted(tmparr, TEST_SIZE));
psuedo_random_array(tmparr, TEST_SIZE);
multiplier = -1;
asort(tmparr, TEST_SIZE, test_cmp, &multiplier);
ok1(is_reverse_sorted(tmparr, TEST_SIZE));
return exit_status();
}
|