5#include "testing/testing.h"
8#include <initializer_list>
21using std::initializer_list;
30TEST(
string, StrCopyUTF8_ASCII)
32#define STRNCPY_UTF8_ASCII(...) \
34 const char src[] = {__VA_ARGS__, 0}; \
35 char dst[sizeof(src)]; \
36 memset(dst, 0xff, sizeof(dst)); \
37 STRNCPY_UTF8(dst, src); \
38 EXPECT_EQ(strlen(dst), sizeof(dst) - 1); \
39 EXPECT_STREQ(dst, src); \
45#undef STRNCPY_UTF8_ASCII
48TEST(
string, StrCopyUTF8_ASCII_Truncate)
50#define STRNCPY_UTF8_ASCII_TRUNCATE(maxncpy, ...) \
52 char src[] = {__VA_ARGS__}; \
53 char dst[sizeof(src)]; \
54 memset(dst, 0xff, sizeof(dst)); \
55 BLI_strncpy_utf8(dst, src, maxncpy); \
56 int len_expect = std::min<int>(sizeof(src), maxncpy) - 1; \
57 src[len_expect] = '\0'; \
58 EXPECT_EQ(strlen(dst), len_expect); \
59 EXPECT_STREQ(dst, src); \
65#undef STRNCPY_UTF8_ASCII_TRUNCATE
68TEST(
string, StrCopyUTF8_TruncateEncoding)
71#define STRNCPY_UTF8_TRUNCATE(byte_size, ...) \
73 const char src[] = {__VA_ARGS__, 0}; \
74 EXPECT_EQ(BLI_str_utf8_size_or_error(src), byte_size); \
75 char dst[sizeof(src)]; \
76 memset(dst, 0xff, sizeof(dst)); \
77 STRNCPY_UTF8(dst, src); \
78 EXPECT_EQ(strlen(dst), sizeof(dst) - 1); \
79 EXPECT_STREQ(dst, src); \
80 BLI_strncpy_utf8(dst, src, sizeof(dst) - 1); \
81 EXPECT_STREQ(dst, ""); \
91#undef STRNCPY_UTF8_TRUNCATE
94TEST(
string, StrCopyUTF8_TerminateEncodingEarly)
98#define STRNCPY_UTF8_TERMINATE_EARLY(byte_size, ...) \
100 char src[] = {__VA_ARGS__, 0}; \
101 EXPECT_EQ(BLI_str_utf8_size_or_error(src), byte_size); \
102 char dst[sizeof(src)]; \
103 memset(dst, 0xff, sizeof(dst)); \
104 STRNCPY_UTF8(dst, src); \
105 EXPECT_EQ(strlen(dst), sizeof(dst) - 1); \
106 EXPECT_STREQ(dst, src); \
107 for (int i = sizeof(dst) - 1; i > 1; i--) { \
109 memset(dst, 0xff, sizeof(dst)); \
110 const int dst_copied = STRNCPY_UTF8_RLEN(dst, src); \
111 EXPECT_STREQ(dst, src); \
112 EXPECT_EQ(strlen(dst), i); \
113 EXPECT_EQ(dst_copied, i); \
124#undef STRNCPY_UTF8_TERMINATE_EARLY
135#define STR_N_CAT(dst_init, dst_size, src, result_expect) \
137 char dst[dst_size + 1] = dst_init; \
138 dst[dst_size] = 0xff; \
139 BLI_strncat(dst, src, dst_size); \
140 EXPECT_STREQ(dst, result_expect); \
141 EXPECT_EQ(dst[dst_size], 0xff); \
162#define STR_REPLACE_RANGE(src, size, beg, end, dst, result_expect) \
164 char string[size] = src; \
165 BLI_string_replace_range(string, sizeof(string), beg, end, dst); \
166 EXPECT_STREQ(string, result_expect); \
192#undef STR_REPLACE_RANGE
204 const char delim[] = {
'-',
'.',
'_',
'~',
'\\',
'\0'};
205 const char *sep, *suf;
209 const char *
str =
"mat.e-r_ial";
215 EXPECT_STREQ(
"e-r_ial", suf);
220 const char *
str =
".mate-rial--";
226 EXPECT_STREQ(
"mate-rial--", suf);
230 const char *
str =
".__.--_";
236 EXPECT_STREQ(
"__.--_", suf);
240 const char *
str =
"";
250 const char *
str =
"material";
263 const char delim[] = {
'-',
'.',
'_',
'~',
'\\',
'\0'};
264 const char *sep, *suf;
268 const char *
str =
"mat.e-r_ial";
274 EXPECT_STREQ(
"ial", suf);
279 const char *
str =
".mate-rial--";
285 EXPECT_STREQ(
"", suf);
289 const char *
str =
".__.--_";
295 EXPECT_STREQ(
"", suf);
299 const char *
str =
"";
309 const char *
str =
"material";
322 const char delim[] = {
'-',
'.',
'_',
'~',
'\\',
'\0'};
323 const char *sep, *suf;
329 const char *
str =
"mat.e-r_ia.l";
335 EXPECT_STREQ(
"r_ia.l", suf);
340 const char *
str =
"mate.rial";
353 const uint delim[] = {
'-',
'.',
'_', 0x00F1 , 0x262F ,
'\0'};
354 const char *sep, *suf;
358 const char *
str =
"ma\xc3\xb1te-r\xe2\x98\xafial";
364 EXPECT_STREQ(
"te-r\xe2\x98\xafial", suf);
369 const char *
str =
"\xe2\x98\xafmate-rial-\xc3\xb1";
375 EXPECT_STREQ(
"mate-rial-\xc3\xb1", suf);
379 const char *
str =
"\xe2\x98\xaf.\xc3\xb1_.--\xc3\xb1";
385 EXPECT_STREQ(
".\xc3\xb1_.--\xc3\xb1", suf);
389 const char *
str =
"";
399 const char *
str =
"material";
412 const uint delim[] = {
'-',
'.',
'_', 0x00F1 , 0x262F ,
'\0'};
413 const char *sep, *suf;
417 const char *
str =
"ma\xc3\xb1te-r\xe2\x98\xafial";
423 EXPECT_STREQ(
"ial", suf);
428 const char *
str =
"\xe2\x98\xafmate-rial-\xc3\xb1";
434 EXPECT_STREQ(
"", suf);
438 const char *
str =
"\xe2\x98\xaf.\xc3\xb1_.--\xc3\xb1";
444 EXPECT_STREQ(
"", suf);
448 const char *
str =
"";
458 const char *
str =
"material";
469TEST(
string, StrPartitionExUtf8)
471 const uint delim[] = {
'-',
'.',
'_', 0x00F1 , 0x262F ,
'\0'};
472 const char *sep, *suf;
478 const char *
str =
"ma\xc3\xb1te-r\xe2\x98\xafial";
485 EXPECT_STREQ(
"te-r\xe2\x98\xafial", suf);
490 const char *
str =
"mate\xe2\x98\xafrial";
507TEST(
string, StrFormatIntGrouped)
513 EXPECT_STREQ(
"0", number_str);
516 EXPECT_STREQ(
"1", number_str);
519 EXPECT_STREQ(
"-1", number_str);
522 EXPECT_STREQ(
"1,000", number_str);
525 EXPECT_STREQ(
"-1,000", number_str);
528 EXPECT_STREQ(
"999", number_str);
531 EXPECT_STREQ(
"-999", number_str);
534 EXPECT_STREQ(
"2,147,483,647", number_str);
537 EXPECT_STREQ(
"-2,147,483,648", number_str);
539 EXPECT_EQ(
sizeof(number_str), strlen(number_str) + 1);
543TEST(
string, StrFormatUint64Grouped)
549 EXPECT_STREQ(
"0", number_str);
552 EXPECT_STREQ(
"1", number_str);
555 EXPECT_STREQ(
"999", number_str);
558 EXPECT_STREQ(
"1,000", number_str);
561 EXPECT_STREQ(
"18,446,744,073,709,551,615", number_str);
563 EXPECT_EQ(
sizeof(number_str), strlen(number_str) + 1);
573TEST(
string, StrFormatByteUnits)
580 EXPECT_STREQ(
"0 B", size_str);
582 EXPECT_STREQ(
"0 B", size_str);
585 EXPECT_STREQ(
"1 B", size_str);
587 EXPECT_STREQ(
"-1 B", size_str);
590 EXPECT_STREQ(
"1 KB", size_str);
592 EXPECT_STREQ(
"-1 KB", size_str);
595 EXPECT_STREQ(
"1 KB", size_str);
597 EXPECT_STREQ(
"-1 KB", size_str);
601 EXPECT_STREQ(
"9223.372 PB", size_str);
603 EXPECT_STREQ(
"-9223.372 PB", size_str);
607 EXPECT_STREQ(
"0 B", size_str);
609 EXPECT_STREQ(
"0 B", size_str);
612 EXPECT_STREQ(
"1 B", size_str);
614 EXPECT_STREQ(
"-1 B", size_str);
617 EXPECT_STREQ(
"1000 B", size_str);
619 EXPECT_STREQ(
"-1000 B", size_str);
622 EXPECT_STREQ(
"1 KiB", size_str);
624 EXPECT_STREQ(
"-1 KiB", size_str);
628 EXPECT_STREQ(
"8192.0 PiB", size_str);
630 EXPECT_STREQ(
"-8192.0 PiB", size_str);
634 EXPECT_STREQ(
"-8191.8472 PiB", size_str);
636 EXPECT_EQ(
sizeof(size_str), strlen(size_str) + 1);
646TEST(
string, StrFormatDecimalUnits)
652 EXPECT_STREQ(
"0", size_str);
654 EXPECT_STREQ(
"1", size_str);
656 EXPECT_STREQ(
"10", size_str);
658 EXPECT_STREQ(
"15", size_str);
660 EXPECT_STREQ(
"100", size_str);
662 EXPECT_STREQ(
"155", size_str);
664 EXPECT_STREQ(
"1.0K", size_str);
666 EXPECT_STREQ(
"1.6K", size_str);
668 EXPECT_STREQ(
"10.0K", size_str);
670 EXPECT_STREQ(
"15.6K", size_str);
672 EXPECT_STREQ(
"100K", size_str);
674 EXPECT_STREQ(
"100K", size_str);
676 EXPECT_STREQ(
"156K", size_str);
678 EXPECT_STREQ(
"1.0M", size_str);
680 EXPECT_STREQ(
"1.6M", size_str);
682 EXPECT_STREQ(
"10.0M", size_str);
684 EXPECT_STREQ(
"15.6M", size_str);
686 EXPECT_STREQ(
"100M", size_str);
688 EXPECT_STREQ(
"156M", size_str);
690 EXPECT_STREQ(
"1.0B", size_str);
694 EXPECT_STREQ(
"2.1B", size_str);
697 EXPECT_STREQ(
"0", size_str);
699 EXPECT_STREQ(
"-1", size_str);
701 EXPECT_STREQ(
"-10", size_str);
703 EXPECT_STREQ(
"-15", size_str);
705 EXPECT_STREQ(
"-100", size_str);
707 EXPECT_STREQ(
"-155", size_str);
709 EXPECT_STREQ(
"-1.0K", size_str);
711 EXPECT_STREQ(
"-1.6K", size_str);
713 EXPECT_STREQ(
"-10.0K", size_str);
715 EXPECT_STREQ(
"-15.6K", size_str);
717 EXPECT_STREQ(
"-100K", size_str);
719 EXPECT_STREQ(
"-156K", size_str);
721 EXPECT_STREQ(
"-1.0M", size_str);
723 EXPECT_STREQ(
"-1.6M", size_str);
725 EXPECT_STREQ(
"-10.0M", size_str);
727 EXPECT_STREQ(
"-15.6M", size_str);
729 EXPECT_STREQ(
"-100M", size_str);
731 EXPECT_STREQ(
"-156M", size_str);
733 EXPECT_STREQ(
"-1.0B", size_str);
737 EXPECT_STREQ(
"-2.1B", size_str);
741TEST(
string, StrFormatIntegerUnits)
747 EXPECT_STREQ(
"0", size_str);
749 EXPECT_STREQ(
"1", size_str);
751 EXPECT_STREQ(
"10", size_str);
753 EXPECT_STREQ(
"15", size_str);
755 EXPECT_STREQ(
"100", size_str);
757 EXPECT_STREQ(
"155", size_str);
759 EXPECT_STREQ(
"1K", size_str);
761 EXPECT_STREQ(
"1K", size_str);
763 EXPECT_STREQ(
"10K", size_str);
765 EXPECT_STREQ(
"15K", size_str);
767 EXPECT_STREQ(
".1M", size_str);
769 EXPECT_STREQ(
".1M", size_str);
771 EXPECT_STREQ(
"1M", size_str);
773 EXPECT_STREQ(
"1M", size_str);
775 EXPECT_STREQ(
"2M", size_str);
777 EXPECT_STREQ(
"10M", size_str);
779 EXPECT_STREQ(
"15M", size_str);
781 EXPECT_STREQ(
".1B", size_str);
783 EXPECT_STREQ(
".1B", size_str);
785 EXPECT_STREQ(
".2B", size_str);
787 EXPECT_STREQ(
"1B", size_str);
791 EXPECT_STREQ(
"2B", size_str);
794 EXPECT_STREQ(
"0", size_str);
796 EXPECT_STREQ(
"-1", size_str);
798 EXPECT_STREQ(
"-10", size_str);
800 EXPECT_STREQ(
"-15", size_str);
802 EXPECT_STREQ(
"-100", size_str);
804 EXPECT_STREQ(
"-155", size_str);
806 EXPECT_STREQ(
"-1K", size_str);
808 EXPECT_STREQ(
"-1K", size_str);
810 EXPECT_STREQ(
"-10K", size_str);
812 EXPECT_STREQ(
"-15K", size_str);
814 EXPECT_STREQ(
"-.1M", size_str);
816 EXPECT_STREQ(
"-.1M", size_str);
818 EXPECT_STREQ(
"-1M", size_str);
820 EXPECT_STREQ(
"-1M", size_str);
822 EXPECT_STREQ(
"-10M", size_str);
824 EXPECT_STREQ(
"-15M", size_str);
826 EXPECT_STREQ(
"-.1B", size_str);
828 EXPECT_STREQ(
"-.1B", size_str);
830 EXPECT_STREQ(
"-1B", size_str);
834 EXPECT_STREQ(
"-2B", size_str);
868#define BUFFER_SIZE 128
882 for (
int dst_size = buffer_len + 1; dst_size > 0; dst_size--) {
886 EXPECT_EQ(strncmp(dst_tmp, buffer, dst_tmp_len), 0);
903 for (
int dst_size = buffer_len + 1; dst_size > 0; dst_size--) {
906 dst_tmp, dst_size,
'|', strings, strings_num);
908 EXPECT_EQ(strncmp(dst_tmp, buffer, dst_tmp_len), 0);
916 const char *strings[] = {
"a",
"b",
"c",
"d",
"e",
"f"};
918 EXPECT_STREQ(buffer,
"abcdef");
920 EXPECT_STREQ(buffer,
"a|b|c|d|e|f");
923 const char *strings[] = {
"aa",
"bb",
"cc",
"dd",
"ee",
"ff"};
925 EXPECT_STREQ(buffer,
"aabbccddeeff");
927 EXPECT_STREQ(buffer,
"aa|bb|cc|dd|ee|ff");
930 const char *strings[] = {
"",
"",
"",
"",
"",
""};
932 EXPECT_STREQ(buffer,
"");
934 EXPECT_STREQ(buffer,
"|||||");
937 const char *strings[] = {
"test"};
939 EXPECT_STREQ(buffer,
"test");
941 EXPECT_STREQ(buffer,
"test");
944 const char *strings[] = {
""};
946 EXPECT_STREQ(buffer,
"");
948 EXPECT_STREQ(buffer,
"");
951 const char *strings[] = {
"a"};
953 EXPECT_STREQ(buffer,
"");
955 EXPECT_STREQ(buffer,
"");
969 WordInfo(
int start,
int end) : start(start), end(end) {}
972 return start == other.start && end == other.end;
978 os <<
"start: " << word_info.
start <<
", end: " << word_info.
end;
991 const size_t max_length,
992 initializer_list<WordInfo> expected_words_info_init,
995 const vector<WordInfo> expected_words_info = expected_words_info_init;
996 if (max_words != -1) {
997 CHECK_LE(max_words, expected_words_info.size() - 1);
1002 const int effective_max_words = (max_words == -1) ? expected_words_info.size() : max_words;
1004 vector<WordInfo> actual_word_info(effective_max_words + 1,
WordInfo(-1, -1));
1009 reinterpret_cast<int(*)[2]
>(actual_word_info.data()),
1010 effective_max_words);
1013 EXPECT_LE(actual_word_num, actual_word_info.size() - 1);
1014 actual_word_info.resize(actual_word_num + 1);
1016 EXPECT_EQ_VECTOR(actual_word_info, expected_words_info);
1020 initializer_list<WordInfo> expected_words_info_init)
1029 testStringFindSplitWords(
"t", {{0, 1}, {-1, -1}});
1030 testStringFindSplitWords(
"test", {{0, 4}, {-1, -1}});
1034 testStringFindSplitWords(
"f t w", {{0, 1}, {2, 1}, {4, 1}, {-1, -1}});
1035 testStringFindSplitWords(
"find three words", {{0, 4}, {5, 5}, {11, 5}, {-1, -1}});
1039 testStringFindSplitWords(
"# ## ### ####", {{0, 1}, {2, 2}, {5, 3}, {9, 4}, {-1, -1}});
1040 testStringFindSplitWords(
"# # # #", {{0, 1}, {3, 1}, {7, 1}, {12, 1}, {-1, -1}});
1044 testStringFindSplitWords(
" t", {{3, 1}, {-1, -1}});
1045 testStringFindSplitWords(
" test", {{3, 4}, {-1, -1}});
1049 testStringFindSplitWords(
"t ", {{0, 1}, {-1, -1}});
1050 testStringFindSplitWords(
"test ", {{0, 4}, {-1, -1}});
1054 testStringFindSplitWords(
" surrounding space test 123 ",
1055 {{3, 11}, {15, 5}, {21, 4}, {28, 3}, {-1, -1}});
1059 testStringFindSplitWords(
"", {{-1, -1}});
1063 testStringFindSplitWords(
" ", {{-1, -1}});
1064 testStringFindSplitWords(
" ", {{-1, -1}});
1068 const string words =
"too many chars";
1069 const int words_len = words.length();
1070 testStringFindSplitWords(words, words_len, {{0, 3}, {4, 4}, {9, 5}, {-1, -1}}, 3);
1071 testStringFindSplitWords(words, words_len, {{0, 3}, {4, 4}, {-1, -1}}, 2);
1072 testStringFindSplitWords(words, words_len, {{0, 3}, {-1, -1}}, 1);
1073 testStringFindSplitWords(words, words_len, {{-1, -1}}, 0);
1077 const string words =
"too many chars";
1078 const int words_len = words.length();
1079 testStringFindSplitWords(words, words_len, {{0, 3}, {4, 4}, {9, 5}, {-1, -1}});
1080 testStringFindSplitWords(words, words_len - 1, {{0, 3}, {4, 4}, {9, 4}, {-1, -1}});
1081 testStringFindSplitWords(words, words_len - 5, {{0, 3}, {4, 4}, {-1, -1}});
1082 testStringFindSplitWords(words, 1, {{0, 1}, {-1, -1}});
1083 testStringFindSplitWords(words, 0, {{-1, -1}});
1145 const char *str_test0 =
"search here";
1174TEST(
string, StringMaxPossibleWordCount)
1223 for (
const auto &item : items) {
1230 for (
const auto &item : items) {
1237 for (
const auto &item : items) {
1249 ret_array.reserve(items.size());
1250 for (
const auto &item : items) {
1251 ret_array.push_back({item[1], item[0]});
1266 const CompareWordsArray equal{
1269 const CompareWordsArray negative{
1273 CompareWordsArray positive = copyWithSwappedWords(negative);
1275 testReturnsZeroForAll(equal);
1276 testReturnsLessThanZeroForAll(negative);
1277 testReturnsMoreThanZeroForAll(positive);
1282 const CompareWordsArray equal{
1287 const CompareWordsArray negative{
1293 CompareWordsArray positive = copyWithSwappedWords(negative);
1295 testReturnsZeroForAll(equal);
1296 testReturnsLessThanZeroForAll(negative);
1297 testReturnsMoreThanZeroForAll(positive);
1302 const CompareWordsArray equal{
1307 {
"je møder",
"je møder"},
1309 const CompareWordsArray negative{
1314 {
"je møda",
"je møder"},
1316 CompareWordsArray positive = copyWithSwappedWords(negative);
1318 testReturnsZeroForAll(equal);
1319 testReturnsLessThanZeroForAll(negative);
1320 testReturnsMoreThanZeroForAll(positive);
1325 const CompareWordsArray equal{
1332 const CompareWordsArray negative{
1352 CompareWordsArray positive = copyWithSwappedWords(negative);
1354 testReturnsZeroForAll(equal);
1355 testReturnsLessThanZeroForAll(negative);
1356 testReturnsMoreThanZeroForAll(positive);
1361 const CompareWordsArray equal{
1367 const CompareWordsArray negative{
1370 {
"foo.bar",
"foo 1.bar"},
1372 CompareWordsArray positive = copyWithSwappedWords(negative);
1374 testReturnsZeroForAll(equal);
1375 testReturnsLessThanZeroForAll(negative);
1376 testReturnsMoreThanZeroForAll(positive);
1381 const CompareWordsArray equal{
1387 const CompareWordsArray negative{
1394 const CompareWordsArray positive = copyWithSwappedWords(negative);
1396 testReturnsZeroForAll(equal);
1397 testReturnsLessThanZeroForAll(negative);
1398 testReturnsMoreThanZeroForAll(positive);
1403 const CompareWordsArray equal{
1404 {
"00je møder1",
"00je møder1"},
1409 const CompareWordsArray negative{
1410 {
"00je møder0",
"00je møder1"},
1411 {
"05je møder0",
"06je møder1"},
1412 {
"Cube",
"Cube.001"},
1413 {
"Cube.001",
"Cube.002"},
1414 {
"CUbe.001",
"Cube.002"},
1415 {
"CUbe.002",
"Cube.002"},
1417 const CompareWordsArray positive = copyWithSwappedWords(negative);
1419 testReturnsZeroForAll(equal);
1420 testReturnsLessThanZeroForAll(negative);
1421 testReturnsMoreThanZeroForAll(positive);
1440 size_t dst_test_len;
1442 for (
const auto &item : items) {
1444 EXPECT_LT((strlen(item[0]) * 2) + 1,
sizeof(dst_test));
1446 dst_test_len =
BLI_str_escape(dst_test, item[0],
sizeof(dst_test));
1447 EXPECT_STREQ(dst_test, item[1]);
1448 EXPECT_EQ(dst_test_len, strlen(dst_test));
1451 EXPECT_STREQ(dst_test, item[0]);
1452 EXPECT_EQ(dst_test_len, strlen(dst_test));
1462 const CompareWordsArray equal{
1469 const CompareWordsArray escaped{
1476 {
"\"\\",
"\\\"\\\\"},
1478 {
"\\\"",
"\\\\\\\""},
1480 {
"\"\\\"",
"\\\"\\\\\\\""},
1483 {
"\"\"\"",
"\\\"\\\"\\\""},
1485 {
"\\\\\\",
"\\\\\\\\\\\\"},
1488 testEscapeWords(equal);
1489 testEscapeWords(escaped);
1494 const CompareWordsArray escaped{
1504 {
"\n\r\t\a\b\f",
"\\n\\r\\t\\a\\b\\f"},
1506 {
"\n_\r_\t_\a_\b_\f",
"\\n_\\r_\\t_\\a_\\b_\\f"},
1508 {
"\n\\\r\\\t\\\a\\\b\\\f",
"\\n\\\\\\r\\\\\\t\\\\\\a\\\\\\b\\\\\\f"},
1511 testEscapeWords(escaped);
1521 EXPECT_STREQ(
str,
"Hello");
1527 EXPECT_STREQ(
str,
"Hello, ");
EXPECT_EQ(BLI_expr_pylike_eval(expr, nullptr, 0, &result), EXPR_PYLIKE_INVALID)
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
#define STRNCPY(dst, src)
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
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
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 STRNCPY_UTF8_TRUNCATE(byte_size,...)
#define STR_N_CAT(dst_init, dst_size, src, result_expect)
#define STRNCPY_UTF8_ASCII_TRUNCATE(maxncpy,...)
#define STRNCPY_UTF8_ASCII(...)
TEST_F(StringFindSplitWords, Simple)
#define STRNCPY_UTF8_TERMINATE_EARLY(byte_size,...)
static std::ostream & operator<<(std::ostream &os, const WordInfo &word_info)
TEST(string, StrCopyUTF8_ASCII)
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()
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()
size_t bool BLI_string_is_decimal(const char *string) ATTR_NONNULL(1)
Read Guarded memory(de)allocation.
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
static void * buffer_alloc(const BLI_Buffer *buffer, const size_t len)
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)
void MEM_freeN(void *vmemh)
unsigned __int64 uint64_t
bool operator==(const WordInfo &other) const
WordInfo(int start, int end)