Blender  V3.3
BLI_array_utils_test.cc
Go to the documentation of this file.
1 /* SPDX-License-Identifier: Apache-2.0 */
2 
3 #include "testing/testing.h"
4 
5 #include "BLI_array_utils.h"
6 #include "BLI_utildefines.h"
8 
9 /* -------------------------------------------------------------------- */
10 /* tests */
11 
12 /* BLI_array_reverse */
13 TEST(array_utils, ReverseStringEmpty)
14 {
15  char data[] = "";
17  EXPECT_STREQ("", data);
18 }
19 
20 TEST(array_utils, ReverseStringSingle)
21 {
22  char data[] = "0";
24  EXPECT_STREQ("0", data);
25 }
26 
27 TEST(array_utils, ReverseString4)
28 {
29  char data[] = "0123";
31  EXPECT_STREQ("3210", data);
32 }
33 
34 TEST(array_utils, ReverseInt4)
35 {
36  const int data_cmp[] = {3, 2, 1, 0};
37  int data[] = {0, 1, 2, 3};
39  EXPECT_EQ_ARRAY(data_cmp, data, ARRAY_SIZE(data));
40 }
41 
42 /* BLI_array_findindex */
43 TEST(array_utils, FindIndexStringEmpty)
44 {
45  char data[] = "", find = '0';
48 }
49 
50 TEST(array_utils, FindIndexStringSingle)
51 {
52  char data[] = "0", find = '0';
55 }
56 
57 TEST(array_utils, FindIndexStringSingleMissing)
58 {
59  char data[] = "1", find = '0';
62 }
63 
64 TEST(array_utils, FindIndexString4)
65 {
66  char data[] = "0123", find = '3';
69 }
70 
71 TEST(array_utils, FindIndexInt4)
72 {
73  int data[] = {0, 1, 2, 3}, find = 3;
76 }
77 
78 TEST(array_utils, FindIndexInt4_DupeEnd)
79 {
80  int data[] = {0, 1, 2, 0}, find = 0;
83 }
84 
85 TEST(array_utils, FindIndexInt4_DupeMid)
86 {
87  int data[] = {1, 0, 0, 3}, find = 0;
90 }
91 
92 TEST(array_utils, FindIndexPointer)
93 {
94  const char *data[4] = {nullptr};
96 
98 
99  const char *a = "a", *b = "b", *c = "c", *d = "d";
100 
101 #define STACK_PUSH_AND_CHECK_FORWARD(v, i) \
102  { \
103  STACK_PUSH(data, v); \
104  EXPECT_EQ(BLI_array_findindex(data, STACK_SIZE(data), &(v)), i); \
105  } \
106  ((void)0)
107 
108 #define STACK_PUSH_AND_CHECK_BACKWARD(v, i) \
109  { \
110  STACK_PUSH(data, v); \
111  EXPECT_EQ(BLI_array_rfindindex(data, STACK_SIZE(data), &(v)), i); \
112  } \
113  ((void)0)
114 
115 #define STACK_PUSH_AND_CHECK_BOTH(v, i) \
116  { \
117  STACK_PUSH(data, v); \
118  EXPECT_EQ(BLI_array_findindex(data, STACK_SIZE(data), &(v)), i); \
119  EXPECT_EQ(BLI_array_rfindindex(data, STACK_SIZE(data), &(v)), i); \
120  } \
121  ((void)0)
122 
127 
128  STACK_POP(data);
130 
131  STACK_POP(data);
133 
134  STACK_POP(data);
135  STACK_POP(data);
136 
139 
140 #undef STACK_PUSH_AND_CHECK_FORWARD
141 #undef STACK_PUSH_AND_CHECK_BACKWARD
142 #undef STACK_PUSH_AND_CHECK_BOTH
143 }
144 
145 /* BLI_array_binary_and */
146 #define BINARY_AND_TEST(data_cmp, data_a, data_b, data_combine, length) \
147  { \
148  BLI_array_binary_and(data_combine, data_a, data_b, length); \
149  EXPECT_EQ_ARRAY(data_cmp, data_combine, length); \
150  } \
151  ((void)0)
152 
153 TEST(array_utils, BinaryAndInt4Zero)
154 {
155  const int data_cmp[] = {0, 0, 0, 0};
156  int data_a[] = {0, 1, 0, 1}, data_b[] = {1, 0, 1, 0};
157  int data_combine[ARRAY_SIZE(data_cmp)];
158  BINARY_AND_TEST(data_cmp, data_a, data_b, data_combine, ARRAY_SIZE(data_cmp));
159 }
160 
161 TEST(array_utils, BinaryAndInt4Mix)
162 {
163  const int data_cmp[] = {1, 0, 1, 0};
164  int data_a[] = {1, 1, 1, 1}, data_b[] = {1, 0, 1, 0};
165  int data_combine[ARRAY_SIZE(data_cmp)];
166  BINARY_AND_TEST(data_cmp, data_a, data_b, data_combine, ARRAY_SIZE(data_cmp));
167 }
168 #undef BINARY_AND_TEST
169 
170 /* BLI_array_binary_or */
171 #define BINARY_OR_TEST(data_cmp, data_a, data_b, data_combine, length) \
172  { \
173  BLI_array_binary_or(data_combine, data_a, data_b, length); \
174  EXPECT_EQ_ARRAY(data_combine, data_cmp, length); \
175  } \
176  ((void)0)
177 
178 TEST(array_utils, BinaryOrInt4Alternate)
179 {
180  int data_a[] = {0, 1, 0, 1}, data_b[] = {1, 0, 1, 0}, data_cmp[] = {1, 1, 1, 1};
181  int data_combine[ARRAY_SIZE(data_cmp)];
182  BINARY_OR_TEST(data_cmp, data_a, data_b, data_combine, ARRAY_SIZE(data_cmp));
183 }
184 
185 TEST(array_utils, BinaryOrInt4Mix)
186 {
187  int data_a[] = {1, 1, 0, 0}, data_b[] = {0, 0, 1, 0}, data_cmp[] = {1, 1, 1, 0};
188  int data_combine[ARRAY_SIZE(data_cmp)];
189  BINARY_OR_TEST(data_cmp, data_a, data_b, data_combine, ARRAY_SIZE(data_cmp));
190 }
191 #undef BINARY_OR_TEST
192 
193 /* BLI_array_deduplicate_ordered */
194 #define DEDUPLICATE_ORDERED_TEST(data, data_cmp) \
195  { \
196  const uint data_len_new = BLI_array_deduplicate_ordered(data, ARRAY_SIZE(data)); \
197  EXPECT_EQ(data_len_new, ARRAY_SIZE(data_cmp)); \
198  EXPECT_EQ_ARRAY(data, data_cmp, data_len_new); \
199  /* Ensure running a second time does nothing. */ \
200  const uint data_len_test = BLI_array_deduplicate_ordered(data, data_len_new); \
201  EXPECT_EQ(data_len_test, ARRAY_SIZE(data_cmp)); \
202  EXPECT_EQ_ARRAY(data, data_cmp, data_len_new); \
203  } \
204  ((void)0)
205 
206 TEST(array_utils, DeduplicateOrdered1)
207 {
208  int data[] = {0};
209  const int data_cmp[] = {0};
210  DEDUPLICATE_ORDERED_TEST(data, data_cmp);
211 }
212 
213 TEST(array_utils, DeduplicateOrdered2)
214 {
215  int data[] = {1, 2};
216  const int data_cmp[] = {1, 2};
217  DEDUPLICATE_ORDERED_TEST(data, data_cmp);
218 }
219 
220 TEST(array_utils, DeduplicateOrdered2Same)
221 {
222  int data[] = {1, 1};
223  const int data_cmp[] = {1};
224  DEDUPLICATE_ORDERED_TEST(data, data_cmp);
225 }
226 
227 TEST(array_utils, DeduplicateOrdered3Same)
228 {
229  int data[] = {1, 1, 1};
230  const int data_cmp[] = {1};
231  DEDUPLICATE_ORDERED_TEST(data, data_cmp);
232 }
233 
234 TEST(array_utils, DeduplicateOrdered3)
235 {
236  int data[] = {3, 3, 2, 2, 1, 1};
237  const int data_cmp[] = {3, 2, 1};
238  DEDUPLICATE_ORDERED_TEST(data, data_cmp);
239 }
240 
241 #undef DEDUPLICATE_ORDERED_TEST
Generic array manipulation API.
#define BLI_array_reverse(arr, arr_len)
#define BLI_array_findindex(arr, arr_len, p)
#define BLI_array_rfindindex(arr, arr_len, p)
#define BINARY_OR_TEST(data_cmp, data_a, data_b, data_combine, length)
#define STACK_PUSH_AND_CHECK_FORWARD(v, i)
#define DEDUPLICATE_ORDERED_TEST(data, data_cmp)
#define STACK_PUSH_AND_CHECK_BOTH(v, i)
#define STACK_PUSH_AND_CHECK_BACKWARD(v, i)
#define BINARY_AND_TEST(data_cmp, data_a, data_b, data_combine, length)
TEST(array_utils, ReverseStringEmpty)
EXPECT_EQ(BLI_expr_pylike_eval(expr, nullptr, 0, &result), EXPR_PYLIKE_INVALID)
#define ARRAY_SIZE(arr)
#define STACK_POP(stack)
#define STACK_DECLARE(stack)
#define STACK_INIT(stack, stack_num)
static unsigned c
Definition: RandGen.cpp:83
static unsigned a[3]
Definition: RandGen.cpp:78
static const pxr::TfToken b("b", pxr::TfToken::Immortal)