| 109 | } |
| 110 | |
| 111 | void |
| 112 | testUtf8Sequence() |
| 113 | { |
| 114 | char const* str = "\xE0\xA0\x80\00\00"; |
| 115 | detail::utf8_sequence seq; |
| 116 | seq.save(str, std::strlen(str)); |
| 117 | BOOST_TEST(seq.complete()); |
| 118 | BOOST_TEST(seq.length() == 3); |
| 119 | BOOST_TEST(seq.needed() == 0); |
| 120 | BOOST_TEST(string_view(seq.data(), 3) == str); |
| 121 | BOOST_TEST(seq.valid()); |
| 122 | |
| 123 | seq.save(str, 1); |
| 124 | BOOST_TEST(!seq.complete()); |
| 125 | BOOST_TEST(seq.length() == 3); |
| 126 | BOOST_TEST(seq.needed() == 2); |
| 127 | BOOST_TEST(string_view(seq.data(), 1) == string_view(str, 1)); |
| 128 | |
| 129 | seq.append(str + 1, 1); |
| 130 | BOOST_TEST(!seq.complete()); |
| 131 | BOOST_TEST(seq.length() == 3); |
| 132 | BOOST_TEST(seq.needed() == 1); |
| 133 | BOOST_TEST(string_view(seq.data(), 2) == string_view(str, 2)); |
| 134 | |
| 135 | seq.append(str + 2, 2); |
| 136 | BOOST_TEST(seq.complete()); |
| 137 | BOOST_TEST(seq.length() == 3); |
| 138 | BOOST_TEST(seq.needed() == 0); |
| 139 | BOOST_TEST(string_view(seq.data(), 3) == str); |
| 140 | BOOST_TEST(seq.valid()); |
| 141 | |
| 142 | seq.append(str + 3, 1); |
| 143 | BOOST_TEST(seq.complete()); |
| 144 | BOOST_TEST(seq.length() == 3); |
| 145 | BOOST_TEST(seq.needed() == 0); |
| 146 | BOOST_TEST(string_view(seq.data(), 3) == str); |
| 147 | BOOST_TEST(seq.valid()); |
| 148 | |
| 149 | str = "\xF0\x90\x80\x80"; |
| 150 | seq.save(str, std::strlen(str)); |
| 151 | BOOST_TEST(seq.complete()); |
| 152 | BOOST_TEST(seq.length() == 4); |
| 153 | BOOST_TEST(seq.needed() == 0); |
| 154 | BOOST_TEST(string_view(seq.data(), 4) == str); |
| 155 | BOOST_TEST(seq.valid()); |
| 156 | |
| 157 | str = "\xF0\x90\x80\xC0"; |
| 158 | seq.save(str, std::strlen(str)); |
| 159 | BOOST_TEST(seq.complete()); |
| 160 | BOOST_TEST(seq.length() == 4); |
| 161 | BOOST_TEST(seq.needed() == 0); |
| 162 | BOOST_TEST(string_view(seq.data(), 4) == str); |
| 163 | BOOST_TEST(!seq.valid()); |
| 164 | } |
| 165 | |
| 166 | void |
| 167 | run() |