12345678910111213141516171819202122232425262728293031323334353637383940 |
- // Copyright 2017 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #include "components/zucchini/typed_value.h"
- #include <type_traits>
- #include "testing/gtest/include/gtest/gtest.h"
- namespace zucchini {
- struct ValueA : TypedValue<ValueA, int> {
- using ValueA::TypedValue::TypedValue;
- };
- struct ValueB : TypedValue<ValueB, int> {
- using ValueB::TypedValue::TypedValue;
- };
- TEST(TypedIdTest, Value) {
- EXPECT_EQ(42, ValueA(42).value());
- EXPECT_EQ(42, static_cast<int>(ValueA(42))); // explicit cast
- }
- TEST(TypedIdTest, Comparison) {
- EXPECT_TRUE(ValueA(0) == ValueA(0));
- EXPECT_FALSE(ValueA(0) == ValueA(42));
- EXPECT_FALSE(ValueA(0) != ValueA(0));
- EXPECT_TRUE(ValueA(0) != ValueA(42));
- }
- TEST(TypedIdTest, StrongType) {
- static_assert(!std::is_convertible<ValueA, ValueB>::value,
- "ValueA should not be convertible to ValueB");
- static_assert(!std::is_convertible<ValueB, ValueA>::value,
- "ValueB should not be convertible to ValueA");
- }
- } // namespace zucchini
|