| // Copyright 2023 The PDFium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "core/fxcrt/utf16.h" |
| |
| #include "testing/gtest/include/gtest/gtest.h" |
| |
| namespace pdfium { |
| |
| static_assert(kSurrogateMask == 0x3ff); |
| static_assert(kMaximumSupplementaryCodePoint == 0x10ffff); |
| static_assert(kMaximumHighSurrogateCodeUnit == 0xdbff); |
| static_assert(kMinimumLowSurrogateCodeUnit == 0xdc00); |
| static_assert(kMaximumLowSurrogateCodeUnit == 0xdfff); |
| |
| static_assert(!IsSupplementary(0xffff)); |
| static_assert(IsSupplementary(0x10000)); |
| static_assert(IsSupplementary(0x10ffff)); |
| static_assert(!IsSupplementary(0x110000)); |
| |
| static_assert(!IsHighSurrogate(0xd7ff)); |
| static_assert(IsHighSurrogate(0xd800)); |
| static_assert(IsHighSurrogate(0xdbff)); |
| static_assert(!IsHighSurrogate(0xdc00)); |
| |
| static_assert(!IsLowSurrogate(0xdbff)); |
| static_assert(IsLowSurrogate(0xdc00)); |
| static_assert(IsLowSurrogate(0xdfff)); |
| static_assert(!IsLowSurrogate(0xe000)); |
| |
| static_assert(SurrogatePair(0xd800, 0xdc00).high() == 0xd800); |
| static_assert(SurrogatePair(0xd800, 0xdc00).low() == 0xdc00); |
| static_assert(SurrogatePair(0xd800, 0xdc00).ToCodePoint() == 0x10000); |
| |
| static_assert(SurrogatePair(0xdbff, 0xdfff).high() == 0xdbff); |
| static_assert(SurrogatePair(0xdbff, 0xdfff).low() == 0xdfff); |
| static_assert(SurrogatePair(0xdbff, 0xdfff).ToCodePoint() == 0x10ffff); |
| |
| static_assert(SurrogatePair(0x10000).high() == 0xd800); |
| static_assert(SurrogatePair(0x10000).low() == 0xdc00); |
| static_assert(SurrogatePair(0x10000).ToCodePoint() == 0x10000); |
| |
| static_assert(SurrogatePair(0x10ffff).high() == 0xdbff); |
| static_assert(SurrogatePair(0x10ffff).low() == 0xdfff); |
| static_assert(SurrogatePair(0x10ffff).ToCodePoint() == 0x10ffff); |
| |
| TEST(SurrogatePairTest, RoundTrip) { |
| for (char32_t code_point = kMinimumSupplementaryCodePoint; |
| code_point <= kMaximumSupplementaryCodePoint; ++code_point) { |
| SurrogatePair from_code_point(code_point); |
| EXPECT_EQ(code_point, from_code_point.ToCodePoint()); |
| |
| SurrogatePair from_pair(from_code_point.high(), from_code_point.low()); |
| EXPECT_EQ(from_code_point.high(), from_pair.high()); |
| EXPECT_EQ(from_code_point.low(), from_pair.low()); |
| EXPECT_EQ(code_point, from_pair.ToCodePoint()); |
| } |
| } |
| |
| } // namespace pdfium |