Mercurial > libunicode
view test/unicode++.cpp @ 10:ae1003c2a284
misc: extreme simplification
author | David Demelier <markand@malikania.fr> |
---|---|
date | Wed, 25 Mar 2020 09:56:05 +0100 |
parents | |
children | 083f11d2536f |
line wrap: on
line source
/* * unicode++.cpp -- main test file for unicode * * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ /* * /!\ Be sure to keep this file with UTF-8 encoding /!\ */ #define GREATEST_USE_ABBREVS 0 #include <greatest.h> #include <unicode.hpp> /* * Conversion UTF32 -> UTF8 * ------------------------------------------------------------------ */ GREATEST_TEST utf32_to_utf8_ascii() { std::u32string u32{'a', 'b', 'c'}; std::string s = unicode::to_utf8(u32); GREATEST_ASSERT(s == "abc"); GREATEST_PASS(); } GREATEST_TEST utf32_to_utf8_valid() { std::u32string u32{'a', U'é', 'c', U'𠀀'}; std::string s = unicode::to_utf8(u32); std::string expected = u8"aéc𠀀"; GREATEST_ASSERT(s == expected); GREATEST_PASS(); } GREATEST_TEST utf32_to_utf8_invalid() { std::u32string u32{'a', 0xffffffff, 'b'}; try { unicode::to_utf8(u32); GREATEST_FAIL(); } catch (...) { GREATEST_PASS(); } } GREATEST_SUITE(utf32_to_utf8) { GREATEST_RUN_TEST(utf32_to_utf8_ascii); GREATEST_RUN_TEST(utf32_to_utf8_valid); GREATEST_RUN_TEST(utf32_to_utf8_invalid); } /* * Conversion UTF8 -> UTF32 * ------------------------------------------------------------------ */ GREATEST_TEST utf8_to_utf32_ascii() { std::string s{"abc"}; std::u32string expected{'a', 'b', 'c'}; std::u32string result = unicode::to_utf32(s); GREATEST_ASSERT_EQ(result, expected); GREATEST_PASS(); } GREATEST_TEST utf8_to_utf32_valid() { std::string s{u8"aéc𠀀"}; std::u32string expected{'a', U'é', 'c', U'𠀀'}; std::u32string result = unicode::to_utf32(s); GREATEST_ASSERT_EQ(result, expected); GREATEST_PASS(); } GREATEST_SUITE(utf8_to_utf32) { GREATEST_RUN_TEST(utf8_to_utf32_ascii); GREATEST_RUN_TEST(utf8_to_utf32_valid); } /* * UTF32 to upper * ------------------------------------------------------------------ */ GREATEST_TEST utf32_toupper_ascii() { std::u32string u32{'a', 'b', 'c'}; std::u32string expected{'A', 'B', 'C'}; std::u32string result = unicode::toupper(u32); GREATEST_ASSERT_EQ(result, expected); GREATEST_PASS(); } GREATEST_TEST utf32_toupper_valid() { std::u32string u32{U'ä', U'ç', U'ë'}; std::u32string expected{U'Ä', U'Ç', U'Ë'}; std::u32string result = unicode::toupper(u32); GREATEST_ASSERT_EQ(result, expected); GREATEST_PASS(); } GREATEST_TEST utf32_toupper_invalid() { std::u32string u32{'a', 0xFFFFFFFF, 'b'}; std::u32string expected{'A', 0xFFFFFFFF, 'B'}; std::u32string result = unicode::toupper(u32); GREATEST_ASSERT_EQ(result, expected); GREATEST_PASS(); } GREATEST_SUITE(utf32_toupper) { GREATEST_RUN_TEST(utf32_toupper_ascii); GREATEST_RUN_TEST(utf32_toupper_valid); GREATEST_RUN_TEST(utf32_toupper_invalid); } /* * UTF32 to lower * ------------------------------------------------------------------ */ GREATEST_TEST utf32_tolower_ascii() { std::u32string u32{'A', 'B', 'C'}; std::u32string expected{'a', 'b', 'c'}; std::u32string result = unicode::tolower(u32); GREATEST_ASSERT_EQ(result, expected); GREATEST_PASS(); } GREATEST_TEST utf32_tolower_valid() { std::u32string u32{U'Ä', U'Ç', U'Ë'}; std::u32string expected{U'ä', U'ç', U'ë'}; std::u32string result = unicode::tolower(u32); GREATEST_ASSERT_EQ(result, expected); GREATEST_PASS(); } GREATEST_TEST utf32_tolower_invalid() { std::u32string u32{'A', 0xFFFFFFFF, 'B'}; std::u32string expected{'a', 0xFFFFFFFF, 'b'}; std::u32string result = unicode::tolower(u32); GREATEST_ASSERT_EQ(result, expected); GREATEST_PASS(); } GREATEST_SUITE(utf32_tolower) { GREATEST_RUN_TEST(utf32_tolower_ascii); GREATEST_RUN_TEST(utf32_tolower_valid); GREATEST_RUN_TEST(utf32_tolower_invalid); } /* * UTF8 to upper * ------------------------------------------------------------------ */ GREATEST_TEST utf8_toupper_ascii() { std::string s{"abc"}; std::string r = unicode::toupper(s); GREATEST_ASSERT(r == "ABC"); GREATEST_PASS(); } GREATEST_TEST utf8_toupper_valid() { std::string s{u8"aéc"}; std::string r = unicode::toupper(s); GREATEST_ASSERT(r == u8"AÉC"); GREATEST_PASS(); } GREATEST_TEST utf8_toupper_invalid() { try { unicode::toupper("a" "\xff" "b"); GREATEST_FAIL(); } catch (...) { GREATEST_PASS(); } } GREATEST_SUITE(utf8_toupper) { GREATEST_RUN_TEST(utf8_toupper_ascii); GREATEST_RUN_TEST(utf8_toupper_valid); GREATEST_RUN_TEST(utf8_toupper_invalid); } /* * UTF8 to lower * ------------------------------------------------------------------ */ GREATEST_TEST utf8_tolower_ascii() { std::string s{"ABC"}; std::string r = unicode::tolower(s); GREATEST_ASSERT(r == "abc"); GREATEST_PASS(); } GREATEST_TEST utf8_tolower_valid() { std::string s{u8"AÉC"}; std::string r = unicode::tolower(s); GREATEST_ASSERT(r == u8"aéc"); GREATEST_PASS(); } GREATEST_TEST utf8_tolower_invalid() { std::string s{"A" "\xFF""B"}; try { unicode::tolower(s); GREATEST_FAIL(); } catch (...) { GREATEST_PASS(); } } GREATEST_SUITE(utf8_tolower) { GREATEST_RUN_TEST(utf8_tolower_ascii); GREATEST_RUN_TEST(utf8_tolower_valid); GREATEST_RUN_TEST(utf8_tolower_invalid); } /* * Checks functions * ------------------------------------------------------------------ */ GREATEST_TEST checks_isalpha() { GREATEST_ASSERT(unicode::isalpha(U'é')); GREATEST_ASSERT(!unicode::isalpha(U'€')); GREATEST_PASS(); } GREATEST_TEST checks_isdigit() { GREATEST_ASSERT(unicode::isdigit(U'۱')); GREATEST_ASSERT(!unicode::isdigit(U'€')); GREATEST_PASS(); } GREATEST_TEST checks_islower() { GREATEST_ASSERT(unicode::islower(U'a')); GREATEST_ASSERT(unicode::islower(U'é')); GREATEST_ASSERT(!unicode::islower(U'A')); GREATEST_ASSERT(!unicode::islower(U'É')); GREATEST_PASS(); } GREATEST_TEST checks_isspace() { GREATEST_ASSERT(unicode::isspace(U' ')); GREATEST_ASSERT(!unicode::isspace(U'é')); GREATEST_PASS(); } GREATEST_TEST checks_istitle() { GREATEST_ASSERT(unicode::istitle(U'Dž')); GREATEST_ASSERT(!unicode::istitle(U'€')); GREATEST_PASS(); } GREATEST_TEST checks_isupper() { GREATEST_ASSERT(!unicode::isupper('a')); GREATEST_ASSERT(!unicode::isupper(U'é')); GREATEST_ASSERT(unicode::isupper('A')); GREATEST_ASSERT(unicode::isupper(U'É')); GREATEST_PASS(); } GREATEST_SUITE(checks) { GREATEST_RUN_TEST(checks_isalpha); GREATEST_RUN_TEST(checks_isdigit); GREATEST_RUN_TEST(checks_islower); GREATEST_RUN_TEST(checks_isspace); GREATEST_RUN_TEST(checks_istitle); GREATEST_RUN_TEST(checks_isupper); } /* * Miscellaneous * ------------------------------------------------------------------ */ GREATEST_TEST misc_nbytes_point() { GREATEST_ASSERT(unicode::nbytes_point('a') == 1); GREATEST_ASSERT(unicode::nbytes_point(U'é') == 2); GREATEST_ASSERT(unicode::nbytes_point(U'€') == 3); GREATEST_ASSERT(unicode::nbytes_point(U'𠀀') == 4); GREATEST_PASS(); } GREATEST_TEST misc_nbytes_utf8() { std::string s1{u8"a"}; std::string s2{u8"é"}; std::string s3{u8"€"}; std::string s4{u8"𠀀"}; GREATEST_ASSERT(unicode::nbytes_utf8(s1[0]) == 1); GREATEST_ASSERT(unicode::nbytes_utf8(s2[0]) == 2); GREATEST_ASSERT(unicode::nbytes_utf8(s3[0]) == 3); GREATEST_ASSERT(unicode::nbytes_utf8(s4[0]) == 4); GREATEST_PASS(); } GREATEST_TEST misc_for_each() { std::string s{u8"aé€𠀀"}; std::size_t total = 0; unicode::for_each(s, [&] (char32_t code) { total++; }); GREATEST_ASSERT_EQ(total, 4u); GREATEST_PASS(); } GREATEST_TEST misc_for_each_invalid() { std::string s{"a" "\xFF" "b"}; try { unicode::for_each(s, [&] (auto) {}); GREATEST_FAIL(); } catch (...) { GREATEST_PASS(); } } GREATEST_SUITE(misc) { GREATEST_RUN_TEST(misc_nbytes_point); GREATEST_RUN_TEST(misc_nbytes_utf8); GREATEST_RUN_TEST(misc_for_each); GREATEST_RUN_TEST(misc_for_each_invalid); } GREATEST_MAIN_DEFS(); int main(int argc, char **argv) { GREATEST_MAIN_BEGIN(); GREATEST_RUN_SUITE(utf32_to_utf8); GREATEST_RUN_SUITE(utf32_toupper); GREATEST_RUN_SUITE(utf32_tolower); GREATEST_RUN_SUITE(utf8_to_utf32); GREATEST_RUN_SUITE(utf8_toupper); GREATEST_RUN_SUITE(utf8_tolower); GREATEST_RUN_SUITE(checks); GREATEST_RUN_SUITE(misc); GREATEST_MAIN_END(); }