blob: 35428697e7dedbde45dbac304a2a368ffe7c9bf8 [file] [log] [blame]
// Copyright 2026 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/to_underlying.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace fxcrt {
TEST(ToUnderlyingTest, Basic) {
enum class E { kA = 1, kB = 2 };
EXPECT_EQ(static_cast<std::underlying_type_t<E>>(1), to_underlying(E::kA));
EXPECT_EQ(static_cast<std::underlying_type_t<E>>(2), to_underlying(E::kB));
}
TEST(ToUnderlyingTest, NonClassEnum) {
enum E { kA = 1, kB = 2 };
EXPECT_EQ(static_cast<std::underlying_type_t<E>>(1), to_underlying(kA));
EXPECT_EQ(static_cast<std::underlying_type_t<E>>(2), to_underlying(kB));
}
TEST(ToUnderlyingTest, UnderlyingType) {
enum class E : int { kA = 1, kB = 2 };
EXPECT_EQ(static_cast<std::underlying_type_t<E>>(1), to_underlying(E::kA));
EXPECT_EQ(static_cast<std::underlying_type_t<E>>(2), to_underlying(E::kB));
}
TEST(ToUnderlyingTest, OutOfOrderIndices) {
enum class E { kA = 1, kB = 67 };
EXPECT_EQ(static_cast<std::underlying_type_t<E>>(1), to_underlying(E::kA));
EXPECT_EQ(static_cast<std::underlying_type_t<E>>(67), to_underlying(E::kB));
}
TEST(ToUnderlyingTest, NegativeValues) {
enum class E : int { kNeg = -1, kZero = 0, kPos = 1 };
EXPECT_EQ(static_cast<std::underlying_type_t<E>>(-1), to_underlying(E::kNeg));
EXPECT_EQ(static_cast<std::underlying_type_t<E>>(0), to_underlying(E::kZero));
EXPECT_EQ(static_cast<std::underlying_type_t<E>>(1), to_underlying(E::kPos));
}
TEST(ToUnderlyingTest, LargeValues) {
enum class E : unsigned long long {
kMax = 0xFFFFFFFFFFFFFFFF,
kMid = 1234567890123456789ULL
};
EXPECT_EQ(static_cast<std::underlying_type_t<E>>(0xFFFFFFFFFFFFFFFFULL),
to_underlying(E::kMax));
EXPECT_EQ(static_cast<std::underlying_type_t<E>>(1234567890123456789ULL),
to_underlying(E::kMid));
}
TEST(ToUnderlyingTest, CustomUnderlyingType) {
enum class E : char { kA = 1, kB = 127 };
EXPECT_EQ(static_cast<std::underlying_type_t<E>>(1), to_underlying(E::kA));
EXPECT_EQ(static_cast<std::underlying_type_t<E>>(127), to_underlying(E::kB));
}
TEST(ToUnderlyingTest, MultipleEnums) {
enum class E1 { kA = 1 };
enum class E2 { kB = 2 };
EXPECT_EQ(static_cast<std::underlying_type_t<E1>>(1), to_underlying(E1::kA));
EXPECT_EQ(static_cast<std::underlying_type_t<E2>>(2), to_underlying(E2::kB));
}
} // namespace fxcrt