aboutsummaryrefslogtreecommitdiff
path: root/typed_value_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'typed_value_unittest.cc')
-rw-r--r--typed_value_unittest.cc40
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