source: mainline/uspace/lib/c/test/gsort.c@ 9bfa8c8

Last change on this file since 9bfa8c8 was d7f7a4a, checked in by Jiří Zárevúcky <zarevucky.jiri@…>, 3 years ago

Replace some license headers with SPDX identifier

Headers are replaced using tools/transorm-copyright.sh only
when it can be matched verbatim with the license header used
throughout most of the codebase.

  • Property mode set to 100644
File size: 1.4 KB
Line 
1/*
2 * SPDX-FileCopyrightText: 2019 Matthieu Riolo
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7#include <pcut/pcut.h>
8#include <gsort.h>
9
10static int cmp_func(void *a, void *b, void *param)
11{
12 int ia = *(int *)a;
13 int ib = *(int *)b;
14
15 if (ia == ib)
16 return 0;
17
18 return ia < ib ? -1 : 1;
19}
20
21PCUT_INIT;
22
23PCUT_TEST_SUITE(gsort);
24
25/* sort ascending */
26PCUT_TEST(gsort_asc)
27{
28 int size = 10;
29 int data[size];
30
31 for (int i = 0; i < size; i++) {
32 data[i] = i;
33 }
34
35 bool ret = gsort(data, size, sizeof(int), cmp_func, NULL);
36 PCUT_ASSERT_TRUE(ret);
37
38 for (int i = 0; i < size; i++) {
39 PCUT_ASSERT_INT_EQUALS(i, data[i]);
40 }
41}
42
43/* sort ascending including double entries of the same number */
44PCUT_TEST(gsort_asc_complex)
45{
46 int size = 10;
47 int data[size];
48
49 for (int i = 0; i < size; i++) {
50 data[i] = (i * 13) % 9;
51 }
52
53 data[0] = 2;
54 data[1] = 0;
55 data[2] = 4;
56 data[3] = 1;
57
58 bool ret = gsort(data, size, sizeof(int), cmp_func, NULL);
59 PCUT_ASSERT_TRUE(ret);
60
61 int prev = data[0];
62 for (int i = 1; i < size; i++) {
63 PCUT_ASSERT_TRUE(prev <= data[i]);
64 prev = data[i];
65 }
66}
67
68/* sort descanding */
69PCUT_TEST(gsort_desc)
70{
71 int size = 10;
72 int data[size];
73
74 for (int i = 0; i < size; i++) {
75 data[i] = size - i;
76 }
77
78 bool ret = gsort(&data, size, sizeof(int), cmp_func, NULL);
79 PCUT_ASSERT_TRUE(ret);
80
81 for (int i = 0; i < size; i++) {
82 PCUT_ASSERT_INT_EQUALS(i + 1, data[i]);
83 }
84}
85
86PCUT_EXPORT(gsort);
Note: See TracBrowser for help on using the repository browser.