blob: bc0d4f137049c1fd89d469fc79b729d0cf32026d [file] [log] [blame]
// 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