2
0
mirror of https://github.com/boostorg/spirit.git synced 2026-01-19 16:52:10 +00:00
Files
spirit/test/support/char_encoding.cpp

155 lines
7.0 KiB
C++

/*=============================================================================
Copyright (c) 2020 Nikita Kniazev
Use, modification and distribution is subject to the Boost Software
License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
http://www.boost.org/LICENSE_1_0.txt)
=============================================================================*/
#include <boost/spirit/home/support/char_encoding/standard_wide.hpp>
#include <boost/spirit/home/support/char_encoding/unicode.hpp>
#include <boost/core/lightweight_test.hpp>
#if defined(_MSC_VER) && _MSC_VER < 1700
# pragma warning(disable: 4428) // universal-character-name encountered in source
#endif
int main()
{
{
using boost::spirit::char_encoding::standard_wide;
BOOST_TEST_EQ(standard_wide::toucs4(L'\uFFFF'), 0xFFFFu);
BOOST_TEST_EQ(standard_wide::toucs4(L'\u7FFF'), 0x7FFFu);
BOOST_TEST_EQ(standard_wide::toucs4(L'\u0024'), 0x0024u);
}
{ // Unicode major categories
using namespace boost::spirit::char_encoding;
BOOST_TEST(unicode::is_letter(0x037Fu));
BOOST_TEST(!unicode::is_letter(0x065Fu));
BOOST_TEST(unicode::is_mark(0x065Fu));
BOOST_TEST(!unicode::is_mark(0x0DE6u));
BOOST_TEST(unicode::is_number(0x0DE6u));
BOOST_TEST(!unicode::is_number(0x3000u));
BOOST_TEST(unicode::is_separator(0x3000u));
BOOST_TEST(!unicode::is_separator(0x0604u));
BOOST_TEST(unicode::is_other(0x0604u));
BOOST_TEST(!unicode::is_other(0x2E3Cu));
BOOST_TEST(unicode::is_punctuation(0x2E3Cu));
BOOST_TEST(!unicode::is_punctuation(0x26CEu));
BOOST_TEST(unicode::is_symbol(0x26CEu));
BOOST_TEST(!unicode::is_symbol(0x037Fu));
}
{ // Unicode general categories
using namespace boost::spirit::char_encoding;
BOOST_TEST(unicode::is_uppercase_letter(0x037Fu));
BOOST_TEST(!unicode::is_uppercase_letter(0x065Fu));
BOOST_TEST(unicode::is_lowercase_letter(0xABBAu));
BOOST_TEST(!unicode::is_lowercase_letter(0x1ABEu));
BOOST_TEST(unicode::is_titlecase_letter(0x1F88u));
BOOST_TEST(!unicode::is_titlecase_letter(0x1BE7u));
BOOST_TEST(unicode::is_modifier_letter(0x08C9u));
BOOST_TEST(!unicode::is_modifier_letter(0xA9F0u));
BOOST_TEST(unicode::is_other_letter(0x08C8u));
BOOST_TEST(!unicode::is_other_letter(0x12463u));
BOOST_TEST(unicode::is_nonspacing_mark(0x065Fu));
BOOST_TEST(!unicode::is_nonspacing_mark(0x16B5Bu));
BOOST_TEST(unicode::is_enclosing_mark(0x1ABEu));
BOOST_TEST(!unicode::is_enclosing_mark(0x06DEu));
BOOST_TEST(unicode::is_spacing_mark(0x1BE7u));
BOOST_TEST(!unicode::is_spacing_mark(0x2000u));
BOOST_TEST(unicode::is_decimal_number(0xA9F0u));
BOOST_TEST(!unicode::is_decimal_number(0x2028u));
BOOST_TEST(unicode::is_letter_number(0x12463u));
BOOST_TEST(!unicode::is_letter_number(0x2029u));
BOOST_TEST(unicode::is_other_number(0x16B5Bu));
BOOST_TEST(!unicode::is_other_number(0x0604u));
BOOST_TEST(unicode::is_space_separator(0x2000u));
BOOST_TEST(!unicode::is_space_separator(0x10FFFDu));
BOOST_TEST(unicode::is_line_separator(0x2028u));
BOOST_TEST(!unicode::is_line_separator(0xDDDDu));
BOOST_TEST(unicode::is_paragraph_separator(0x2029u));
BOOST_TEST(!unicode::is_paragraph_separator(0x1FFEu));
BOOST_TEST(unicode::is_control(0x0000u));
BOOST_TEST(!unicode::is_control(0x037Fu));
BOOST_TEST(unicode::is_format(0x0604u));
BOOST_TEST(!unicode::is_format(0x0606u));
BOOST_TEST(unicode::is_private_use(0x10FFFDu));
BOOST_TEST(!unicode::is_private_use(0xABBAu));
BOOST_TEST(unicode::is_surrogate(0xDDDDu));
BOOST_TEST(!unicode::is_surrogate(0x1F88u));
BOOST_TEST(unicode::is_unassigned(0x1FFFu));
BOOST_TEST(!unicode::is_unassigned(0x1FFEu));
BOOST_TEST(unicode::is_dash_punctuation(0x2E3Au));
BOOST_TEST(!unicode::is_dash_punctuation(0x08C9u));
BOOST_TEST(unicode::is_open_punctuation(0x2E42u));
BOOST_TEST(!unicode::is_open_punctuation(0x08C8u));
BOOST_TEST(unicode::is_close_punctuation(0x2E56u));
BOOST_TEST(!unicode::is_close_punctuation(0x065Fu));
BOOST_TEST(unicode::is_connector_punctuation(0x203Fu));
BOOST_TEST(!unicode::is_connector_punctuation(0x1ABEu));
BOOST_TEST(unicode::is_other_punctuation(0x00B6u));
BOOST_TEST(!unicode::is_other_punctuation(0x1BE7u));
BOOST_TEST(unicode::is_initial_punctuation(0x00ABu));
BOOST_TEST(!unicode::is_initial_punctuation(0xA9F0u));
BOOST_TEST(unicode::is_final_punctuation(0x00BBu));
BOOST_TEST(!unicode::is_final_punctuation(0x12463u));
BOOST_TEST(unicode::is_math_symbol(0x27CBu));
BOOST_TEST(!unicode::is_math_symbol(0x16B5Bu));
BOOST_TEST(unicode::is_currency_symbol(0x11FDDu));
BOOST_TEST(!unicode::is_currency_symbol(0x2000u));
BOOST_TEST(unicode::is_modifier_symbol(0xAB5Bu));
BOOST_TEST(!unicode::is_modifier_symbol(0x2028u));
BOOST_TEST(unicode::is_other_symbol(0x27BFu));
BOOST_TEST(!unicode::is_other_symbol(0x2029u));
}
{ // Unicode derived categories
using namespace boost::spirit::char_encoding;
BOOST_TEST(unicode::is_alphabetic(0x0555u));
BOOST_TEST(!unicode::is_alphabetic(0x0557u));
BOOST_TEST(unicode::is_uppercase(0x10410u));
BOOST_TEST(!unicode::is_uppercase(0x10430u));
BOOST_TEST(unicode::is_lowercase(0x00AAu));
BOOST_TEST(!unicode::is_lowercase(0x00ABu));
BOOST_TEST(unicode::is_white_space(0x2002u));
BOOST_TEST(!unicode::is_white_space(0x200Bu));
BOOST_TEST(unicode::is_hex_digit(0xFF26u));
BOOST_TEST(!unicode::is_hex_digit(0xFF27u));
BOOST_TEST(unicode::is_noncharacter_code_point(0x10FFFEu));
BOOST_TEST(!unicode::is_noncharacter_code_point(0x10FFFDu));
BOOST_TEST(unicode::is_default_ignorable_code_point(0xE0FFFu));
BOOST_TEST(!unicode::is_default_ignorable_code_point(0xE1000u));
}
{ // Unicode scripts
using namespace boost::spirit::char_encoding;
BOOST_TEST(unicode::is_arabic(0x060Du));
BOOST_TEST(!unicode::is_arabic(0xE000u));
BOOST_TEST(unicode::is_braille(0x2828u));
BOOST_TEST(!unicode::is_braille(0x2728u));
BOOST_TEST(unicode::is_toto(0x1E290u));
BOOST_TEST(!unicode::is_toto(0x1E2AFu));
BOOST_TEST(unicode::is_inherited(0x0300u));
BOOST_TEST(!unicode::is_inherited(0x02FFu));
BOOST_TEST(unicode::is_common(0xE0001u));
BOOST_TEST(!unicode::is_common(0xE0000u));
BOOST_TEST(unicode::is_unknown(0xA63Fu));
BOOST_TEST(unicode::is_unknown(0xD800u));
BOOST_TEST(unicode::is_unknown(0xE000u));
BOOST_TEST(unicode::is_unknown(0x10FFFFu));
BOOST_TEST(!unicode::is_unknown(0xE0001u));
}
return boost::report_errors();
}