5#include "testing/testing.h"
26 for (
int index = 0; index < elems_num; index++) {
29 int index = 0, total_size = 0;
35 total_size += elem_size;
43#define MEMITER_NUMBER_TEST_FN(fn, number_type) \
44 static void fn(int elems_num, const int chunk_size) \
46 BLI_memiter *mi = BLI_memiter_create(chunk_size); \
48 for (int index = 0; index < elems_num; index++) { \
49 data = (number_type *)BLI_memiter_alloc(mi, sizeof(number_type)); \
52 BLI_memiter_handle it; \
53 BLI_memiter_iter_init(mi, &it); \
56 while ((data = (number_type *)BLI_memiter_iter_step_size(&it, &elem_size))) { \
57 EXPECT_EQ(sizeof(number_type), elem_size); \
58 EXPECT_EQ(index, *data); \
61 BLI_memiter_destroy(mi); \
75 int total_size_expect = 0;
76 while (strings[index]) {
77 const int size = strlen(strings[index]) + 1;
79 total_size_expect +=
size;
82 const int strings_len = index;
89 EXPECT_EQ(strlen(strings[index]) + 1, elem_size);
90 EXPECT_STREQ(strings[index], data);
91 total_size += elem_size;
102 const int words_len =
sizeof(
words10k) - 1;
111 c_end = words + words_len;
115 int elem_size = strlen(c) + 1;
117 memcpy(data, c, elem_size);
121 const int len_expect = index;
128 int size_expect = strlen(c) + 1;
130 EXPECT_STREQ(c, data);
139#define TEST_EMPTY_AT_CHUNK_SIZE(chunk_size) \
140 TEST(memiter, Empty0_##chunk_size) \
142 memiter_empty_test(0, chunk_size); \
144 TEST(memiter, Empty1_##chunk_size) \
146 memiter_empty_test(1, chunk_size); \
148 TEST(memiter, Empty2_##chunk_size) \
150 memiter_empty_test(2, chunk_size); \
152 TEST(memiter, Empty3_##chunk_size) \
154 memiter_empty_test(3, chunk_size); \
156 TEST(memiter, Empty13_##chunk_size) \
158 memiter_empty_test(13, chunk_size); \
160 TEST(memiter, Empty256_##chunk_size) \
162 memiter_empty_test(256, chunk_size); \
171#define TEST_NUMBER_AT_CHUNK_SIZE(chunk_size) \
172 TEST(memiter, Char1_##chunk_size) \
174 memiter_char_test(1, chunk_size); \
176 TEST(memiter, Short1_##chunk_size) \
178 memiter_short_test(1, chunk_size); \
180 TEST(memiter, Int1_##chunk_size) \
182 memiter_int_test(1, chunk_size); \
184 TEST(memiter, Long1_##chunk_size) \
186 memiter_long_test(1, chunk_size); \
189 TEST(memiter, Char2_##chunk_size) \
191 memiter_char_test(2, chunk_size); \
193 TEST(memiter, Short2_##chunk_size) \
195 memiter_short_test(2, chunk_size); \
197 TEST(memiter, Int2_##chunk_size) \
199 memiter_int_test(2, chunk_size); \
201 TEST(memiter, Long2_##chunk_size) \
203 memiter_long_test(2, chunk_size); \
206 TEST(memiter, Char3_##chunk_size) \
208 memiter_char_test(3, chunk_size); \
210 TEST(memiter, Short3_##chunk_size) \
212 memiter_short_test(3, chunk_size); \
214 TEST(memiter, Int3_##chunk_size) \
216 memiter_int_test(3, chunk_size); \
218 TEST(memiter, Long3_##chunk_size) \
220 memiter_long_test(3, chunk_size); \
223 TEST(memiter, Char256_##chunk_size) \
225 memiter_char_test(256, chunk_size); \
227 TEST(memiter, Short256_##chunk_size) \
229 memiter_short_test(256, chunk_size); \
231 TEST(memiter, Int256_##chunk_size) \
233 memiter_int_test(256, chunk_size); \
235 TEST(memiter, Long256_##chunk_size) \
237 memiter_long_test(256, chunk_size); \
246#define STRINGS_TEST(chunk_size, ...) \
248 const char *data[] = {__VA_ARGS__, nullptr}; \
249 memiter_string_test(data, chunk_size); \
252#define TEST_STRINGS_AT_CHUNK_SIZE(chunk_size) \
253 TEST(memiter, Strings_##chunk_size) \
255 STRINGS_TEST(chunk_size, ""); \
256 STRINGS_TEST(chunk_size, "test", "me"); \
257 STRINGS_TEST(chunk_size, "more", "test", "data", "to", "follow"); \
266#define TEST_WORDS10K_AT_CHUNK_SIZE(chunk_size) \
267 TEST(memiter, Words10kSentence_##chunk_size) \
269 memiter_words10k_test('.', chunk_size); \
271 TEST(memiter, Words10kWords_##chunk_size) \
273 memiter_words10k_test(' ', chunk_size); \
Generic array manipulation API.
EXPECT_EQ(BLI_expr_pylike_eval(expr, nullptr, 0, &result), EXPR_PYLIKE_INVALID)
void BLI_memiter_destroy(BLI_memiter *mi) ATTR_NONNULL(1)
void BLI_memiter_alloc_from(BLI_memiter *mi, uint elem_size, const void *data_from) ATTR_NONNULL(1
BLI_memiter * BLI_memiter_create(unsigned int chunk_size_min) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT ATTR_RETURNS_NONNULL
void * BLI_memiter_alloc(BLI_memiter *mi, unsigned int elem_size) ATTR_WARN_UNUSED_RESULT ATTR_RETURNS_NONNULL ATTR_NONNULL(1)
void BLI_memiter_iter_init(BLI_memiter *mi, BLI_memiter_handle *iter) ATTR_NONNULL(1
void * BLI_memiter_iter_step_size(BLI_memiter_handle *iter, uint *r_size) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1
static void memiter_words10k_test(const char split_char, const int chunk_size)
#define TEST_WORDS10K_AT_CHUNK_SIZE(chunk_size)
#define TEST_NUMBER_AT_CHUNK_SIZE(chunk_size)
#define TEST_EMPTY_AT_CHUNK_SIZE(chunk_size)
#define TEST_STRINGS_AT_CHUNK_SIZE(chunk_size)
static void memiter_string_test(const char *strings[], const int chunk_size)
#define MEMITER_NUMBER_TEST_FN(fn, number_type)
static void memiter_empty_test(int elems_num, const int chunk_size)
char * BLI_strdupn(const char *str, size_t len) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void BLI_string_replace_char(char *str, char src, char dst) ATTR_NONNULL(1)
Read Guarded memory(de)allocation.
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
void MEM_freeN(void *vmemh)