// 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 #include "testing/gtest/include/gtest/gtest.h" namespace zucchini { struct ValueA : TypedValue { using ValueA::TypedValue::TypedValue; }; struct ValueB : TypedValue { using ValueB::TypedValue::TypedValue; }; TEST(TypedIdTest, Value) { EXPECT_EQ(42, ValueA(42).value()); EXPECT_EQ(42, static_cast(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::value, "ValueA should not be convertible to ValueB"); static_assert(!std::is_convertible::value, "ValueB should not be convertible to ValueA"); } } // namespace zucchini