xref: /aosp_15_r20/external/kmod/testsuite/test-array.c (revision cc4ad7da8cefe208cb129ac2aa9a357c7c72deb2)
1*cc4ad7daSAndroid Build Coastguard Worker /*
2*cc4ad7daSAndroid Build Coastguard Worker  * Copyright (C)  2014 Intel Corporation. All rights reserved.
3*cc4ad7daSAndroid Build Coastguard Worker  *
4*cc4ad7daSAndroid Build Coastguard Worker  * This program is free software; you can redistribute it and/or
5*cc4ad7daSAndroid Build Coastguard Worker  * modify it under the terms of the GNU Lesser General Public
6*cc4ad7daSAndroid Build Coastguard Worker  * License as published by the Free Software Foundation; either
7*cc4ad7daSAndroid Build Coastguard Worker  * version 2.1 of the License, or (at your option) any later version.
8*cc4ad7daSAndroid Build Coastguard Worker  *
9*cc4ad7daSAndroid Build Coastguard Worker  * This program is distributed in the hope that it will be useful,
10*cc4ad7daSAndroid Build Coastguard Worker  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11*cc4ad7daSAndroid Build Coastguard Worker  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12*cc4ad7daSAndroid Build Coastguard Worker  * Lesser General Public License for more details.
13*cc4ad7daSAndroid Build Coastguard Worker  *
14*cc4ad7daSAndroid Build Coastguard Worker  * You should have received a copy of the GNU Lesser General Public
15*cc4ad7daSAndroid Build Coastguard Worker  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
16*cc4ad7daSAndroid Build Coastguard Worker  */
17*cc4ad7daSAndroid Build Coastguard Worker 
18*cc4ad7daSAndroid Build Coastguard Worker #include <errno.h>
19*cc4ad7daSAndroid Build Coastguard Worker #include <stddef.h>
20*cc4ad7daSAndroid Build Coastguard Worker #include <stdio.h>
21*cc4ad7daSAndroid Build Coastguard Worker #include <stdlib.h>
22*cc4ad7daSAndroid Build Coastguard Worker #include <string.h>
23*cc4ad7daSAndroid Build Coastguard Worker #include <unistd.h>
24*cc4ad7daSAndroid Build Coastguard Worker 
25*cc4ad7daSAndroid Build Coastguard Worker #include <shared/array.h>
26*cc4ad7daSAndroid Build Coastguard Worker 
27*cc4ad7daSAndroid Build Coastguard Worker #include "testsuite.h"
28*cc4ad7daSAndroid Build Coastguard Worker 
test_array_append1(const struct test * t)29*cc4ad7daSAndroid Build Coastguard Worker static int test_array_append1(const struct test *t)
30*cc4ad7daSAndroid Build Coastguard Worker {
31*cc4ad7daSAndroid Build Coastguard Worker 	struct array array;
32*cc4ad7daSAndroid Build Coastguard Worker 	const char *c1 = "test1";
33*cc4ad7daSAndroid Build Coastguard Worker 
34*cc4ad7daSAndroid Build Coastguard Worker 	array_init(&array, 2);
35*cc4ad7daSAndroid Build Coastguard Worker 	array_append(&array, c1);
36*cc4ad7daSAndroid Build Coastguard Worker 	assert_return(array.count == 1, EXIT_FAILURE);
37*cc4ad7daSAndroid Build Coastguard Worker 	assert_return(array.array[0] == c1, EXIT_FAILURE);
38*cc4ad7daSAndroid Build Coastguard Worker 	array_free_array(&array);
39*cc4ad7daSAndroid Build Coastguard Worker 
40*cc4ad7daSAndroid Build Coastguard Worker 	return 0;
41*cc4ad7daSAndroid Build Coastguard Worker }
42*cc4ad7daSAndroid Build Coastguard Worker DEFINE_TEST(test_array_append1,
43*cc4ad7daSAndroid Build Coastguard Worker 		.description = "test simple array append");
44*cc4ad7daSAndroid Build Coastguard Worker 
45*cc4ad7daSAndroid Build Coastguard Worker 
test_array_append2(const struct test * t)46*cc4ad7daSAndroid Build Coastguard Worker static int test_array_append2(const struct test *t)
47*cc4ad7daSAndroid Build Coastguard Worker {
48*cc4ad7daSAndroid Build Coastguard Worker 	struct array array;
49*cc4ad7daSAndroid Build Coastguard Worker 	const char *c1 = "test1";
50*cc4ad7daSAndroid Build Coastguard Worker 	const char *c2 = "test2";
51*cc4ad7daSAndroid Build Coastguard Worker 	const char *c3 = "test3";
52*cc4ad7daSAndroid Build Coastguard Worker 
53*cc4ad7daSAndroid Build Coastguard Worker 	array_init(&array, 2);
54*cc4ad7daSAndroid Build Coastguard Worker 	array_append(&array, c1);
55*cc4ad7daSAndroid Build Coastguard Worker 	array_append(&array, c2);
56*cc4ad7daSAndroid Build Coastguard Worker 	array_append(&array, c3);
57*cc4ad7daSAndroid Build Coastguard Worker 	assert_return(array.count == 3, EXIT_FAILURE);
58*cc4ad7daSAndroid Build Coastguard Worker 	assert_return(array.array[0] == c1, EXIT_FAILURE);
59*cc4ad7daSAndroid Build Coastguard Worker 	assert_return(array.array[1] == c2, EXIT_FAILURE);
60*cc4ad7daSAndroid Build Coastguard Worker 	assert_return(array.array[2] == c3, EXIT_FAILURE);
61*cc4ad7daSAndroid Build Coastguard Worker 	array_free_array(&array);
62*cc4ad7daSAndroid Build Coastguard Worker 
63*cc4ad7daSAndroid Build Coastguard Worker 	return 0;
64*cc4ad7daSAndroid Build Coastguard Worker }
65*cc4ad7daSAndroid Build Coastguard Worker DEFINE_TEST(test_array_append2,
66*cc4ad7daSAndroid Build Coastguard Worker 		.description = "test array append over step");
67*cc4ad7daSAndroid Build Coastguard Worker 
test_array_append_unique(const struct test * t)68*cc4ad7daSAndroid Build Coastguard Worker static int test_array_append_unique(const struct test *t)
69*cc4ad7daSAndroid Build Coastguard Worker {
70*cc4ad7daSAndroid Build Coastguard Worker 	struct array array;
71*cc4ad7daSAndroid Build Coastguard Worker 	const char *c1 = "test1";
72*cc4ad7daSAndroid Build Coastguard Worker 	const char *c2 = "test2";
73*cc4ad7daSAndroid Build Coastguard Worker 	const char *c3 = "test3";
74*cc4ad7daSAndroid Build Coastguard Worker 
75*cc4ad7daSAndroid Build Coastguard Worker 	array_init(&array, 2);
76*cc4ad7daSAndroid Build Coastguard Worker 	array_append_unique(&array, c1);
77*cc4ad7daSAndroid Build Coastguard Worker 	array_append_unique(&array, c2);
78*cc4ad7daSAndroid Build Coastguard Worker 	array_append_unique(&array, c3);
79*cc4ad7daSAndroid Build Coastguard Worker 	array_append_unique(&array, c3);
80*cc4ad7daSAndroid Build Coastguard Worker 	array_append_unique(&array, c2);
81*cc4ad7daSAndroid Build Coastguard Worker 	array_append_unique(&array, c1);
82*cc4ad7daSAndroid Build Coastguard Worker 	assert_return(array.count == 3, EXIT_FAILURE);
83*cc4ad7daSAndroid Build Coastguard Worker 	assert_return(array.array[0] == c1, EXIT_FAILURE);
84*cc4ad7daSAndroid Build Coastguard Worker 	assert_return(array.array[1] == c2, EXIT_FAILURE);
85*cc4ad7daSAndroid Build Coastguard Worker 	assert_return(array.array[2] == c3, EXIT_FAILURE);
86*cc4ad7daSAndroid Build Coastguard Worker 	array_free_array(&array);
87*cc4ad7daSAndroid Build Coastguard Worker 
88*cc4ad7daSAndroid Build Coastguard Worker 	return 0;
89*cc4ad7daSAndroid Build Coastguard Worker }
90*cc4ad7daSAndroid Build Coastguard Worker DEFINE_TEST(test_array_append_unique,
91*cc4ad7daSAndroid Build Coastguard Worker 		.description = "test array append unique");
92*cc4ad7daSAndroid Build Coastguard Worker 
strptrcmp(const void * pa,const void * pb)93*cc4ad7daSAndroid Build Coastguard Worker static int strptrcmp(const void *pa, const void *pb) {
94*cc4ad7daSAndroid Build Coastguard Worker 	const char *a = *(const char **)pa;
95*cc4ad7daSAndroid Build Coastguard Worker 	const char *b = *(const char **)pb;
96*cc4ad7daSAndroid Build Coastguard Worker 
97*cc4ad7daSAndroid Build Coastguard Worker 	return strcmp(a, b);
98*cc4ad7daSAndroid Build Coastguard Worker }
99*cc4ad7daSAndroid Build Coastguard Worker 
test_array_sort(const struct test * t)100*cc4ad7daSAndroid Build Coastguard Worker static int test_array_sort(const struct test *t)
101*cc4ad7daSAndroid Build Coastguard Worker {
102*cc4ad7daSAndroid Build Coastguard Worker 	struct array array;
103*cc4ad7daSAndroid Build Coastguard Worker 	const char *c1 = "test1";
104*cc4ad7daSAndroid Build Coastguard Worker 	const char *c2 = "test2";
105*cc4ad7daSAndroid Build Coastguard Worker 	const char *c3 = "test3";
106*cc4ad7daSAndroid Build Coastguard Worker 
107*cc4ad7daSAndroid Build Coastguard Worker 	array_init(&array, 2);
108*cc4ad7daSAndroid Build Coastguard Worker 	array_append(&array, c1);
109*cc4ad7daSAndroid Build Coastguard Worker 	array_append(&array, c2);
110*cc4ad7daSAndroid Build Coastguard Worker 	array_append(&array, c3);
111*cc4ad7daSAndroid Build Coastguard Worker 	array_append(&array, c2);
112*cc4ad7daSAndroid Build Coastguard Worker 	array_append(&array, c3);
113*cc4ad7daSAndroid Build Coastguard Worker 	array_append(&array, c1);
114*cc4ad7daSAndroid Build Coastguard Worker 	array_sort(&array, strptrcmp);
115*cc4ad7daSAndroid Build Coastguard Worker 	assert_return(array.count == 6, EXIT_FAILURE);
116*cc4ad7daSAndroid Build Coastguard Worker 	assert_return(array.array[0] == c1, EXIT_FAILURE);
117*cc4ad7daSAndroid Build Coastguard Worker 	assert_return(array.array[1] == c1, EXIT_FAILURE);
118*cc4ad7daSAndroid Build Coastguard Worker 	assert_return(array.array[2] == c2, EXIT_FAILURE);
119*cc4ad7daSAndroid Build Coastguard Worker 	assert_return(array.array[3] == c2, EXIT_FAILURE);
120*cc4ad7daSAndroid Build Coastguard Worker 	assert_return(array.array[4] == c3, EXIT_FAILURE);
121*cc4ad7daSAndroid Build Coastguard Worker 	assert_return(array.array[5] == c3, EXIT_FAILURE);
122*cc4ad7daSAndroid Build Coastguard Worker 	array_free_array(&array);
123*cc4ad7daSAndroid Build Coastguard Worker 
124*cc4ad7daSAndroid Build Coastguard Worker 	return 0;
125*cc4ad7daSAndroid Build Coastguard Worker }
126*cc4ad7daSAndroid Build Coastguard Worker DEFINE_TEST(test_array_sort,
127*cc4ad7daSAndroid Build Coastguard Worker 		.description = "test array sort");
128*cc4ad7daSAndroid Build Coastguard Worker 
test_array_remove_at(const struct test * t)129*cc4ad7daSAndroid Build Coastguard Worker static int test_array_remove_at(const struct test *t)
130*cc4ad7daSAndroid Build Coastguard Worker {
131*cc4ad7daSAndroid Build Coastguard Worker 	struct array array;
132*cc4ad7daSAndroid Build Coastguard Worker 	const char *c1 = "test1";
133*cc4ad7daSAndroid Build Coastguard Worker 	const char *c2 = "test2";
134*cc4ad7daSAndroid Build Coastguard Worker 	const char *c3 = "test3";
135*cc4ad7daSAndroid Build Coastguard Worker 
136*cc4ad7daSAndroid Build Coastguard Worker 	array_init(&array, 2);
137*cc4ad7daSAndroid Build Coastguard Worker 	array_append(&array, c1);
138*cc4ad7daSAndroid Build Coastguard Worker 	array_append(&array, c2);
139*cc4ad7daSAndroid Build Coastguard Worker 	array_append(&array, c3);
140*cc4ad7daSAndroid Build Coastguard Worker 
141*cc4ad7daSAndroid Build Coastguard Worker 	array_remove_at(&array, 2);
142*cc4ad7daSAndroid Build Coastguard Worker 	assert_return(array.count == 2, EXIT_FAILURE);
143*cc4ad7daSAndroid Build Coastguard Worker 	assert_return(array.array[0] == c1, EXIT_FAILURE);
144*cc4ad7daSAndroid Build Coastguard Worker 	assert_return(array.array[1] == c2, EXIT_FAILURE);
145*cc4ad7daSAndroid Build Coastguard Worker 
146*cc4ad7daSAndroid Build Coastguard Worker 	array_remove_at(&array, 0);
147*cc4ad7daSAndroid Build Coastguard Worker 	assert_return(array.count == 1, EXIT_FAILURE);
148*cc4ad7daSAndroid Build Coastguard Worker 	assert_return(array.array[0] == c2, EXIT_FAILURE);
149*cc4ad7daSAndroid Build Coastguard Worker 
150*cc4ad7daSAndroid Build Coastguard Worker 	array_remove_at(&array, 0);
151*cc4ad7daSAndroid Build Coastguard Worker 	assert_return(array.count == 0, EXIT_FAILURE);
152*cc4ad7daSAndroid Build Coastguard Worker 
153*cc4ad7daSAndroid Build Coastguard Worker 	array_append(&array, c1);
154*cc4ad7daSAndroid Build Coastguard Worker 	array_append(&array, c2);
155*cc4ad7daSAndroid Build Coastguard Worker 	array_append(&array, c3);
156*cc4ad7daSAndroid Build Coastguard Worker 
157*cc4ad7daSAndroid Build Coastguard Worker 	array_remove_at(&array, 1);
158*cc4ad7daSAndroid Build Coastguard Worker 	assert_return(array.count == 2, EXIT_FAILURE);
159*cc4ad7daSAndroid Build Coastguard Worker 	assert_return(array.array[0] == c1, EXIT_FAILURE);
160*cc4ad7daSAndroid Build Coastguard Worker 	assert_return(array.array[1] == c3, EXIT_FAILURE);
161*cc4ad7daSAndroid Build Coastguard Worker 
162*cc4ad7daSAndroid Build Coastguard Worker 	array_free_array(&array);
163*cc4ad7daSAndroid Build Coastguard Worker 
164*cc4ad7daSAndroid Build Coastguard Worker 	return 0;
165*cc4ad7daSAndroid Build Coastguard Worker }
166*cc4ad7daSAndroid Build Coastguard Worker DEFINE_TEST(test_array_remove_at,
167*cc4ad7daSAndroid Build Coastguard Worker 		.description = "test array remove at");
168*cc4ad7daSAndroid Build Coastguard Worker 
test_array_pop(const struct test * t)169*cc4ad7daSAndroid Build Coastguard Worker static int test_array_pop(const struct test *t)
170*cc4ad7daSAndroid Build Coastguard Worker {
171*cc4ad7daSAndroid Build Coastguard Worker 	struct array array;
172*cc4ad7daSAndroid Build Coastguard Worker 	const char *c1 = "test1";
173*cc4ad7daSAndroid Build Coastguard Worker 	const char *c2 = "test2";
174*cc4ad7daSAndroid Build Coastguard Worker 	const char *c3 = "test3";
175*cc4ad7daSAndroid Build Coastguard Worker 
176*cc4ad7daSAndroid Build Coastguard Worker 	array_init(&array, 2);
177*cc4ad7daSAndroid Build Coastguard Worker 	array_append(&array, c1);
178*cc4ad7daSAndroid Build Coastguard Worker 	array_append(&array, c2);
179*cc4ad7daSAndroid Build Coastguard Worker 	array_append(&array, c3);
180*cc4ad7daSAndroid Build Coastguard Worker 
181*cc4ad7daSAndroid Build Coastguard Worker 
182*cc4ad7daSAndroid Build Coastguard Worker 	array_pop(&array);
183*cc4ad7daSAndroid Build Coastguard Worker 
184*cc4ad7daSAndroid Build Coastguard Worker 	assert_return(array.count == 2, EXIT_FAILURE);
185*cc4ad7daSAndroid Build Coastguard Worker 	assert_return(array.array[0] == c1, EXIT_FAILURE);
186*cc4ad7daSAndroid Build Coastguard Worker 	assert_return(array.array[1] == c2, EXIT_FAILURE);
187*cc4ad7daSAndroid Build Coastguard Worker 
188*cc4ad7daSAndroid Build Coastguard Worker 	array_pop(&array);
189*cc4ad7daSAndroid Build Coastguard Worker 	array_pop(&array);
190*cc4ad7daSAndroid Build Coastguard Worker 
191*cc4ad7daSAndroid Build Coastguard Worker 	assert_return(array.count == 0, EXIT_FAILURE);
192*cc4ad7daSAndroid Build Coastguard Worker 
193*cc4ad7daSAndroid Build Coastguard Worker 	array_free_array(&array);
194*cc4ad7daSAndroid Build Coastguard Worker 
195*cc4ad7daSAndroid Build Coastguard Worker 	return 0;
196*cc4ad7daSAndroid Build Coastguard Worker }
197*cc4ad7daSAndroid Build Coastguard Worker 
198*cc4ad7daSAndroid Build Coastguard Worker DEFINE_TEST(test_array_pop,
199*cc4ad7daSAndroid Build Coastguard Worker 		.description = "test array pop");
200*cc4ad7daSAndroid Build Coastguard Worker 
201*cc4ad7daSAndroid Build Coastguard Worker TESTSUITE_MAIN();
202