#include "utility.hpp" #include int main() { static bool scope_exit = false; { ScopeGuard guard{[] { scope_exit = true; }}; g_assert(!scope_exit); } g_assert(scope_exit); g_assert(utf8_character_count("") == 0); g_assert(utf8_character_count("test") == 4); g_assert(utf8_character_count("æøå") == 3); g_assert(utf8_character_count("æøåtest") == 7); g_assert_cmpuint(utf16_code_units_byte_count("", 0), ==, 0); g_assert_cmpuint(utf16_code_units_byte_count("", 1), ==, 0); g_assert_cmpuint(utf16_code_units_byte_count("test", 0), ==, 0); g_assert_cmpuint(utf16_code_units_byte_count("test", 1), ==, 1); g_assert_cmpuint(utf16_code_units_byte_count("test", 3), ==, 3); g_assert_cmpuint(utf16_code_units_byte_count("test", 4), ==, 4); g_assert_cmpuint(utf16_code_units_byte_count("test", 5), ==, 4); g_assert_cmpuint(utf16_code_units_byte_count("æøå", 0), ==, 0); g_assert_cmpuint(utf16_code_units_byte_count("æøå", 1), ==, 2); g_assert_cmpuint(utf16_code_units_byte_count("æøå", 2), ==, 4); g_assert_cmpuint(utf16_code_units_byte_count("æøå", 3), ==, 6); g_assert_cmpuint(utf16_code_units_byte_count("æøå", 4), ==, 6); g_assert_cmpuint(utf16_code_units_byte_count("æøå", 5), ==, 6); g_assert_cmpuint(utf16_code_units_byte_count("æøå", 0, 2), ==, 0); g_assert_cmpuint(utf16_code_units_byte_count("æøå", 1, 2), ==, 2); g_assert_cmpuint(utf16_code_units_byte_count("æøå", 2, 2), ==, 4); g_assert_cmpuint(utf16_code_units_byte_count("æøå", 3, 2), ==, 4); g_assert_cmpuint(utf16_code_units_byte_count("æøå", 1, 6), ==, 0); g_assert_cmpuint(utf16_code_units_byte_count("æøå", 0, 6), ==, 0); g_assert_cmpuint(strlen("🔥"), ==, 4); // Fire emoji g_assert_cmpuint(utf16_code_units_byte_count("🔥", 0), ==, 0); // Fire emoji g_assert_cmpuint(utf16_code_units_byte_count("🔥", 2), ==, 4); // Fire emoji g_assert_cmpuint(utf16_code_units_byte_count("🔥", 3), ==, 4); // Fire emoji g_assert_cmpuint(utf16_code_units_byte_count("test🔥test", 0), ==, 0); // Fire emoji between test words g_assert_cmpuint(utf16_code_units_byte_count("test🔥test", 4), ==, 4); // Fire emoji between test words g_assert_cmpuint(utf16_code_units_byte_count("test🔥test", 6), ==, 8); // Fire emoji between test words g_assert_cmpuint(utf16_code_units_byte_count("test🔥test", 7), ==, 9); // Fire emoji between test words g_assert_cmpuint(utf16_code_units_byte_count("test🔥test", 10), ==, 12); // Fire emoji between test words g_assert_cmpuint(utf16_code_units_byte_count("test🔥test", 11), ==, 12); // Fire emoji between test words std::string empty; std::string test("test"); std::string testtest("testtest"); g_assert(starts_with("", empty)); g_assert(starts_with("", "")); g_assert(starts_with(empty, "")); g_assert(starts_with(empty, empty)); g_assert(starts_with(empty, 0, "")); g_assert(starts_with(empty, 0, empty)); g_assert(ends_with(empty, "")); g_assert(ends_with(empty, empty)); g_assert(starts_with(test.c_str(), empty)); g_assert(starts_with(test.c_str(), "")); g_assert(starts_with(test, "")); g_assert(starts_with(test, empty)); g_assert(starts_with(test, 0, "")); g_assert(starts_with(test, 0, empty)); g_assert(ends_with(test, "")); g_assert(ends_with(test, empty)); g_assert(!starts_with(empty, 10, "")); g_assert(!starts_with(empty, 10, empty)); g_assert(!starts_with(test, 10, "")); g_assert(!starts_with(test, 10, empty)); g_assert(!starts_with(test, 10, test.c_str())); g_assert(!starts_with(test, 10, test)); g_assert(starts_with(test, 2, test.c_str() + 2)); g_assert(starts_with(test, 2, test.substr(2))); g_assert(ends_with(test, test.c_str() + 2)); g_assert(ends_with(test, test.substr(2))); g_assert(starts_with(test.c_str(), test)); g_assert(starts_with(test.c_str(), test.c_str())); g_assert(starts_with(test, test.c_str())); g_assert(starts_with(test, test)); g_assert(starts_with(test, 0, test.c_str())); g_assert(starts_with(test, 0, test)); g_assert(ends_with(test, test.c_str())); g_assert(ends_with(test, test)); g_assert(starts_with(testtest.c_str(), test)); g_assert(starts_with(testtest.c_str(), test.c_str())); g_assert(starts_with(testtest, test.c_str())); g_assert(starts_with(testtest, test)); g_assert(starts_with(testtest, 0, test.c_str())); g_assert(starts_with(testtest, 0, test)); g_assert(ends_with(testtest, test.c_str())); g_assert(ends_with(testtest, test)); g_assert(ends_with(testtest, "ttest")); g_assert(ends_with(testtest, std::string("ttest"))); g_assert(!starts_with(test.c_str(), testtest)); g_assert(!starts_with(test.c_str(), testtest.c_str())); g_assert(!starts_with(test, testtest.c_str())); g_assert(!starts_with(test, testtest)); g_assert(!starts_with(test, 0, testtest.c_str())); g_assert(!starts_with(test, 0, testtest)); g_assert(!ends_with(test, testtest.c_str())); g_assert(!ends_with(test, testtest)); g_assert(!starts_with(empty.c_str(), test)); g_assert(!starts_with(empty.c_str(), test.c_str())); g_assert(!starts_with(empty, test.c_str())); g_assert(!starts_with(empty, test)); g_assert(!starts_with(empty, 0, test.c_str())); g_assert(!starts_with(empty, 0, test)); g_assert(!ends_with(empty, test.c_str())); g_assert(!ends_with(empty, test)); }