@@ -186,3 +186,45 @@ TEST(LlvmLibcCharacterConverterUTF32To8Test, CantPushMidConversion) {
186186 int err = cr.push (utf32);
187187 ASSERT_EQ (err, -1 );
188188}
189+
190+ TEST (LlvmLibcCharacterConverterUTF32To8Test, InvalidState) {
191+ LIBC_NAMESPACE::internal::mbstate s1;
192+ LIBC_NAMESPACE::internal::CharacterConverter c1 (&s1);
193+ ASSERT_TRUE (c1.isValidState ());
194+
195+ LIBC_NAMESPACE::internal::mbstate s2{0 , 2 , 0 };
196+ LIBC_NAMESPACE::internal::CharacterConverter c2 (&s2);
197+ ASSERT_FALSE (c2.isValidState ());
198+
199+ LIBC_NAMESPACE::internal::mbstate s3{0x7f , 1 , 1 };
200+ LIBC_NAMESPACE::internal::CharacterConverter c3 (&s3);
201+ ASSERT_TRUE (c3.isValidState ());
202+ LIBC_NAMESPACE::internal::mbstate s4{0x80 , 1 , 1 };
203+ LIBC_NAMESPACE::internal::CharacterConverter c4 (&s4);
204+ ASSERT_FALSE (c4.isValidState ());
205+
206+ LIBC_NAMESPACE::internal::mbstate s5{0x7ff , 1 , 2 };
207+ LIBC_NAMESPACE::internal::CharacterConverter c5 (&s5);
208+ ASSERT_TRUE (c5.isValidState ());
209+ LIBC_NAMESPACE::internal::mbstate s6{0x800 , 1 , 2 };
210+ LIBC_NAMESPACE::internal::CharacterConverter c6 (&s6);
211+ ASSERT_FALSE (c6.isValidState ());
212+
213+ LIBC_NAMESPACE::internal::mbstate s7{0xffff , 1 , 3 };
214+ LIBC_NAMESPACE::internal::CharacterConverter c7 (&s7);
215+ ASSERT_TRUE (c7.isValidState ());
216+ LIBC_NAMESPACE::internal::mbstate s8{0x10000 , 1 , 3 };
217+ LIBC_NAMESPACE::internal::CharacterConverter c8 (&s8);
218+ ASSERT_FALSE (c8.isValidState ());
219+
220+ LIBC_NAMESPACE::internal::mbstate s9{0x10ffff , 1 , 4 };
221+ LIBC_NAMESPACE::internal::CharacterConverter c9 (&s9);
222+ ASSERT_TRUE (c9.isValidState ());
223+ LIBC_NAMESPACE::internal::mbstate s10{0x110000 , 1 , 2 };
224+ LIBC_NAMESPACE::internal::CharacterConverter c10 (&s10);
225+ ASSERT_FALSE (c10.isValidState ());
226+
227+ LIBC_NAMESPACE::internal::mbstate s11{0 , 0 , 5 };
228+ LIBC_NAMESPACE::internal::CharacterConverter c11 (&s11);
229+ ASSERT_FALSE (c11.isValidState ());
230+ }
0 commit comments