TEST_F(OrientationIteratorTest, JapaneseMahjonggMixed)
{
    CHECK_RUNS({ { "いろはに🀤ほへと", OrientationIterator::OrientationKeep } });
}
TEST_F(OrientationIteratorTest, PunctuationJapanese)
{
    CHECK_RUNS({ { ".…¡", OrientationIterator::OrientationRotateSideways },
        { "ほへと", OrientationIterator::OrientationKeep } });
}
TEST_F(OrientationIteratorTest, JapaneseLatinMixedOutside)
{
    CHECK_RUNS({ { "Abc", OrientationIterator::OrientationRotateSideways },
        { "ほへと", OrientationIterator::OrientationKeep },
        { "Xyz", OrientationIterator::OrientationRotateSideways } });
}
TEST_F(OrientationIteratorTest, MarkAtFirstCharUpright)
{
    // U+20DD COMBINING ENCLOSING CIRCLE is Me (Mark, Enclosing) with Upright.
    CHECK_RUNS({ { "\xE2\x83\x9D", OrientationIterator::OrientationKeep } });
}
TEST_F(OrientationIteratorTest, MarksAtFirstCharUpright)
{
    // U+20DD COMBINING ENCLOSING CIRCLE is Me (Mark, Enclosing) with Upright.
    // U+0300 COMBINING GRAVE ACCENT is Mn (Mark, Nonspacing) with Rotated.
    CHECK_RUNS({ { "\xE2\x83\x9D\xCC\x80", OrientationIterator::OrientationKeep } });
}
TEST_F(OrientationIteratorTest, OneEthiopicSyllable)
{
    CHECK_RUNS({ { "ጀ", OrientationIterator::OrientationRotateSideways } });
}
TEST_F(SmallCapsIteratorTest, LowercasePunctuationInterleaved)
{
    CHECK_RUNS({ { "aaa", SmallCapsIterator::SmallCapsUppercaseNeeded },
        { "===", SmallCapsIterator::SmallCapsSameCase },
        { "bbb", SmallCapsIterator::SmallCapsUppercaseNeeded } });
}
TEST_F(SmallCapsIteratorTest, UppercaseLowercaseA)
{
    CHECK_RUNS({ { "A", SmallCapsIterator::SmallCapsSameCase },
        { "a", SmallCapsIterator::SmallCapsUppercaseNeeded } });
}
TEST_F(OrientationIteratorTest, OneCharJapanese)
{
    CHECK_RUNS({ { "い", OrientationIterator::OrientationKeep } });
}
TEST_F(SmallCapsIteratorTest, UppercaseA)
{
    CHECK_RUNS({ { "A", SmallCapsIterator::SmallCapsSameCase } });
}
TEST_F(SmallCapsIteratorTest, LowercaseA)
{
    CHECK_RUNS({ { "a", SmallCapsIterator::SmallCapsUppercaseNeeded } });
}
TEST_F(SmallCapsIteratorTest, CombiningCharacterSequence)
{
    CHECK_RUNS({ { "èü", SmallCapsIterator::SmallCapsUppercaseNeeded } });
}
TEST_F(SmallCapsIteratorTest, Armenian)
{
    CHECK_RUNS({ { "աբգդ", SmallCapsIterator::SmallCapsUppercaseNeeded },
        { "ԵԶԷԸ", SmallCapsIterator::SmallCapsSameCase } });
}
TEST_F(SmallCapsIteratorTest, Japanese)
{
    CHECK_RUNS({ { "ほへと", SmallCapsIterator::SmallCapsSameCase } });
}
TEST_F(OrientationIteratorTest, OneCharLatin)
{
    CHECK_RUNS({ { "A", OrientationIterator::OrientationRotateSideways } });
}
TEST_F(OrientationIteratorTest, Japanese)
{
    CHECK_RUNS({ { "いろはにほへと", OrientationIterator::OrientationKeep } });
}
TEST_F(OrientationIteratorTest, OneAceOfSpades)
{
    CHECK_RUNS({ { "🂡", OrientationIterator::OrientationKeep } });
}
TEST_F(OrientationIteratorTest, IVS)
{
    CHECK_RUNS({ { "愉\xF3\xA0\x84\x81", OrientationIterator::OrientationKeep } });
}
TEST_F(OrientationIteratorTest, JapaneseLetterlikeEnd)
{
    CHECK_RUNS({ { "いろは", OrientationIterator::OrientationKeep },
        { "ℐℒℐℒℐℒℐℒℐℒℐℒℐℒ", OrientationIterator::OrientationRotateSideways } });
}
TEST_F(SmallCapsIteratorTest, UppercasePunctuationMixed)
{
    CHECK_RUNS({ { "AAA??", SmallCapsIterator::SmallCapsSameCase } });
}