aboutsummaryrefslogtreecommitdiff
path: root/examples/AutomatedTest/test_string.cpp
diff options
context:
space:
mode:
authorsfan5 <sfan5@live.de>2022-11-11 16:25:49 +0100
committersfan5 <sfan5@live.de>2022-11-11 16:25:49 +0100
commitb9e0641203990ebc1bfcdf5fa259694ad58f2f85 (patch)
tree51f6335db00dbdb3f65d5e7b151a050dc0c81da7 /examples/AutomatedTest/test_string.cpp
parent6f98515f344eb34e9317ef9bb92fee3a2a2bee95 (diff)
downloadirrlicht-b9e0641203990ebc1bfcdf5fa259694ad58f2f85.tar.xz
Add unittests for irrString
Diffstat (limited to 'examples/AutomatedTest/test_string.cpp')
-rw-r--r--examples/AutomatedTest/test_string.cpp187
1 files changed, 187 insertions, 0 deletions
diff --git a/examples/AutomatedTest/test_string.cpp b/examples/AutomatedTest/test_string.cpp
new file mode 100644
index 0000000..adf4d63
--- /dev/null
+++ b/examples/AutomatedTest/test_string.cpp
@@ -0,0 +1,187 @@
+#include <irrString.h>
+#include <cstring>
+#include <clocale>
+#include <vector>
+#include "test_helper.h"
+
+using namespace irr;
+using namespace irr::core;
+
+#define CMPSTR(a, b) (!strcmp(a, b))
+#define UASSERTSTR(actual, expected) UASSERTCMP(CMPSTR, actual.c_str(), expected)
+
+static void test_basics()
+{
+ // ctor
+ stringc s;
+ UASSERTEQ(s.c_str()[0], '\0');
+ s = stringc(0.1234567);
+ UASSERTSTR(s, "0.123457");
+ s = stringc(static_cast<int>(-102400));
+ UASSERTSTR(s, "-102400");
+ s = stringc(static_cast<unsigned int>(102400));
+ UASSERTSTR(s, "102400");
+ s = stringc(static_cast<long>(-1024000));
+ UASSERTSTR(s, "-1024000");
+ s = stringc(static_cast<unsigned long>(1024000));
+ UASSERTSTR(s, "1024000");
+ s = stringc("YESno", 3);
+ UASSERTSTR(s, "YES");
+ s = stringc("Hello World!");
+ UASSERTSTR(s, "Hello World!");
+ // operator=
+ s = stringw(L"abcdef");
+ UASSERTSTR(s, "abcdef");
+ s = stringc("test");
+ s = s.c_str();
+ UASSERTSTR(s, "test");
+ s = s.c_str() + 1;
+ UASSERTSTR(s, "est");
+ s = L"abcdef";
+ UASSERTSTR(s, "abcdef");
+ s = static_cast<const char*>(nullptr);
+ UASSERTSTR(s, "");
+ // the rest
+ s = "f";
+ UASSERTEQ(s[0], 'f');
+ const auto &sref = s;
+ UASSERTEQ(sref[0], 'f');
+ UASSERT(sref == "f");
+ UASSERT(sref == stringc("f"));
+ s = "a";
+ UASSERT(sref < stringc("aa"));
+ UASSERT(sref < stringc("b"));
+ UASSERT(stringc("Z") < sref);
+ UASSERT(!(sref < stringc("a")));
+ s = "dog";
+ UASSERT(sref != "cat");
+ UASSERT(sref != stringc("cat"));
+}
+
+static void test_methods()
+{
+ stringc s;
+ const auto &sref = s;
+ s = "irrlicht";
+ UASSERTEQ(sref.size(), 8);
+ UASSERT(!sref.empty());
+ s.clear();
+ UASSERTEQ(sref.size(), 0);
+ UASSERT(sref.empty());
+ s = "\tAz#`";
+ s.make_lower();
+ UASSERTSTR(s, "\taz#`");
+ s.make_upper();
+ UASSERTSTR(s, "\tAZ#`");
+ UASSERT(sref.equals_ignore_case("\taz#`"));
+ UASSERT(sref.equals_substring_ignore_case("Z#`", 2));
+ s = "irrlicht";
+ UASSERT(sref.equalsn(stringc("irr"), 3));
+ UASSERT(sref.equalsn("irr", 3));
+ s = "fo";
+ s.append('o');
+ UASSERTSTR(s, "foo");
+ s.append("bar", 1);
+ UASSERTSTR(s, "foob");
+ s.append("ar", 999999);
+ UASSERTSTR(s, "foobar");
+ s = "nyan";
+ s.append(stringc("cat"));
+ UASSERTSTR(s, "nyancat");
+ s.append(stringc("sam"), 1);
+ UASSERTSTR(s, "nyancats");
+ s = "fbar";
+ s.insert(1, "ooXX", 2);
+ UASSERTSTR(s, "foobar");
+ UASSERTEQ(sref.findFirst('o'), 1);
+ UASSERTEQ(sref.findFirst('X'), -1);
+ UASSERTEQ(sref.findFirstChar("abff", 2), 3);
+ UASSERTEQ(sref.findFirstCharNotInList("fobb", 2), 3);
+ UASSERTEQ(sref.findLast('o'), 2);
+ UASSERTEQ(sref.findLast('X'), -1);
+ UASSERTEQ(sref.findLastChar("abrr", 2), 4);
+ UASSERTEQ(sref.findLastCharNotInList("rabb", 2), 3);
+ UASSERTEQ(sref.findNext('o', 2), 2);
+ UASSERTEQ(sref.findLast('o', 1), 1);
+ s = "ob-oob";
+ UASSERTEQ(sref.find("ob", 1), 4);
+ UASSERTEQ(sref.find("ob"), 0);
+ UASSERTEQ(sref.find("?"), -1);
+ s = "HOMEOWNER";
+ stringc s2 = sref.subString(2, 4);
+ UASSERTSTR(s2, "MEOW");
+ s2 = sref.subString(2, 4, true);
+ UASSERTSTR(s2, "meow");
+ s = "land";
+ s.replace('l', 's');
+ UASSERTSTR(s, "sand");
+ s = ">dog<";
+ s.replace("dog", "cat");
+ UASSERTSTR(s, ">cat<");
+ s.replace("cat", "horse");
+ UASSERTSTR(s, ">horse<");
+ s.replace("horse", "gnu");
+ UASSERTSTR(s, ">gnu<");
+ s = " h e l p ";
+ s.remove(' ');
+ UASSERTSTR(s, "help");
+ s.remove("el");
+ UASSERTSTR(s, "hp");
+ s = "irrlicht";
+ s.removeChars("it");
+ UASSERTSTR(s, "rrlch");
+ s = "\r\nfoo bar ";
+ s.trim();
+ UASSERTSTR(s, "foo bar");
+ s = "foxo";
+ s.erase(2);
+ UASSERTSTR(s, "foo");
+ s = "a";
+ s.append('\0');
+ s.append('b');
+ UASSERTEQ(s.size(), 3);
+ s.validate();
+ UASSERTEQ(s.size(), 1);
+ UASSERTEQ(s.lastChar(), 'a');
+ std::vector<stringc> res;
+ s = "a,,b,c";
+ s.split(res, ",aa", 1, true, false);
+ UASSERTEQ(res.size(), 3);
+ UASSERTSTR(res[0], "a");
+ UASSERTSTR(res[2], "c");
+ res.clear();
+ s.split(res, ",", 1, false, true);
+ UASSERTEQ(res.size(), 7);
+ UASSERTSTR(res[0], "a");
+ UASSERTSTR(res[2], "");
+ for (int i = 0; i < 3; i++)
+ UASSERTSTR(res[2*i+1], ",");
+}
+
+static void test_conv()
+{
+ // assumes Unicode and UTF-8 locale
+ setlocale(LC_CTYPE, "");
+
+ stringw out;
+ multibyteToWString(out, "†††");
+ UASSERTEQ(out.size(), 3);
+ for (int i = 0; i < 3; i++)
+ UASSERTEQ(static_cast<u16>(out[i]), 0x2020);
+ stringc out2;
+ wStringToMultibyte(out2, L"†††");
+ UASSERTEQ(out2.size(), 9);
+ for (int i = 0; i < 3; i++) {
+ UASSERTEQ(static_cast<u8>(out2[3*i]), 0xe2);
+ UASSERTEQ(static_cast<u8>(out2[3*i+1]), 0x80);
+ UASSERTEQ(static_cast<u8>(out2[3*i+2]), 0xa0);
+ }
+}
+
+void test_irr_string()
+{
+ test_basics();
+ test_methods();
+ test_conv();
+ std::cout << " test_irr_string PASSED" << std::endl;
+}