3 #include "testing/testing.h"
6 #include <initializer_list>
17 using std::initializer_list;
28 const char delim[] = {
'-',
'.',
'_',
'~',
'\\',
'\0'};
29 const char *sep, *suf;
33 const char *
str =
"mat.e-r_ial";
39 EXPECT_STREQ(
"e-r_ial", suf);
44 const char *
str =
".mate-rial--";
50 EXPECT_STREQ(
"mate-rial--", suf);
54 const char *
str =
".__.--_";
60 EXPECT_STREQ(
"__.--_", suf);
74 const char *
str =
"material";
85 TEST(
string, StrRPartition)
87 const char delim[] = {
'-',
'.',
'_',
'~',
'\\',
'\0'};
88 const char *sep, *suf;
92 const char *
str =
"mat.e-r_ial";
98 EXPECT_STREQ(
"ial", suf);
103 const char *
str =
".mate-rial--";
109 EXPECT_STREQ(
"", suf);
113 const char *
str =
".__.--_";
119 EXPECT_STREQ(
"", suf);
123 const char *
str =
"";
133 const char *
str =
"material";
146 const char delim[] = {
'-',
'.',
'_',
'~',
'\\',
'\0'};
147 const char *sep, *suf;
153 const char *
str =
"mat.e-r_ia.l";
159 EXPECT_STREQ(
"r_ia.l", suf);
164 const char *
str =
"mate.rial";
177 const unsigned int delim[] = {
'-',
'.',
'_', 0x00F1 , 0x262F ,
'\0'};
178 const char *sep, *suf;
182 const char *
str =
"ma\xc3\xb1te-r\xe2\x98\xafial";
188 EXPECT_STREQ(
"te-r\xe2\x98\xafial", suf);
193 const char *
str =
"\xe2\x98\xafmate-rial-\xc3\xb1";
199 EXPECT_STREQ(
"mate-rial-\xc3\xb1", suf);
203 const char *
str =
"\xe2\x98\xaf.\xc3\xb1_.--\xc3\xb1";
209 EXPECT_STREQ(
".\xc3\xb1_.--\xc3\xb1", suf);
213 const char *
str =
"";
223 const char *
str =
"material";
234 TEST(
string, StrRPartitionUtf8)
236 const unsigned int delim[] = {
'-',
'.',
'_', 0x00F1 , 0x262F ,
'\0'};
237 const char *sep, *suf;
241 const char *
str =
"ma\xc3\xb1te-r\xe2\x98\xafial";
247 EXPECT_STREQ(
"ial", suf);
252 const char *
str =
"\xe2\x98\xafmate-rial-\xc3\xb1";
258 EXPECT_STREQ(
"", suf);
262 const char *
str =
"\xe2\x98\xaf.\xc3\xb1_.--\xc3\xb1";
268 EXPECT_STREQ(
"", suf);
272 const char *
str =
"";
282 const char *
str =
"material";
293 TEST(
string, StrPartitionExUtf8)
295 const unsigned int delim[] = {
'-',
'.',
'_', 0x00F1 , 0x262F ,
'\0'};
296 const char *sep, *suf;
302 const char *
str =
"ma\xc3\xb1te-r\xe2\x98\xafial";
309 EXPECT_STREQ(
"te-r\xe2\x98\xafial", suf);
314 const char *
str =
"mate\xe2\x98\xafrial";
325 TEST(
string, StrFormatIntGrouped)
331 EXPECT_STREQ(
"0", num_str);
334 EXPECT_STREQ(
"1", num_str);
337 EXPECT_STREQ(
"-1", num_str);
340 EXPECT_STREQ(
"-2,147,483,648", num_str);
343 EXPECT_STREQ(
"2,147,483,647", num_str);
346 EXPECT_STREQ(
"1,000", num_str);
349 EXPECT_STREQ(
"-1,000", num_str);
352 EXPECT_STREQ(
"999", num_str);
355 EXPECT_STREQ(
"-999", num_str);
359 TEST(
string, StrFormatByteUnits)
366 EXPECT_STREQ(
"0 B", size_str);
368 EXPECT_STREQ(
"0 B", size_str);
371 EXPECT_STREQ(
"1 B", size_str);
373 EXPECT_STREQ(
"-1 B", size_str);
376 EXPECT_STREQ(
"1 KB", size_str);
378 EXPECT_STREQ(
"-1 KB", size_str);
381 EXPECT_STREQ(
"1 KB", size_str);
383 EXPECT_STREQ(
"-1 KB", size_str);
387 EXPECT_STREQ(
"9223.372 PB", size_str);
389 EXPECT_STREQ(
"-9223.372 PB", size_str);
393 EXPECT_STREQ(
"0 B", size_str);
395 EXPECT_STREQ(
"0 B", size_str);
398 EXPECT_STREQ(
"1 B", size_str);
400 EXPECT_STREQ(
"-1 B", size_str);
403 EXPECT_STREQ(
"1000 B", size_str);
405 EXPECT_STREQ(
"-1000 B", size_str);
408 EXPECT_STREQ(
"1 KiB", size_str);
410 EXPECT_STREQ(
"-1 KiB", size_str);
414 EXPECT_STREQ(
"8192.0 PiB", size_str);
416 EXPECT_STREQ(
"-8192.0 PiB", size_str);
420 EXPECT_STREQ(
"-8191.8472 PiB", size_str);
438 os <<
"start: " << word_info.
start <<
", end: " << word_info.
end;
453 const size_t max_length,
454 initializer_list<WordInfo> expected_words_info_init,
458 if (max_words != -1) {
459 CHECK_LE(max_words, expected_words_info.size() - 1);
464 const int effective_max_words = (max_words == -1) ? expected_words_info.size() : max_words;
471 reinterpret_cast<int(*)[2]
>(actual_word_info.data()),
472 effective_max_words);
475 EXPECT_LE(actual_word_num, actual_word_info.size() - 1);
476 actual_word_info.resize(actual_word_num + 1);
478 EXPECT_EQ_VECTOR(actual_word_info, expected_words_info);
482 initializer_list<WordInfo> expected_words_info_init)
491 testStringFindSplitWords(
"t", {{0, 1}, {-1, -1}});
492 testStringFindSplitWords(
"test", {{0, 4}, {-1, -1}});
496 testStringFindSplitWords(
"f t w", {{0, 1}, {2, 1}, {4, 1}, {-1, -1}});
497 testStringFindSplitWords(
"find three words", {{0, 4}, {5, 5}, {11, 5}, {-1, -1}});
501 testStringFindSplitWords(
"# ## ### ####", {{0, 1}, {2, 2}, {5, 3}, {9, 4}, {-1, -1}});
502 testStringFindSplitWords(
"# # # #", {{0, 1}, {3, 1}, {7, 1}, {12, 1}, {-1, -1}});
506 testStringFindSplitWords(
" t", {{3, 1}, {-1, -1}});
507 testStringFindSplitWords(
" test", {{3, 4}, {-1, -1}});
511 testStringFindSplitWords(
"t ", {{0, 1}, {-1, -1}});
512 testStringFindSplitWords(
"test ", {{0, 4}, {-1, -1}});
516 testStringFindSplitWords(
" surrounding space test 123 ",
517 {{3, 11}, {15, 5}, {21, 4}, {28, 3}, {-1, -1}});
521 testStringFindSplitWords(
"", {{-1, -1}});
525 testStringFindSplitWords(
" ", {{-1, -1}});
526 testStringFindSplitWords(
" ", {{-1, -1}});
530 const string words =
"too many chars";
531 const int words_len = words.length();
532 testStringFindSplitWords(words, words_len, {{0, 3}, {4, 4}, {9, 5}, {-1, -1}}, 3);
533 testStringFindSplitWords(words, words_len, {{0, 3}, {4, 4}, {-1, -1}}, 2);
534 testStringFindSplitWords(words, words_len, {{0, 3}, {-1, -1}}, 1);
535 testStringFindSplitWords(words, words_len, {{-1, -1}}, 0);
539 const string words =
"too many chars";
540 const int words_len = words.length();
541 testStringFindSplitWords(words, words_len, {{0, 3}, {4, 4}, {9, 5}, {-1, -1}});
542 testStringFindSplitWords(words, words_len - 1, {{0, 3}, {4, 4}, {9, 4}, {-1, -1}});
543 testStringFindSplitWords(words, words_len - 5, {{0, 3}, {4, 4}, {-1, -1}});
544 testStringFindSplitWords(words, 1, {{0, 1}, {-1, -1}});
545 testStringFindSplitWords(words, 0, {{-1, -1}});
549 TEST(
string, StringStrncasestr)
551 const char *str_test0 =
"search here";
574 TEST(
string, StringMaxPossibleWordCount)
611 for (
const auto &item : items) {
618 for (
const auto &item : items) {
625 for (
const auto &item : items) {
637 ret_array.reserve(items.size());
638 for (
const auto &item : items) {
639 ret_array.push_back({item[1], item[0]});
648 const CompareWordsArray equal{
651 const CompareWordsArray negative{
655 CompareWordsArray positive = copyWithSwappedWords(negative);
657 testReturnsZeroForAll(equal);
658 testReturnsLessThanZeroForAll(negative);
659 testReturnsMoreThanZeroForAll(positive);
664 const CompareWordsArray equal{
669 const CompareWordsArray negative{
675 CompareWordsArray positive = copyWithSwappedWords(negative);
677 testReturnsZeroForAll(equal);
678 testReturnsLessThanZeroForAll(negative);
679 testReturnsMoreThanZeroForAll(positive);
684 const CompareWordsArray equal{
689 {
"je møder",
"je møder"},
691 const CompareWordsArray negative{
696 {
"je møda",
"je møder"},
698 CompareWordsArray positive = copyWithSwappedWords(negative);
700 testReturnsZeroForAll(equal);
701 testReturnsLessThanZeroForAll(negative);
702 testReturnsMoreThanZeroForAll(positive);
707 const CompareWordsArray equal{
714 const CompareWordsArray negative{
734 CompareWordsArray positive = copyWithSwappedWords(negative);
736 testReturnsZeroForAll(equal);
737 testReturnsLessThanZeroForAll(negative);
738 testReturnsMoreThanZeroForAll(positive);
743 const CompareWordsArray equal{
749 const CompareWordsArray negative{
752 {
"foo.bar",
"foo 1.bar"},
754 CompareWordsArray positive = copyWithSwappedWords(negative);
756 testReturnsZeroForAll(equal);
757 testReturnsLessThanZeroForAll(negative);
758 testReturnsMoreThanZeroForAll(positive);
763 const CompareWordsArray equal{
769 const CompareWordsArray negative{
776 const CompareWordsArray positive = copyWithSwappedWords(negative);
778 testReturnsZeroForAll(equal);
779 testReturnsLessThanZeroForAll(negative);
780 testReturnsMoreThanZeroForAll(positive);
785 const CompareWordsArray equal{
786 {
"00je møder1",
"00je møder1"},
791 const CompareWordsArray negative{
792 {
"00je møder0",
"00je møder1"},
793 {
"05je møder0",
"06je møder1"},
794 {
"Cube",
"Cube.001"},
795 {
"Cube.001",
"Cube.002"},
796 {
"CUbe.001",
"Cube.002"},
797 {
"CUbe.002",
"Cube.002"},
799 const CompareWordsArray positive = copyWithSwappedWords(negative);
801 testReturnsZeroForAll(equal);
802 testReturnsLessThanZeroForAll(negative);
803 testReturnsMoreThanZeroForAll(positive);
820 for (
const auto &item : items) {
823 EXPECT_STREQ(dst_test, item[1]);
824 EXPECT_EQ(dst_test_len, strlen(dst_test));
827 EXPECT_STREQ(dst_test, item[0]);
828 EXPECT_EQ(dst_test_len, strlen(dst_test));
835 const CompareWordsArray equal{
842 const CompareWordsArray escaped{
848 {
"\"\\",
"\\\"\\\\"},
849 {
"\\\"",
"\\\\\\\""},
850 {
"\"\\\"",
"\\\"\\\\\\\""},
852 {
"\"\"\"",
"\\\"\\\"\\\""},
853 {
"\\\\\\",
"\\\\\\\\\\\\"},
856 testEscapeWords(equal);
857 testEscapeWords(escaped);
862 const CompareWordsArray escaped{
871 {
"\n\r\t\a\b\f",
"\\n\\r\\t\\a\\b\\f"},
872 {
"\n_\r_\t_\a_\b_\f",
"\\n_\\r_\\t_\\a_\\b_\\f"},
873 {
"\n\\\r\\\t\\\a\\\b\\\f",
"\\n\\\\\\r\\\\\\t\\\\\\a\\\\\\b\\\\\\f"},
876 testEscapeWords(escaped);
EXPECT_EQ(BLI_expr_pylike_eval(expr, nullptr, 0, &result), EXPR_PYLIKE_INVALID)
size_t BLI_str_partition_ex(const char *str, const char *end, const char delim[], const char **sep, const char **suf, const bool from_right) ATTR_NONNULL(1
void BLI_str_format_byte_unit(char dst[15], long long int bytes, const bool base_10) ATTR_NONNULL()
char * BLI_strncasestr(const char *s, const char *find, size_t len) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
size_t int BLI_string_max_possible_word_count(const int str_len)
int BLI_string_find_split_words(const char *str, const size_t len, const char delim, int r_words[][2], int words_max) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
int BLI_strcasecmp_natural(const char *s1, const char *s2) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
size_t size_t char size_t BLI_str_escape(char *__restrict dst, const char *__restrict src, const size_t dst_maxncpy) ATTR_NONNULL()
size_t BLI_str_partition(const char *str, const char delim[], const char **sep, const char **suf) ATTR_NONNULL()
size_t BLI_str_unescape(char *__restrict dst, const char *__restrict src, const size_t src_maxncpy) ATTR_NONNULL()
size_t BLI_str_format_int_grouped(char dst[16], int num) ATTR_NONNULL()
size_t BLI_str_rpartition(const char *str, const char delim[], const char **sep, const char **suf) ATTR_NONNULL()
TEST(string, StrPartition)
TEST_F(StringFindSplitWords, Simple)
static std::ostream & operator<<(std::ostream &os, const WordInfo &word_info)
size_t BLI_str_rpartition_utf8(const char *str, const unsigned int delim[], const char **sep, const char **suf) ATTR_NONNULL()
size_t BLI_str_partition_ex_utf8(const char *str, const char *end, const unsigned int delim[], const char **sep, const char **suf, const bool from_right) ATTR_NONNULL(1
size_t BLI_str_partition_utf8(const char *str, const unsigned int delim[], const char **sep, const char **suf) ATTR_NONNULL()
bool BLI_string_is_decimal(const char *string) ATTR_NONNULL()
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
void testReturnsMoreThanZeroForAll(const CompareWordsArray &items)
void testReturnsZeroForAll(const CompareWordsArray &items)
void testReturnsLessThanZeroForAll(const CompareWordsArray &items)
StringCasecmpNatural()=default
CompareWordsArray copyWithSwappedWords(const CompareWordsArray &items)
void testEscapeWords(const CompareWordsArray &items)
void testStringFindSplitWords(const string &str, initializer_list< WordInfo > expected_words_info_init)
void testStringFindSplitWords(const string &str, const size_t max_length, initializer_list< WordInfo > expected_words_info_init, int max_words=-1)
std::vector< ElementType, Eigen::aligned_allocator< ElementType > > vector
bool operator==(const WordInfo &other) const
WordInfo(int start, int end)