3 #include "testing/testing.h"
23 for (
int index = 0; index < elems_num; index++) {
26 int index = 0, total_size = 0;
32 total_size += elem_size;
40 #define MEMITER_NUMBER_TEST_FN(fn, number_type) \
41 static void fn(int elems_num, const int chunk_size) \
43 BLI_memiter *mi = BLI_memiter_create(chunk_size); \
45 for (int index = 0; index < elems_num; index++) { \
46 data = (number_type *)BLI_memiter_alloc(mi, sizeof(number_type)); \
49 BLI_memiter_handle it; \
50 BLI_memiter_iter_init(mi, &it); \
53 while ((data = (number_type *)BLI_memiter_iter_step_size(&it, &elem_size))) { \
54 EXPECT_EQ(sizeof(number_type), elem_size); \
55 EXPECT_EQ(index, *data); \
58 BLI_memiter_destroy(mi); \
72 int total_size_expect = 0;
73 while (strings[index]) {
74 const int size = strlen(strings[index]) + 1;
76 total_size_expect +=
size;
79 const int strings_len = index;
86 EXPECT_EQ(strlen(strings[index]) + 1, elem_size);
87 EXPECT_STREQ(strings[index],
data);
88 total_size += elem_size;
99 const int words_len =
sizeof(
words10k) - 1;
108 c_end = words + words_len;
112 int elem_size = strlen(
c) + 1;
114 memcpy(
data,
c, elem_size);
118 const int len_expect = index;
125 int size_expect = strlen(
c) + 1;
127 EXPECT_STREQ(
c,
data);
136 #define TEST_EMPTY_AT_CHUNK_SIZE(chunk_size) \
137 TEST(memiter, Empty0_##chunk_size) \
139 memiter_empty_test(0, chunk_size); \
141 TEST(memiter, Empty1_##chunk_size) \
143 memiter_empty_test(1, chunk_size); \
145 TEST(memiter, Empty2_##chunk_size) \
147 memiter_empty_test(2, chunk_size); \
149 TEST(memiter, Empty3_##chunk_size) \
151 memiter_empty_test(3, chunk_size); \
153 TEST(memiter, Empty13_##chunk_size) \
155 memiter_empty_test(13, chunk_size); \
157 TEST(memiter, Empty256_##chunk_size) \
159 memiter_empty_test(256, chunk_size); \
168 #define TEST_NUMBER_AT_CHUNK_SIZE(chunk_size) \
169 TEST(memiter, Char1_##chunk_size) \
171 memiter_char_test(1, chunk_size); \
173 TEST(memiter, Short1_##chunk_size) \
175 memiter_short_test(1, chunk_size); \
177 TEST(memiter, Int1_##chunk_size) \
179 memiter_int_test(1, chunk_size); \
181 TEST(memiter, Long1_##chunk_size) \
183 memiter_long_test(1, chunk_size); \
186 TEST(memiter, Char2_##chunk_size) \
188 memiter_char_test(2, chunk_size); \
190 TEST(memiter, Short2_##chunk_size) \
192 memiter_short_test(2, chunk_size); \
194 TEST(memiter, Int2_##chunk_size) \
196 memiter_int_test(2, chunk_size); \
198 TEST(memiter, Long2_##chunk_size) \
200 memiter_long_test(2, chunk_size); \
203 TEST(memiter, Char3_##chunk_size) \
205 memiter_char_test(3, chunk_size); \
207 TEST(memiter, Short3_##chunk_size) \
209 memiter_short_test(3, chunk_size); \
211 TEST(memiter, Int3_##chunk_size) \
213 memiter_int_test(3, chunk_size); \
215 TEST(memiter, Long3_##chunk_size) \
217 memiter_long_test(3, chunk_size); \
220 TEST(memiter, Char256_##chunk_size) \
222 memiter_char_test(256, chunk_size); \
224 TEST(memiter, Short256_##chunk_size) \
226 memiter_short_test(256, chunk_size); \
228 TEST(memiter, Int256_##chunk_size) \
230 memiter_int_test(256, chunk_size); \
232 TEST(memiter, Long256_##chunk_size) \
234 memiter_long_test(256, chunk_size); \
243 #define STRINGS_TEST(chunk_size, ...) \
245 const char *data[] = {__VA_ARGS__, NULL}; \
246 memiter_string_test(data, chunk_size); \
249 #define TEST_STRINGS_AT_CHUNK_SIZE(chunk_size) \
250 TEST(memiter, Strings_##chunk_size) \
252 STRINGS_TEST(chunk_size, ""); \
253 STRINGS_TEST(chunk_size, "test", "me"); \
254 STRINGS_TEST(chunk_size, "more", "test", "data", "to", "follow"); \
263 #define TEST_WORDS10K_AT_CHUNK_SIZE(chunk_size) \
264 TEST(memiter, Words10kSentence_##chunk_size) \
266 memiter_words10k_test('.', chunk_size); \
268 TEST(memiter, Words10kWords_##chunk_size) \
270 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_alloc(BLI_memiter *mi, unsigned int size) ATTR_WARN_UNUSED_RESULT ATTR_RETURNS_NONNULL ATTR_NONNULL(1)
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
void * BLI_memiter_iter_step_size(BLI_memiter_handle *iter, uint *r_size) ATTR_WARN_UNUSED_RESULT 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_iter_init(BLI_memiter *mi, BLI_memiter_handle *iter) 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)
void BLI_str_replace_char(char *str, char src, char dst) ATTR_NONNULL()
char * BLI_strdupn(const char *str, size_t len) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
Read Guarded memory(de)allocation.
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
void(* MEM_freeN)(void *vmemh)
static const int chunk_size