From c2b5be0836ddcf76a432ee38dca977e22a8fa3b6 Mon Sep 17 00:00:00 2001 From: Michele Caini Date: Mon, 13 Nov 2023 10:51:50 +0100 Subject: [PATCH] test: minor changes --- test/entt/core/any.cpp | 203 ++++++++++++++++++++++++++++++----------- 1 file changed, 150 insertions(+), 53 deletions(-) diff --git a/test/entt/core/any.cpp b/test/entt/core/any.cpp index 6e058e7f2..464e9979f 100644 --- a/test/entt/core/any.cpp +++ b/test/entt/core/any.cpp @@ -1192,42 +1192,114 @@ TEST_F(Any, AsRef) { } TEST_F(Any, Comparable) { - auto test = [](entt::any any, entt::any other) { - ASSERT_EQ(any, any); - ASSERT_NE(other, any); - ASSERT_NE(any, entt::any{}); + entt::any any{'c'}; + entt::any other{'a'}; - ASSERT_TRUE(any == any); - ASSERT_FALSE(other == any); - ASSERT_TRUE(any != other); - ASSERT_TRUE(entt::any{} != any); - }; + ASSERT_EQ(any, any); + ASSERT_NE(other, any); + ASSERT_NE(any, entt::any{}); + ASSERT_TRUE(any == any); + ASSERT_FALSE(other == any); + ASSERT_TRUE(any != other); + ASSERT_TRUE(entt::any{} != any); +} + +TEST_F(Any, NoSBOComparable) { + entt::any any{fat{.1, .2, .3, .4}}; + entt::any other{fat{.0, .1, .2, .3}}; + + ASSERT_EQ(any, any); + ASSERT_NE(other, any); + ASSERT_NE(any, entt::any{}); + + ASSERT_TRUE(any == any); + ASSERT_FALSE(other == any); + ASSERT_TRUE(any != other); + ASSERT_TRUE(entt::any{} != any); +} + +TEST_F(Any, RefComparable) { int value = 42; + entt::any any{entt::forward_as_any(value)}; + entt::any other{3}; - test('c', 'a'); - test(fat{.1, .2, .3, .4}, fat{.0, .1, .2, .3}); - test(entt::forward_as_any(value), 3); - test(3, entt::make_any(value)); - test('c', value); + ASSERT_EQ(any, any); + ASSERT_NE(other, any); + ASSERT_NE(any, entt::any{}); + + ASSERT_TRUE(any == any); + ASSERT_FALSE(other == any); + ASSERT_TRUE(any != other); + ASSERT_TRUE(entt::any{} != any); +} + +TEST_F(Any, ConstRefComparable) { + int value = 42; + entt::any any{3}; + entt::any other{entt::make_any(value)}; + + ASSERT_EQ(any, any); + ASSERT_NE(other, any); + ASSERT_NE(any, entt::any{}); + + ASSERT_TRUE(any == any); + ASSERT_FALSE(other == any); + ASSERT_TRUE(any != other); + ASSERT_TRUE(entt::any{} != any); +} + +TEST_F(Any, UnrelatedComparable) { + entt::any any{'c'}; + entt::any other{42}; + + ASSERT_EQ(any, any); + ASSERT_NE(other, any); + ASSERT_NE(any, entt::any{}); + + ASSERT_TRUE(any == any); + ASSERT_FALSE(other == any); + ASSERT_TRUE(any != other); + ASSERT_TRUE(entt::any{} != any); } TEST_F(Any, NonComparable) { - auto test = [](const auto &instance) { - auto any = entt::forward_as_any(instance); + const test::non_comparable instance{}; + auto any = entt::forward_as_any(instance); - ASSERT_EQ(any, any); - ASSERT_NE(any, entt::any{instance}); - ASSERT_NE(entt::any{}, any); + ASSERT_EQ(any, any); + ASSERT_NE(any, entt::any{instance}); + ASSERT_NE(entt::any{}, any); - ASSERT_TRUE(any == any); - ASSERT_FALSE(any == entt::any{instance}); - ASSERT_TRUE(entt::any{} != any); - }; + ASSERT_TRUE(any == any); + ASSERT_FALSE(any == entt::any{instance}); + ASSERT_TRUE(entt::any{} != any); +} - test(test::non_comparable{}); - test(std::unordered_map{}); - test(std::vector{}); +TEST_F(Any, AssociativeContainerOfNonComparable) { + const std::unordered_map instance{}; + auto any = entt::forward_as_any(instance); + + ASSERT_EQ(any, any); + ASSERT_NE(any, entt::any{instance}); + ASSERT_NE(entt::any{}, any); + + ASSERT_TRUE(any == any); + ASSERT_FALSE(any == entt::any{instance}); + ASSERT_TRUE(entt::any{} != any); +} + +TEST_F(Any, SequenceContainerOfNonComparable) { + const std::vector instance{}; + auto any = entt::forward_as_any(instance); + + ASSERT_EQ(any, any); + ASSERT_NE(any, entt::any{instance}); + ASSERT_NE(entt::any{}, any); + + ASSERT_TRUE(any == any); + ASSERT_FALSE(any == entt::any{instance}); + ASSERT_TRUE(entt::any{} != any); } TEST_F(Any, CompareVoid) { @@ -1455,44 +1527,69 @@ TEST_F(Any, Array) { } TEST_F(Any, CopyMoveReference) { - int value{}; + int value = 3; + auto any = entt::forward_as_any(value); + entt::any move = std::move(any); + entt::any copy = move; - auto test = [&](auto &&ref) { - value = 3; + ASSERT_TRUE(any); + ASSERT_TRUE(move); + ASSERT_TRUE(copy); - auto any = entt::forward_as_any(ref); - entt::any move = std::move(any); - entt::any copy = move; + ASSERT_FALSE(any.owner()); + ASSERT_FALSE(move.owner()); + ASSERT_TRUE(copy.owner()); - ASSERT_TRUE(any); - ASSERT_TRUE(move); - ASSERT_TRUE(copy); + ASSERT_EQ(any.policy(), entt::any_policy::ref); + ASSERT_EQ(move.policy(), entt::any_policy::ref); + ASSERT_EQ(copy.policy(), entt::any_policy::owner); - ASSERT_FALSE(any.owner()); - ASSERT_FALSE(move.owner()); - ASSERT_TRUE(copy.owner()); + ASSERT_EQ(move.type(), entt::type_id()); + ASSERT_EQ(copy.type(), entt::type_id()); - ASSERT_EQ(any.policy(), std::is_const_v> ? entt::any_policy::cref : entt::any_policy::ref); - ASSERT_EQ(move.policy(), std::is_const_v> ? entt::any_policy::cref : entt::any_policy::ref); - ASSERT_EQ(copy.policy(), entt::any_policy::owner); + ASSERT_EQ(std::as_const(move).data(), &value); + ASSERT_NE(std::as_const(copy).data(), &value); - ASSERT_EQ(move.type(), entt::type_id()); - ASSERT_EQ(copy.type(), entt::type_id()); + ASSERT_EQ(entt::any_cast(move), 3); + ASSERT_EQ(entt::any_cast(copy), 3); - ASSERT_EQ(std::as_const(move).data(), &value); - ASSERT_NE(std::as_const(copy).data(), &value); + value = 42; - ASSERT_EQ(entt::any_cast(move), 3); - ASSERT_EQ(entt::any_cast(copy), 3); + ASSERT_EQ(entt::any_cast(move), 42); + ASSERT_EQ(entt::any_cast(copy), 3); +} - value = 42; +TEST_F(Any, CopyMoveConstReference) { + int value = 3; + auto any = entt::forward_as_any(std::as_const(value)); + entt::any move = std::move(any); + entt::any copy = move; - ASSERT_EQ(entt::any_cast(move), 42); - ASSERT_EQ(entt::any_cast(copy), 3); - }; + ASSERT_TRUE(any); + ASSERT_TRUE(move); + ASSERT_TRUE(copy); - test(value); - test(std::as_const(value)); + ASSERT_FALSE(any.owner()); + ASSERT_FALSE(move.owner()); + ASSERT_TRUE(copy.owner()); + + ASSERT_EQ(any.policy(), entt::any_policy::cref); + ASSERT_EQ(move.policy(), entt::any_policy::cref); + ASSERT_EQ(copy.policy(), entt::any_policy::owner); + + ASSERT_EQ(move.type(), entt::type_id()); + ASSERT_EQ(copy.type(), entt::type_id()); + + ASSERT_EQ(std::as_const(move).data(), &value); + ASSERT_NE(std::as_const(copy).data(), &value); + + ASSERT_EQ(entt::any_cast(move), 3); + ASSERT_EQ(entt::any_cast(copy), 3); + + value = 42; + + ASSERT_EQ(entt::any_cast(move), 42); + ASSERT_EQ(entt::any_cast(copy), 3); } TEST_F(Any, SBOVsZeroedSBOSize) {