Skip to content

Commit 600144c

Browse files
committed
Add strings equal functions
1 parent b62525e commit 600144c

File tree

2 files changed

+111
-5
lines changed

2 files changed

+111
-5
lines changed

include/scratchcpp/string_functions.h

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,11 @@
22

33
#pragma once
44

5-
#include <cstddef>
6-
7-
#include "global.h"
5+
#include "stringptr.h"
86

97
namespace libscratchcpp
108
{
119

12-
struct StringPtr;
13-
1410
extern "C"
1511
{
1612
LIBSCRATCHCPP_EXPORT void string_alloc(StringPtr *str, size_t size);
@@ -31,4 +27,24 @@ extern "C"
3127
LIBSCRATCHCPP_EXPORT bool string_contains_case_insensitive(const StringPtr *str, const StringPtr *substr);
3228
}
3329

30+
static inline bool raw_strings_equal_case_sensitive(const char16_t *str1, size_t n1, const char16_t *str2, size_t n2)
31+
{
32+
return n1 == n2 && string_compare_raw_case_sensitive(str1, n1, str2, n2) == 0;
33+
}
34+
35+
static inline bool strings_equal_case_sensitive(const StringPtr *str1, const StringPtr *str2)
36+
{
37+
return raw_strings_equal_case_sensitive(str1->data, str1->size, str2->data, str2->size);
38+
}
39+
40+
static inline bool raw_strings_equal_case_insensitive(const char16_t *str1, size_t n1, const char16_t *str2, size_t n2)
41+
{
42+
return n1 == n2 && string_compare_raw_case_insensitive(str1, n1, str2, n2) == 0;
43+
}
44+
45+
static inline bool strings_equal_case_insensitive(const StringPtr *str1, const StringPtr *str2)
46+
{
47+
return raw_strings_equal_case_insensitive(str1->data, str1->size, str2->data, str2->size);
48+
}
49+
3450
} // namespace libscratchcpp

test/scratch_classes/string_functions_test.cpp

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -395,3 +395,93 @@ TEST(StringFunctionsTest, ContainsCaseInsensitive)
395395
ASSERT_FALSE(string_contains_case_insensitive(&str, &substr));
396396
ASSERT_FALSE(string_contains_raw_case_insensitive(str.data, substr.data));
397397
}
398+
399+
TEST(StringFunctionsTest, EqualCaseSensitive)
400+
{
401+
StringPtr str1, str2;
402+
403+
string_assign_cstring(&str1, "abcd");
404+
string_assign_cstring(&str2, "abcd");
405+
ASSERT_TRUE(strings_equal_case_sensitive(&str1, &str2));
406+
ASSERT_TRUE(raw_strings_equal_case_sensitive(str1.data, str1.size, str2.data, str2.size));
407+
408+
string_assign_cstring(&str1, "5.25");
409+
string_assign_cstring(&str2, "5.26");
410+
ASSERT_FALSE(strings_equal_case_sensitive(&str1, &str2));
411+
ASSERT_FALSE(raw_strings_equal_case_sensitive(str1.data, str1.size, str2.data, str2.size));
412+
413+
string_assign_cstring(&str1, "aBcd");
414+
string_assign_cstring(&str2, "abCd");
415+
ASSERT_FALSE(strings_equal_case_sensitive(&str1, &str2));
416+
ASSERT_FALSE(raw_strings_equal_case_sensitive(str1.data, str1.size, str2.data, str2.size));
417+
418+
string_assign_cstring(&str1, "Hello");
419+
string_assign_cstring(&str2, "olleH");
420+
ASSERT_FALSE(strings_equal_case_sensitive(&str1, &str2));
421+
ASSERT_FALSE(raw_strings_equal_case_sensitive(str1.data, str1.size, str2.data, str2.size));
422+
423+
string_assign_cstring(&str1, "Lorem ipsum");
424+
string_assign_cstring(&str2, "dolor sit amet");
425+
ASSERT_FALSE(strings_equal_case_sensitive(&str1, &str2));
426+
ASSERT_FALSE(raw_strings_equal_case_sensitive(str1.data, str1.size, str2.data, str2.size));
427+
428+
string_assign_cstring(&str1, "ábčď");
429+
string_assign_cstring(&str2, "ábČď");
430+
ASSERT_FALSE(strings_equal_case_sensitive(&str1, &str2));
431+
ASSERT_FALSE(raw_strings_equal_case_sensitive(str1.data, str1.size, str2.data, str2.size));
432+
433+
string_assign_cstring(&str1, "test đ");
434+
string_assign_cstring(&str2, "test Đ");
435+
ASSERT_FALSE(strings_equal_case_sensitive(&str1, &str2));
436+
ASSERT_FALSE(raw_strings_equal_case_sensitive(str1.data, str1.size, str2.data, str2.size));
437+
438+
string_assign_cstring(&str1, "💀");
439+
string_assign_cstring(&str2, "💀");
440+
ASSERT_TRUE(strings_equal_case_sensitive(&str1, &str2));
441+
ASSERT_TRUE(raw_strings_equal_case_sensitive(str1.data, str1.size, str2.data, str2.size));
442+
}
443+
444+
TEST(StringFunctionsTest, EqualCaseInsensitive)
445+
{
446+
StringPtr str1, str2;
447+
448+
string_assign_cstring(&str1, "abcd");
449+
string_assign_cstring(&str2, "abcd");
450+
ASSERT_TRUE(strings_equal_case_insensitive(&str1, &str2));
451+
ASSERT_TRUE(raw_strings_equal_case_insensitive(str1.data, str1.size, str2.data, str2.size));
452+
453+
string_assign_cstring(&str1, "5.25");
454+
string_assign_cstring(&str2, "5.26");
455+
ASSERT_FALSE(strings_equal_case_insensitive(&str1, &str2));
456+
ASSERT_FALSE(raw_strings_equal_case_insensitive(str1.data, str1.size, str2.data, str2.size));
457+
458+
string_assign_cstring(&str1, "aBcd");
459+
string_assign_cstring(&str2, "abCd");
460+
ASSERT_TRUE(strings_equal_case_insensitive(&str1, &str2));
461+
ASSERT_TRUE(raw_strings_equal_case_insensitive(str1.data, str1.size, str2.data, str2.size));
462+
463+
string_assign_cstring(&str1, "Hello");
464+
string_assign_cstring(&str2, "olleH");
465+
ASSERT_FALSE(strings_equal_case_insensitive(&str1, &str2));
466+
ASSERT_FALSE(raw_strings_equal_case_insensitive(str1.data, str1.size, str2.data, str2.size));
467+
468+
string_assign_cstring(&str1, "Lorem ipsum");
469+
string_assign_cstring(&str2, "dolor sit amet");
470+
ASSERT_FALSE(strings_equal_case_insensitive(&str1, &str2));
471+
ASSERT_FALSE(raw_strings_equal_case_insensitive(str1.data, str1.size, str2.data, str2.size));
472+
473+
string_assign_cstring(&str1, "ábčď");
474+
string_assign_cstring(&str2, "ábČď");
475+
ASSERT_TRUE(strings_equal_case_insensitive(&str1, &str2));
476+
ASSERT_TRUE(raw_strings_equal_case_insensitive(str1.data, str1.size, str2.data, str2.size));
477+
478+
string_assign_cstring(&str1, "test đ");
479+
string_assign_cstring(&str2, "test Đ");
480+
ASSERT_TRUE(strings_equal_case_insensitive(&str1, &str2));
481+
ASSERT_TRUE(raw_strings_equal_case_insensitive(str1.data, str1.size, str2.data, str2.size));
482+
483+
string_assign_cstring(&str1, "💀");
484+
string_assign_cstring(&str2, "💀");
485+
ASSERT_TRUE(strings_equal_case_insensitive(&str1, &str2));
486+
ASSERT_TRUE(raw_strings_equal_case_insensitive(str1.data, str1.size, str2.data, str2.size));
487+
}

0 commit comments

Comments
 (0)