// 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