Parcourir la source

test: no sbo overaligned any

Michele Caini il y a 5 ans
Parent
commit
f59adcdc37
1 fichiers modifiés avec 9 ajouts et 1 suppressions
  1. 9 1
      test/entt/core/any.cpp

+ 9 - 1
test/entt/core/any.cpp

@@ -887,9 +887,17 @@ TEST(Any, SBOVsZeroedSBOSize) {
     ASSERT_EQ(valid, same.data());
     ASSERT_EQ(valid, same.data());
 }
 }
 
 
-TEST(Any, Alignment) {
+TEST(Any, NoSBOAlignment) {
     static constexpr auto alignment = alignof(over_aligned);
     static constexpr auto alignment = alignof(over_aligned);
     entt::basic_any<alignment> target[2] = { over_aligned{}, over_aligned{} };
     entt::basic_any<alignment> target[2] = { over_aligned{}, over_aligned{} };
+    const auto *data = target[0].data();
+
+    ASSERT_TRUE((reinterpret_cast<std::uintptr_t>(entt::any_cast<over_aligned>(&target[0u])) % alignment) == 0u);
+    ASSERT_TRUE((reinterpret_cast<std::uintptr_t>(entt::any_cast<over_aligned>(&target[1u])) % alignment) == 0u);
+
+    std::swap(target[0], target[1]);
+
     ASSERT_TRUE((reinterpret_cast<std::uintptr_t>(entt::any_cast<over_aligned>(&target[0u])) % alignment) == 0u);
     ASSERT_TRUE((reinterpret_cast<std::uintptr_t>(entt::any_cast<over_aligned>(&target[0u])) % alignment) == 0u);
     ASSERT_TRUE((reinterpret_cast<std::uintptr_t>(entt::any_cast<over_aligned>(&target[1u])) % alignment) == 0u);
     ASSERT_TRUE((reinterpret_cast<std::uintptr_t>(entt::any_cast<over_aligned>(&target[1u])) % alignment) == 0u);
+    ASSERT_EQ(data, target[1].data());
 }
 }