5#include "testing/testing.h"
16TEST(array_utils, ReverseStringEmpty)
20 EXPECT_STREQ(
"", data);
23TEST(array_utils, ReverseStringSingle)
27 EXPECT_STREQ(
"0", data);
30TEST(array_utils, ReverseString4)
34 EXPECT_STREQ(
"3210", data);
37TEST(array_utils, ReverseInt4)
39 const int data_cmp[] = {3, 2, 1, 0};
40 int data[] = {0, 1, 2, 3};
42 EXPECT_EQ_ARRAY(data_cmp, data,
ARRAY_SIZE(data));
46TEST(array_utils, FindIndexStringEmpty)
48 char data[] =
"", find =
'0';
53TEST(array_utils, FindIndexStringSingle)
55 char data[] =
"0", find =
'0';
60TEST(array_utils, FindIndexStringSingleMissing)
62 char data[] =
"1", find =
'0';
67TEST(array_utils, FindIndexString4)
69 char data[] =
"0123", find =
'3';
74TEST(array_utils, FindIndexInt4)
76 int data[] = {0, 1, 2, 3}, find = 3;
81TEST(array_utils, FindIndexInt4_DupeEnd)
83 int data[] = {0, 1, 2, 0}, find = 0;
88TEST(array_utils, FindIndexInt4_DupeMid)
90 int data[] = {1, 0, 0, 3}, find = 0;
95TEST(array_utils, FindIndexPointer)
97 const char *data[4] = {
nullptr};
102 const char *a =
"a", *
b =
"b", *c =
"c", *d =
"d";
104#define STACK_PUSH_AND_CHECK_FORWARD(v, i) \
106 STACK_PUSH(data, v); \
107 EXPECT_EQ(BLI_array_findindex(data, STACK_SIZE(data), &(v)), i); \
111#define STACK_PUSH_AND_CHECK_BACKWARD(v, i) \
113 STACK_PUSH(data, v); \
114 EXPECT_EQ(BLI_array_rfindindex(data, STACK_SIZE(data), &(v)), i); \
118#define STACK_PUSH_AND_CHECK_BOTH(v, i) \
120 STACK_PUSH(data, v); \
121 EXPECT_EQ(BLI_array_findindex(data, STACK_SIZE(data), &(v)), i); \
122 EXPECT_EQ(BLI_array_rfindindex(data, STACK_SIZE(data), &(v)), i); \
143#undef STACK_PUSH_AND_CHECK_FORWARD
144#undef STACK_PUSH_AND_CHECK_BACKWARD
145#undef STACK_PUSH_AND_CHECK_BOTH
149#define BINARY_AND_TEST(data_cmp, data_a, data_b, data_combine, length) \
151 BLI_array_binary_and(data_combine, data_a, data_b, length); \
152 EXPECT_EQ_ARRAY(data_cmp, data_combine, length); \
156TEST(array_utils, BinaryAndInt4Zero)
158 const int data_cmp[] = {0, 0, 0, 0};
159 int data_a[] = {0, 1, 0, 1}, data_b[] = {1, 0, 1, 0};
164TEST(array_utils, BinaryAndInt4Mix)
166 const int data_cmp[] = {1, 0, 1, 0};
167 int data_a[] = {1, 1, 1, 1}, data_b[] = {1, 0, 1, 0};
171#undef BINARY_AND_TEST
174#define BINARY_OR_TEST(data_cmp, data_a, data_b, data_combine, length) \
176 BLI_array_binary_or(data_combine, data_a, data_b, length); \
177 EXPECT_EQ_ARRAY(data_combine, data_cmp, length); \
181TEST(array_utils, BinaryOrInt4Alternate)
183 int data_a[] = {0, 1, 0, 1}, data_b[] = {1, 0, 1, 0}, data_cmp[] = {1, 1, 1, 1};
188TEST(array_utils, BinaryOrInt4Mix)
190 int data_a[] = {1, 1, 0, 0}, data_b[] = {0, 0, 1, 0}, data_cmp[] = {1, 1, 1, 0};
197#define DEDUPLICATE_ORDERED_TEST(data, data_cmp) \
199 const uint data_len_new = BLI_array_deduplicate_ordered(data, ARRAY_SIZE(data)); \
200 EXPECT_EQ(data_len_new, ARRAY_SIZE(data_cmp)); \
201 EXPECT_EQ_ARRAY(data, data_cmp, data_len_new); \
203 const uint data_len_test = BLI_array_deduplicate_ordered(data, data_len_new); \
204 EXPECT_EQ(data_len_test, ARRAY_SIZE(data_cmp)); \
205 EXPECT_EQ_ARRAY(data, data_cmp, data_len_new); \
209TEST(array_utils, DeduplicateOrdered1)
212 const int data_cmp[] = {0};
216TEST(array_utils, DeduplicateOrdered2)
219 const int data_cmp[] = {1, 2};
223TEST(array_utils, DeduplicateOrdered2Same)
226 const int data_cmp[] = {1};
230TEST(array_utils, DeduplicateOrdered3Same)
232 int data[] = {1, 1, 1};
233 const int data_cmp[] = {1};
237TEST(array_utils, DeduplicateOrdered3)
239 int data[] = {3, 3, 2, 2, 1, 1};
240 const int data_cmp[] = {3, 2, 1};
244#undef DEDUPLICATE_ORDERED_TEST
250 Vector<IndexRange> ranges = array_utils::find_all_ranges(data,
true);
252 EXPECT_EQ_ARRAY(data_cmp.
data(), ranges.as_span().data(), data_cmp.
size());
255TEST(array_utils, FindAllRanges1)
258 const std::array data = {
false};
259 Vector<IndexRange> ranges = array_utils::find_all_ranges(
Span(data.data(), data.size()),
true);
263TEST(array_utils, FindAllRanges2)
266 const std::array data = {
true,
true,
true};
267 const std::array data_cmp = {
IndexRange(0, 3)};
271TEST(array_utils, FindAllRanges3)
274 const std::array data = {
true,
false};
275 const std::array data_cmp = {
IndexRange(0, 1)};
279TEST(array_utils, FindAllRanges4)
282 const std::array data = {
false,
true};
283 const std::array data_cmp = {
IndexRange(1, 1)};
287TEST(array_utils, FindAllRanges5)
290 const std::array data = {
true,
false,
false,
true,
true,
false,
true};
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)
static void find_all_ranges_test(const blender::Span< bool > data, const blender::Span< blender::IndexRange > data_cmp)
EXPECT_EQ(BLI_expr_pylike_eval(expr, nullptr, 0, &result), EXPR_PYLIKE_INVALID)
#define STACK_DECLARE(stack)
#define STACK_INIT(stack, stack_num)
constexpr const T * data() const
constexpr int64_t size() const
local_group_size(16, 16) .push_constant(Type b