diff options
Diffstat (limited to 'typed_value_unittest.cc')
-rw-r--r-- | typed_value_unittest.cc | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/typed_value_unittest.cc b/typed_value_unittest.cc new file mode 100644 index 0000000..bc0d4f1 --- /dev/null +++ b/typed_value_unittest.cc @@ -0,0 +1,40 @@ +// 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 |