Line data Source code
1 : /**
2 : * @file
3 : *
4 : * @brief
5 : *
6 : * @copyright BSD License (see LICENSE.md or https://www.libelektra.org)
7 : */
8 :
9 : #include <kdbease.h>
10 :
11 : #include "tests.h"
12 :
13 2 : static void test_array (void)
14 : {
15 2 : printf ("Test array\n");
16 :
17 2 : Key * k = keyNew ("user/array/#0", KEY_END);
18 2 : succeed_if (!elektraArrayIncName (k), "increment array entry name returned error");
19 2 : succeed_if_same_string (keyName (k), "user/array/#1");
20 2 : succeed_if (!elektraArrayIncName (k), "increment array entry name returned error");
21 2 : succeed_if_same_string (keyName (k), "user/array/#2");
22 2 : succeed_if (!elektraArrayIncName (k), "increment array entry name returned error");
23 2 : succeed_if_same_string (keyName (k), "user/array/#3");
24 2 : succeed_if (!elektraArrayIncName (k), "increment array entry name returned error");
25 2 : succeed_if_same_string (keyName (k), "user/array/#4");
26 2 : succeed_if (!elektraArrayIncName (k), "increment array entry name returned error");
27 2 : succeed_if_same_string (keyName (k), "user/array/#5");
28 2 : succeed_if (!elektraArrayIncName (k), "increment array entry name returned error");
29 2 : succeed_if_same_string (keyName (k), "user/array/#6");
30 2 : succeed_if (!elektraArrayIncName (k), "increment array entry name returned error");
31 2 : succeed_if_same_string (keyName (k), "user/array/#7");
32 2 : succeed_if (!elektraArrayIncName (k), "increment array entry name returned error");
33 2 : succeed_if_same_string (keyName (k), "user/array/#8");
34 2 : succeed_if (!elektraArrayIncName (k), "increment array entry name returned error");
35 2 : succeed_if_same_string (keyName (k), "user/array/#9");
36 2 : succeed_if (!elektraArrayIncName (k), "increment array entry name returned error");
37 2 : succeed_if_same_string (keyName (k), "user/array/#_10");
38 2 : succeed_if (!elektraArrayIncName (k), "increment array entry name returned error");
39 2 : succeed_if_same_string (keyName (k), "user/array/#_11");
40 2 : succeed_if (!elektraArrayIncName (k), "increment array entry name returned error");
41 2 : succeed_if_same_string (keyName (k), "user/array/#_12");
42 2 : succeed_if (!elektraArrayIncName (k), "increment array entry name returned error");
43 2 : succeed_if_same_string (keyName (k), "user/array/#_13");
44 2 : succeed_if (!elektraArrayIncName (k), "increment array entry name returned error");
45 2 : succeed_if_same_string (keyName (k), "user/array/#_14");
46 2 : succeed_if (!elektraArrayIncName (k), "increment array entry name returned error");
47 2 : succeed_if_same_string (keyName (k), "user/array/#_15");
48 2 : succeed_if (!elektraArrayIncName (k), "increment array entry name returned error");
49 2 : succeed_if_same_string (keyName (k), "user/array/#_16");
50 2 : succeed_if (!elektraArrayIncName (k), "increment array entry name returned error");
51 2 : succeed_if_same_string (keyName (k), "user/array/#_17");
52 2 : succeed_if (!elektraArrayIncName (k), "increment array entry name returned error");
53 2 : succeed_if_same_string (keyName (k), "user/array/#_18");
54 2 : succeed_if (!elektraArrayIncName (k), "increment array entry name returned error");
55 2 : succeed_if_same_string (keyName (k), "user/array/#_19");
56 2 : succeed_if (!elektraArrayIncName (k), "increment array entry name returned error");
57 2 : succeed_if_same_string (keyName (k), "user/array/#_20");
58 2 : succeed_if (!elektraArrayIncName (k), "increment array entry name returned error");
59 2 : succeed_if_same_string (keyName (k), "user/array/#_21");
60 2 : succeed_if (!elektraArrayIncName (k), "increment array entry name returned error");
61 2 : succeed_if_same_string (keyName (k), "user/array/#_22");
62 2 : succeed_if (!elektraArrayIncName (k), "increment array entry name returned error");
63 2 : succeed_if_same_string (keyName (k), "user/array/#_23");
64 2 : succeed_if (!elektraArrayIncName (k), "increment array entry name returned error");
65 2 : succeed_if_same_string (keyName (k), "user/array/#_24");
66 2 : succeed_if (!elektraArrayIncName (k), "increment array entry name returned error");
67 2 : succeed_if_same_string (keyName (k), "user/array/#_25");
68 2 : succeed_if (!elektraArrayIncName (k), "increment array entry name returned error");
69 2 : succeed_if_same_string (keyName (k), "user/array/#_26");
70 2 : succeed_if (!elektraArrayIncName (k), "increment array entry name returned error");
71 2 : succeed_if_same_string (keyName (k), "user/array/#_27");
72 2 : succeed_if (!elektraArrayIncName (k), "increment array entry name returned error");
73 2 : succeed_if_same_string (keyName (k), "user/array/#_28");
74 2 : succeed_if (!elektraArrayIncName (k), "increment array entry name returned error");
75 2 : succeed_if_same_string (keyName (k), "user/array/#_29");
76 2 : succeed_if (!elektraArrayIncName (k), "increment array entry name returned error");
77 138 : for (int i = 30; i < 99; ++i)
78 : {
79 138 : succeed_if (!elektraArrayIncName (k), "increment array entry in loop returned error");
80 : }
81 2 : succeed_if_same_string (keyName (k), "user/array/#_99");
82 2 : succeed_if (!elektraArrayIncName (k), "increment array entry name returned error");
83 2 : succeed_if_same_string (keyName (k), "user/array/#__100");
84 1798 : for (int i = 101; i < 1000; ++i)
85 : {
86 1798 : succeed_if (!elektraArrayIncName (k), "increment array entry in loop returned error");
87 : }
88 2 : succeed_if_same_string (keyName (k), "user/array/#__999");
89 2 : succeed_if (!elektraArrayIncName (k), "increment array entry name returned error");
90 2 : succeed_if_same_string (keyName (k), "user/array/#___1000");
91 2 : keySetBaseName (k, "#_________4000000000");
92 2 : succeed_if (!elektraArrayIncName (k), "increment array entry name returned error");
93 2 : succeed_if_same_string (keyName (k), "user/array/#_________4000000001");
94 2 : keyDel (k);
95 2 : }
96 :
97 2 : static void test_arrayDec (void)
98 : {
99 2 : printf ("Decrement array indizes\n");
100 :
101 2 : Key * k = keyNew ("user/array/#0", KEY_END);
102 2 : succeed_if (elektraArrayDecName (k) == -1, "Decrementing array index 0 did not fail");
103 2 : keyDel (k);
104 :
105 2 : k = keyNew ("user/array/#___1337", KEY_END);
106 2 : succeed_if (elektraArrayDecName (k) == 0, "Unable to decrement array index 1337");
107 2 : succeed_if_same_string (keyName (k), "user/array/#___1336");
108 2 : succeed_if (elektraArrayDecName (k) == 0, "Unable to decrement array index 1336");
109 2 : succeed_if_same_string (keyName (k), "user/array/#___1335");
110 2 : keyDel (k);
111 :
112 2 : k = keyNew ("user/array/#_________4000000000", KEY_END);
113 2 : succeed_if (elektraArrayDecName (k) == 0, "Unable to decrement array index 4000000000");
114 2 : succeed_if_same_string (keyName (k), "user/array/#_________3999999999");
115 2 : keyDel (k);
116 2 : }
117 :
118 2 : static void test_noArray (void)
119 : {
120 2 : printf ("Test no array\n");
121 2 : Key * k = keyNew ("user/noarray", KEY_END);
122 :
123 2 : succeed_if (elektraArrayIncName (0) == -1, "null pointer");
124 2 : succeed_if (elektraArrayIncName (k) == -1, "no array");
125 :
126 2 : keyDel (k);
127 2 : }
128 :
129 2 : static void test_startArray (void)
130 : {
131 2 : printf ("Test start array\n");
132 2 : Key * k = keyNew ("user/startarray/#", KEY_END);
133 :
134 2 : succeed_if (elektraArrayIncName (k) == 0, "no array start");
135 2 : succeed_if_same_string (keyName (k), "user/startarray/#0");
136 2 : succeed_if (elektraArrayIncName (k) == 0, "no array inc");
137 2 : succeed_if_same_string (keyName (k), "user/startarray/#1");
138 :
139 2 : keyDel (k);
140 2 : }
141 :
142 2 : static void test_getArray (void)
143 : {
144 2 : printf ("Test get array");
145 :
146 2 : KeySet * keys =
147 2 : ksNew (10, keyNew ("user/test/key1", KEY_END), keyNew ("user/test/key2", KEY_END), keyNew ("user/test/array", KEY_END),
148 : keyNew ("user/test/array/#0", KEY_END), keyNew ("user/test/array/#0/below", KEY_END),
149 : keyNew ("user/test/array/#1", KEY_END), keyNew ("user/test/yetanotherkey", KEY_END), KS_END);
150 :
151 2 : Key * arrayParent = keyNew ("user/test/array", KEY_END);
152 2 : KeySet * array = elektraArrayGet (arrayParent, keys);
153 :
154 2 : succeed_if (array, "The getarray function did not return a proper keyset");
155 2 : succeed_if (ksGetSize (array) == 2, "the array contains a wrong number of elements");
156 2 : succeed_if (ksLookupByName (array, "user/test/array/#0", KDB_O_NONE), "the array does not contain #0");
157 2 : succeed_if (ksLookupByName (array, "user/test/array/#1", KDB_O_NONE), "the array does not contain #1");
158 :
159 2 : keyDel (arrayParent);
160 2 : ksDel (array);
161 2 : ksDel (keys);
162 2 : }
163 :
164 :
165 2 : static void test_getArrayNext (void)
166 : {
167 2 : printf ("Test get array next");
168 :
169 2 : KeySet * array = ksNew (10, keyNew ("user/test/array/#0", KEY_END), keyNew ("user/test/array/#1", KEY_END),
170 :
171 : KS_END);
172 :
173 2 : Key * nextKey = elektraArrayGetNextKey (array);
174 2 : exit_if_fail (array, "The getnext function did not return a proper key");
175 2 : succeed_if (!strcmp (keyName (nextKey), "user/test/array/#2"), "The getnext function did not use the correct keyname");
176 2 : succeed_if (!strcmp (keyString (nextKey), ""), "The getnext function did not return an empty key");
177 :
178 2 : keyDel (nextKey);
179 2 : ksClear (array);
180 2 : nextKey = elektraArrayGetNextKey (array);
181 2 : succeed_if (!nextKey, "The getnext function did not return NULL on an empty array");
182 2 : keyDel (nextKey);
183 :
184 2 : ksDel (array);
185 2 : }
186 :
187 2 : static void test_baseName (void)
188 : {
189 2 : printf ("Test validate base name");
190 :
191 2 : succeed_if (elektraArrayValidateBaseNameString ("#") == 0, "Start not detected correctly");
192 2 : succeed_if (elektraArrayValidateBaseNameString ("#0") == 1, "#0 should be valid");
193 2 : succeed_if (elektraArrayValidateBaseNameString ("#_10") == 2, "#_10 should be valid");
194 2 : succeed_if (elektraArrayValidateBaseNameString ("#_________1234567890") == 10, "#_________1234567890 should be valid");
195 2 : succeed_if (elektraArrayValidateBaseNameString ("#___________________12345678901234567890") == 20,
196 : "#_________1234567890 should be valid");
197 2 : succeed_if (elektraArrayValidateBaseNameString ("#___________________123456789012345678901") == -1,
198 : "#__________12345678901 should not be valid");
199 2 : succeed_if (elektraArrayValidateBaseNameString ("monkey") == -1, "monkey should not be valid");
200 2 : }
201 :
202 2 : int main (int argc, char ** argv)
203 : {
204 2 : printf (" ARRAY TESTS\n");
205 2 : printf ("==================\n\n");
206 :
207 2 : init (argc, argv);
208 :
209 2 : test_array ();
210 2 : test_arrayDec ();
211 2 : test_noArray ();
212 2 : test_startArray ();
213 2 : test_getArray ();
214 2 : test_getArrayNext ();
215 2 : test_baseName ();
216 :
217 2 : printf ("\ntest_array RESULTS: %d test(s) done. %d error(s).\n", nbTest, nbError);
218 :
219 2 : return nbError;
220 : }
|