5#include "testing/testing.h"
8#include <initializer_list>
21using std::initializer_list;
32#define STR_N_CAT(dst_init, dst_size, src, result_expect) \
34 char dst[dst_size + 1] = dst_init; \
35 dst[dst_size] = 0xff; \
36 BLI_strncat(dst, src, dst_size); \
37 EXPECT_STREQ(dst, result_expect); \
38 EXPECT_EQ(dst[dst_size], 0xff); \
57TEST(
string, StrReplaceRange)
59#define STR_REPLACE_RANGE(src, size, beg, end, dst, result_expect) \
61 char string[size] = src; \
62 BLI_string_replace_range(string, sizeof(string), beg, end, dst); \
63 EXPECT_STREQ(string, result_expect); \
89#undef STR_REPLACE_RANGE
101 const char delim[] = {
'-',
'.',
'_',
'~',
'\\',
'\0'};
102 const char *sep, *suf;
106 const char *
str =
"mat.e-r_ial";
112 EXPECT_STREQ(
"e-r_ial", suf);
117 const char *
str =
".mate-rial--";
123 EXPECT_STREQ(
"mate-rial--", suf);
127 const char *
str =
".__.--_";
133 EXPECT_STREQ(
"__.--_", suf);
137 const char *
str =
"";
147 const char *
str =
"material";
160 const char delim[] = {
'-',
'.',
'_',
'~',
'\\',
'\0'};
161 const char *sep, *suf;
165 const char *
str =
"mat.e-r_ial";
171 EXPECT_STREQ(
"ial", suf);
176 const char *
str =
".mate-rial--";
182 EXPECT_STREQ(
"", suf);
186 const char *
str =
".__.--_";
192 EXPECT_STREQ(
"", suf);
196 const char *
str =
"";
206 const char *
str =
"material";
219 const char delim[] = {
'-',
'.',
'_',
'~',
'\\',
'\0'};
220 const char *sep, *suf;
226 const char *
str =
"mat.e-r_ia.l";
232 EXPECT_STREQ(
"r_ia.l", suf);
237 const char *
str =
"mate.rial";
250 const uint delim[] = {
'-',
'.',
'_', 0x00F1 , 0x262F ,
'\0'};
251 const char *sep, *suf;
255 const char *
str =
"ma\xc3\xb1te-r\xe2\x98\xafial";
261 EXPECT_STREQ(
"te-r\xe2\x98\xafial", suf);
266 const char *
str =
"\xe2\x98\xafmate-rial-\xc3\xb1";
272 EXPECT_STREQ(
"mate-rial-\xc3\xb1", suf);
276 const char *
str =
"\xe2\x98\xaf.\xc3\xb1_.--\xc3\xb1";
282 EXPECT_STREQ(
".\xc3\xb1_.--\xc3\xb1", suf);
286 const char *
str =
"";
296 const char *
str =
"material";
309 const uint delim[] = {
'-',
'.',
'_', 0x00F1 , 0x262F ,
'\0'};
310 const char *sep, *suf;
314 const char *
str =
"ma\xc3\xb1te-r\xe2\x98\xafial";
320 EXPECT_STREQ(
"ial", suf);
325 const char *
str =
"\xe2\x98\xafmate-rial-\xc3\xb1";
331 EXPECT_STREQ(
"", suf);
335 const char *
str =
"\xe2\x98\xaf.\xc3\xb1_.--\xc3\xb1";
341 EXPECT_STREQ(
"", suf);
345 const char *
str =
"";
355 const char *
str =
"material";
366TEST(
string, StrPartitionExUtf8)
368 const uint delim[] = {
'-',
'.',
'_', 0x00F1 , 0x262F ,
'\0'};
369 const char *sep, *suf;
375 const char *
str =
"ma\xc3\xb1te-r\xe2\x98\xafial";
382 EXPECT_STREQ(
"te-r\xe2\x98\xafial", suf);
387 const char *
str =
"mate\xe2\x98\xafrial";
404TEST(
string, StrFormatIntGrouped)
410 EXPECT_STREQ(
"0", number_str);
413 EXPECT_STREQ(
"1", number_str);
416 EXPECT_STREQ(
"-1", number_str);
419 EXPECT_STREQ(
"1,000", number_str);
422 EXPECT_STREQ(
"-1,000", number_str);
425 EXPECT_STREQ(
"999", number_str);
428 EXPECT_STREQ(
"-999", number_str);
431 EXPECT_STREQ(
"2,147,483,647", number_str);
434 EXPECT_STREQ(
"-2,147,483,648", number_str);
436 EXPECT_EQ(
sizeof(number_str), strlen(number_str) + 1);
440TEST(
string, StrFormatUint64Grouped)
446 EXPECT_STREQ(
"0", number_str);
449 EXPECT_STREQ(
"1", number_str);
452 EXPECT_STREQ(
"999", number_str);
455 EXPECT_STREQ(
"1,000", number_str);
458 EXPECT_STREQ(
"18,446,744,073,709,551,615", number_str);
460 EXPECT_EQ(
sizeof(number_str), strlen(number_str) + 1);
470TEST(
string, StrFormatByteUnits)
477 EXPECT_STREQ(
"0 B", size_str);
479 EXPECT_STREQ(
"0 B", size_str);
482 EXPECT_STREQ(
"1 B", size_str);
484 EXPECT_STREQ(
"-1 B", size_str);
487 EXPECT_STREQ(
"1 KB", size_str);
489 EXPECT_STREQ(
"-1 KB", size_str);
492 EXPECT_STREQ(
"1 KB", size_str);
494 EXPECT_STREQ(
"-1 KB", size_str);
498 EXPECT_STREQ(
"9223.372 PB", size_str);
500 EXPECT_STREQ(
"-9223.372 PB", size_str);
504 EXPECT_STREQ(
"0 B", size_str);
506 EXPECT_STREQ(
"0 B", size_str);
509 EXPECT_STREQ(
"1 B", size_str);
511 EXPECT_STREQ(
"-1 B", size_str);
514 EXPECT_STREQ(
"1000 B", size_str);
516 EXPECT_STREQ(
"-1000 B", size_str);
519 EXPECT_STREQ(
"1 KiB", size_str);
521 EXPECT_STREQ(
"-1 KiB", size_str);
525 EXPECT_STREQ(
"8192.0 PiB", size_str);
527 EXPECT_STREQ(
"-8192.0 PiB", size_str);
531 EXPECT_STREQ(
"-8191.8472 PiB", size_str);
533 EXPECT_EQ(
sizeof(size_str), strlen(size_str) + 1);
543TEST(
string, StrFormatDecimalUnits)
549 EXPECT_STREQ(
"0", size_str);
551 EXPECT_STREQ(
"1", size_str);
553 EXPECT_STREQ(
"10", size_str);
555 EXPECT_STREQ(
"15", size_str);
557 EXPECT_STREQ(
"100", size_str);
559 EXPECT_STREQ(
"155", size_str);
561 EXPECT_STREQ(
"1.0K", size_str);
563 EXPECT_STREQ(
"1.6K", size_str);
565 EXPECT_STREQ(
"10.0K", size_str);
567 EXPECT_STREQ(
"15.6K", size_str);
569 EXPECT_STREQ(
"100K", size_str);
571 EXPECT_STREQ(
"100K", size_str);
573 EXPECT_STREQ(
"156K", size_str);
575 EXPECT_STREQ(
"1.0M", size_str);
577 EXPECT_STREQ(
"1.6M", size_str);
579 EXPECT_STREQ(
"10.0M", size_str);
581 EXPECT_STREQ(
"15.6M", size_str);
583 EXPECT_STREQ(
"100M", size_str);
585 EXPECT_STREQ(
"156M", size_str);
587 EXPECT_STREQ(
"1.0B", size_str);
591 EXPECT_STREQ(
"2.1B", size_str);
594 EXPECT_STREQ(
"0", size_str);
596 EXPECT_STREQ(
"-1", size_str);
598 EXPECT_STREQ(
"-10", size_str);
600 EXPECT_STREQ(
"-15", size_str);
602 EXPECT_STREQ(
"-100", size_str);
604 EXPECT_STREQ(
"-155", size_str);
606 EXPECT_STREQ(
"-1.0K", size_str);
608 EXPECT_STREQ(
"-1.6K", size_str);
610 EXPECT_STREQ(
"-10.0K", size_str);
612 EXPECT_STREQ(
"-15.6K", size_str);
614 EXPECT_STREQ(
"-100K", size_str);
616 EXPECT_STREQ(
"-156K", size_str);
618 EXPECT_STREQ(
"-1.0M", size_str);
620 EXPECT_STREQ(
"-1.6M", size_str);
622 EXPECT_STREQ(
"-10.0M", size_str);
624 EXPECT_STREQ(
"-15.6M", size_str);
626 EXPECT_STREQ(
"-100M", size_str);
628 EXPECT_STREQ(
"-156M", size_str);
630 EXPECT_STREQ(
"-1.0B", size_str);
634 EXPECT_STREQ(
"-2.1B", size_str);
638TEST(
string, StrFormatIntegerUnits)
644 EXPECT_STREQ(
"0", size_str);
646 EXPECT_STREQ(
"1", size_str);
648 EXPECT_STREQ(
"10", size_str);
650 EXPECT_STREQ(
"15", size_str);
652 EXPECT_STREQ(
"100", size_str);
654 EXPECT_STREQ(
"155", size_str);
656 EXPECT_STREQ(
"1K", size_str);
658 EXPECT_STREQ(
"1K", size_str);
660 EXPECT_STREQ(
"10K", size_str);
662 EXPECT_STREQ(
"15K", size_str);
664 EXPECT_STREQ(
".1M", size_str);
666 EXPECT_STREQ(
".1M", size_str);
668 EXPECT_STREQ(
"1M", size_str);
670 EXPECT_STREQ(
"1M", size_str);
672 EXPECT_STREQ(
"2M", size_str);
674 EXPECT_STREQ(
"10M", size_str);
676 EXPECT_STREQ(
"15M", size_str);
678 EXPECT_STREQ(
".1B", size_str);
680 EXPECT_STREQ(
".1B", size_str);
682 EXPECT_STREQ(
".2B", size_str);
684 EXPECT_STREQ(
"1B", size_str);
688 EXPECT_STREQ(
"2B", size_str);
691 EXPECT_STREQ(
"0", size_str);
693 EXPECT_STREQ(
"-1", size_str);
695 EXPECT_STREQ(
"-10", size_str);
697 EXPECT_STREQ(
"-15", size_str);
699 EXPECT_STREQ(
"-100", size_str);
701 EXPECT_STREQ(
"-155", size_str);
703 EXPECT_STREQ(
"-1K", size_str);
705 EXPECT_STREQ(
"-1K", size_str);
707 EXPECT_STREQ(
"-10K", size_str);
709 EXPECT_STREQ(
"-15K", size_str);
711 EXPECT_STREQ(
"-.1M", size_str);
713 EXPECT_STREQ(
"-.1M", size_str);
715 EXPECT_STREQ(
"-1M", size_str);
717 EXPECT_STREQ(
"-1M", size_str);
719 EXPECT_STREQ(
"-10M", size_str);
721 EXPECT_STREQ(
"-15M", size_str);
723 EXPECT_STREQ(
"-.1B", size_str);
725 EXPECT_STREQ(
"-.1B", size_str);
727 EXPECT_STREQ(
"-1B", size_str);
731 EXPECT_STREQ(
"-2B", size_str);
765#define BUFFER_SIZE 128
775 EXPECT_STREQ(buffer_alloc, buffer);
779 for (
int dst_size = buffer_len + 1; dst_size > 0; dst_size--) {
783 EXPECT_EQ(strncmp(dst_tmp, buffer, dst_tmp_len), 0);
796 EXPECT_STREQ(buffer_alloc, buffer);
800 for (
int dst_size = buffer_len + 1; dst_size > 0; dst_size--) {
803 dst_tmp, dst_size,
'|', strings, strings_num);
805 EXPECT_EQ(strncmp(dst_tmp, buffer, dst_tmp_len), 0);
813 const char *strings[] = {
"a",
"b",
"c",
"d",
"e",
"f"};
815 EXPECT_STREQ(buffer,
"abcdef");
817 EXPECT_STREQ(buffer,
"a|b|c|d|e|f");
820 const char *strings[] = {
"aa",
"bb",
"cc",
"dd",
"ee",
"ff"};
822 EXPECT_STREQ(buffer,
"aabbccddeeff");
824 EXPECT_STREQ(buffer,
"aa|bb|cc|dd|ee|ff");
827 const char *strings[] = {
"",
"",
"",
"",
"",
""};
829 EXPECT_STREQ(buffer,
"");
831 EXPECT_STREQ(buffer,
"|||||");
834 const char *strings[] = {
"test"};
836 EXPECT_STREQ(buffer,
"test");
838 EXPECT_STREQ(buffer,
"test");
841 const char *strings[] = {
""};
843 EXPECT_STREQ(buffer,
"");
845 EXPECT_STREQ(buffer,
"");
848 const char *strings[] = {
"a"};
850 EXPECT_STREQ(buffer,
"");
852 EXPECT_STREQ(buffer,
"");
875 os <<
"start: " << word_info.
start <<
", end: " << word_info.
end;
888 const size_t max_length,
889 initializer_list<WordInfo> expected_words_info_init,
893 if (max_words != -1) {
894 CHECK_LE(max_words, expected_words_info.size() - 1);
899 const int effective_max_words = (max_words == -1) ? expected_words_info.size() : max_words;
906 reinterpret_cast<int (*)[2]
>(actual_word_info.data()),
907 effective_max_words);
910 EXPECT_LE(actual_word_num, actual_word_info.size() - 1);
911 actual_word_info.resize(actual_word_num + 1);
913 EXPECT_EQ_VECTOR(actual_word_info, expected_words_info);
917 initializer_list<WordInfo> expected_words_info_init)
926 testStringFindSplitWords(
"t", {{0, 1}, {-1, -1}});
927 testStringFindSplitWords(
"test", {{0, 4}, {-1, -1}});
931 testStringFindSplitWords(
"f t w", {{0, 1}, {2, 1}, {4, 1}, {-1, -1}});
932 testStringFindSplitWords(
"find three words", {{0, 4}, {5, 5}, {11, 5}, {-1, -1}});
936 testStringFindSplitWords(
"# ## ### ####", {{0, 1}, {2, 2}, {5, 3}, {9, 4}, {-1, -1}});
937 testStringFindSplitWords(
"# # # #", {{0, 1}, {3, 1}, {7, 1}, {12, 1}, {-1, -1}});
941 testStringFindSplitWords(
" t", {{3, 1}, {-1, -1}});
942 testStringFindSplitWords(
" test", {{3, 4}, {-1, -1}});
946 testStringFindSplitWords(
"t ", {{0, 1}, {-1, -1}});
947 testStringFindSplitWords(
"test ", {{0, 4}, {-1, -1}});
951 testStringFindSplitWords(
" surrounding space test 123 ",
952 {{3, 11}, {15, 5}, {21, 4}, {28, 3}, {-1, -1}});
956 testStringFindSplitWords(
"", {{-1, -1}});
960 testStringFindSplitWords(
" ", {{-1, -1}});
961 testStringFindSplitWords(
" ", {{-1, -1}});
965 const string words =
"too many chars";
966 const int words_len = words.length();
967 testStringFindSplitWords(words, words_len, {{0, 3}, {4, 4}, {9, 5}, {-1, -1}}, 3);
968 testStringFindSplitWords(words, words_len, {{0, 3}, {4, 4}, {-1, -1}}, 2);
969 testStringFindSplitWords(words, words_len, {{0, 3}, {-1, -1}}, 1);
970 testStringFindSplitWords(words, words_len, {{-1, -1}}, 0);
974 const string words =
"too many chars";
975 const int words_len = words.length();
976 testStringFindSplitWords(words, words_len, {{0, 3}, {4, 4}, {9, 5}, {-1, -1}});
977 testStringFindSplitWords(words, words_len - 1, {{0, 3}, {4, 4}, {9, 4}, {-1, -1}});
978 testStringFindSplitWords(words, words_len - 5, {{0, 3}, {4, 4}, {-1, -1}});
979 testStringFindSplitWords(words, 1, {{0, 1}, {-1, -1}});
980 testStringFindSplitWords(words, 0, {{-1, -1}});
1042 const char *str_test0 =
"search here";
1071TEST(
string, StringMaxPossibleWordCount)
1120 for (
const auto &item : items) {
1127 for (
const auto &item : items) {
1134 for (
const auto &item : items) {
1146 ret_array.reserve(items.size());
1147 for (
const auto &item : items) {
1148 ret_array.push_back({item[1], item[0]});
1163 const CompareWordsArray
equal{
1166 const CompareWordsArray negative{
1170 CompareWordsArray positive = copyWithSwappedWords(negative);
1172 testReturnsZeroForAll(
equal);
1173 testReturnsLessThanZeroForAll(negative);
1174 testReturnsMoreThanZeroForAll(positive);
1179 const CompareWordsArray
equal{
1184 const CompareWordsArray negative{
1190 CompareWordsArray positive = copyWithSwappedWords(negative);
1192 testReturnsZeroForAll(
equal);
1193 testReturnsLessThanZeroForAll(negative);
1194 testReturnsMoreThanZeroForAll(positive);
1199 const CompareWordsArray
equal{
1204 {
"je møder",
"je møder"},
1206 const CompareWordsArray negative{
1211 {
"je møda",
"je møder"},
1213 CompareWordsArray positive = copyWithSwappedWords(negative);
1215 testReturnsZeroForAll(
equal);
1216 testReturnsLessThanZeroForAll(negative);
1217 testReturnsMoreThanZeroForAll(positive);
1222 const CompareWordsArray
equal{
1229 const CompareWordsArray negative{
1249 CompareWordsArray positive = copyWithSwappedWords(negative);
1251 testReturnsZeroForAll(
equal);
1252 testReturnsLessThanZeroForAll(negative);
1253 testReturnsMoreThanZeroForAll(positive);
1258 const CompareWordsArray
equal{
1264 const CompareWordsArray negative{
1267 {
"foo.bar",
"foo 1.bar"},
1269 CompareWordsArray positive = copyWithSwappedWords(negative);
1271 testReturnsZeroForAll(
equal);
1272 testReturnsLessThanZeroForAll(negative);
1273 testReturnsMoreThanZeroForAll(positive);
1278 const CompareWordsArray
equal{
1284 const CompareWordsArray negative{
1291 const CompareWordsArray positive = copyWithSwappedWords(negative);
1293 testReturnsZeroForAll(
equal);
1294 testReturnsLessThanZeroForAll(negative);
1295 testReturnsMoreThanZeroForAll(positive);
1300 const CompareWordsArray
equal{
1301 {
"00je møder1",
"00je møder1"},
1306 const CompareWordsArray negative{
1307 {
"00je møder0",
"00je møder1"},
1308 {
"05je møder0",
"06je møder1"},
1309 {
"Cube",
"Cube.001"},
1310 {
"Cube.001",
"Cube.002"},
1311 {
"CUbe.001",
"Cube.002"},
1312 {
"CUbe.002",
"Cube.002"},
1314 const CompareWordsArray positive = copyWithSwappedWords(negative);
1316 testReturnsZeroForAll(
equal);
1317 testReturnsLessThanZeroForAll(negative);
1318 testReturnsMoreThanZeroForAll(positive);
1337 size_t dst_test_len;
1339 for (
const auto &item : items) {
1341 EXPECT_LT((strlen(item[0]) * 2) + 1,
sizeof(dst_test));
1343 dst_test_len =
BLI_str_escape(dst_test, item[0],
sizeof(dst_test));
1344 EXPECT_STREQ(dst_test, item[1]);
1345 EXPECT_EQ(dst_test_len, strlen(dst_test));
1348 EXPECT_STREQ(dst_test, item[0]);
1349 EXPECT_EQ(dst_test_len, strlen(dst_test));
1359 const CompareWordsArray
equal{
1366 const CompareWordsArray escaped{
1373 {
"\"\\",
"\\\"\\\\"},
1375 {
"\\\"",
"\\\\\\\""},
1377 {
"\"\\\"",
"\\\"\\\\\\\""},
1380 {
"\"\"\"",
"\\\"\\\"\\\""},
1382 {
"\\\\\\",
"\\\\\\\\\\\\"},
1385 testEscapeWords(
equal);
1386 testEscapeWords(escaped);
1391 const CompareWordsArray escaped{
1401 {
"\n\r\t\a\b\f",
"\\n\\r\\t\\a\\b\\f"},
1403 {
"\n_\r_\t_\a_\b_\f",
"\\n_\\r_\\t_\\a_\\b_\\f"},
1405 {
"\n\\\r\\\t\\\a\\\b\\\f",
"\\n\\\\\\r\\\\\\t\\\\\\a\\\\\\b\\\\\\f"},
1408 testEscapeWords(escaped);
1418 EXPECT_STREQ(
str,
"Hello");
1424 EXPECT_STREQ(
str,
"Hello, ");
EXPECT_EQ(BLI_expr_pylike_eval(expr, nullptr, 0, &result), EXPR_PYLIKE_INVALID)
int bool BLI_str_startswith(const char *__restrict str, const char *__restrict start) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1
size_t BLI_str_format_int_grouped(char dst[BLI_STR_FORMAT_INT32_GROUPED_SIZE], int num) ATTR_NONNULL(1)
int bool bool bool size_t BLI_str_partition(const char *str, const char delim[], const char **sep, const char **suf) ATTR_NONNULL(1
int bool bool bool size_t size_t size_t int BLI_string_max_possible_word_count(int str_len) ATTR_WARN_UNUSED_RESULT
size_t size_t size_t BLI_str_unescape(char *__restrict dst, const char *__restrict src, size_t src_maxncpy) ATTR_NONNULL(1
#define BLI_STR_FORMAT_INT64_BYTE_UNIT_SIZE
int char char int int int int size_t BLI_strnlen(const char *str, size_t maxlen) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
#define BLI_STR_FORMAT_INT32_DECIMAL_UNIT_SIZE
#define BLI_STR_FORMAT_INT32_GROUPED_SIZE
void BLI_str_format_byte_unit(char dst[BLI_STR_FORMAT_INT64_BYTE_UNIT_SIZE], long long int bytes, bool base_10) ATTR_NONNULL(1)
int bool bool bool size_t size_t BLI_str_rpartition(const char *str, const char delim[], const char **sep, const char **suf) ATTR_NONNULL(1
#define BLI_STR_FORMAT_INT32_INTEGER_UNIT_SIZE
#define BLI_STR_FORMAT_UINT64_GROUPED_SIZE
void BLI_str_format_integer_unit(char dst[BLI_STR_FORMAT_INT32_INTEGER_UNIT_SIZE], int number_to_format) ATTR_NONNULL(1)
int char char * BLI_strncasestr(const char *s, const char *find, size_t len) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1
char * STRNCPY(char(&dst)[N], const char *src)
int bool bool bool size_t size_t size_t BLI_str_partition_ex(const char *str, const char *end, const char delim[], const char **sep, const char **suf, bool from_right) ATTR_NONNULL(1
void BLI_str_format_decimal_unit(char dst[BLI_STR_FORMAT_INT32_DECIMAL_UNIT_SIZE], int number_to_format) ATTR_NONNULL(1)
int char char int int int BLI_strcasecmp_natural(const char *s1, const char *s2) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1
size_t BLI_str_format_uint64_grouped(char dst[BLI_STR_FORMAT_UINT64_GROUPED_SIZE], uint64_t num) ATTR_NONNULL(1)
bool bool int bool BLI_string_elem_split_by_delim(const char *haystack, const char delim, const char *needle) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1
int bool bool BLI_str_endswith(const char *__restrict str, const char *__restrict end) ATTR_NONNULL(1
bool bool int BLI_string_find_split_words(const char *str, size_t str_maxlen, char delim, int r_words[][2], int words_max) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1
size_t BLI_str_escape(char *__restrict dst, const char *__restrict src, size_t dst_maxncpy) ATTR_NONNULL(1
static void string_join_array_with_sep_char_test_truncate(const char *strings[], int strings_num, char buffer[BUFFER_SIZE])
#define STR_N_CAT(dst_init, dst_size, src, result_expect)
TEST_F(StringFindSplitWords, Simple)
static std::ostream & operator<<(std::ostream &os, const WordInfo &word_info)
static void string_join_array_test_truncate(const char *strings[], int strings_num, char buffer[BUFFER_SIZE])
#define STR_REPLACE_RANGE(src, size, beg, end, dst, result_expect)
size_t size_t BLI_str_rpartition_utf8(const char *str, const unsigned int delim[], const char **r_sep, const char **r_suf) ATTR_NONNULL(1
size_t BLI_str_partition_utf8(const char *str, const unsigned int delim[], const char **r_sep, const char **r_suf) ATTR_NONNULL(1
size_t size_t size_t BLI_str_partition_ex_utf8(const char *str, const char *end, const unsigned int delim[], const char **r_sep, const char **r_suf, bool from_right) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1
size_t BLI_string_join_array_by_sep_char(char *result, size_t result_maxncpy, char sep, const char *strings[], uint strings_num) ATTR_NONNULL()
bool BLI_string_is_decimal(const char *string) ATTR_NONNULL(1)
char * BLI_string_join_arrayN(const char *strings[], uint strings_num) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
char * BLI_string_join_array_by_sep_charN(char sep, const char *strings[], uint strings_num) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
size_t BLI_string_join_array(char *result, size_t result_maxncpy, const char *strings[], uint strings_num) ATTR_NONNULL()
Read Guarded memory(de)allocation.
unsigned long long int uint64_t
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
void testReturnsMoreThanZeroForAll(const CompareWordsArray &items)
void testReturnsZeroForAll(const CompareWordsArray &items)
void testReturnsLessThanZeroForAll(const CompareWordsArray &items)
vector< std::array< const char *, 2 > > CompareWordsArray
StringCasecmpNatural()=default
CompareWordsArray copyWithSwappedWords(const CompareWordsArray &items)
vector< std::array< const char *, 2 > > CompareWordsArray
void testEscapeWords(const CompareWordsArray &items)
void testStringFindSplitWords(const string &str, initializer_list< WordInfo > expected_words_info_init)
StringFindSplitWords()=default
void testStringFindSplitWords(const string &str, const size_t max_length, initializer_list< WordInfo > expected_words_info_init, int max_words=-1)
VecBase< bool, D > equal(VecOp< T, D >, VecOp< T, D >) RET
void MEM_freeN(void *vmemh)
bool operator==(const WordInfo &other) const
WordInfo(int start, int end)