aboutsummaryrefslogtreecommitdiff
path: root/absl/container/internal/common_policy_traits_test.cc
diff options
context:
space:
mode:
Diffstat (limited to 'absl/container/internal/common_policy_traits_test.cc')
-rw-r--r--absl/container/internal/common_policy_traits_test.cc18
1 files changed, 16 insertions, 2 deletions
diff --git a/absl/container/internal/common_policy_traits_test.cc b/absl/container/internal/common_policy_traits_test.cc
index 5eaa4aae..faee3e7a 100644
--- a/absl/container/internal/common_policy_traits_test.cc
+++ b/absl/container/internal/common_policy_traits_test.cc
@@ -16,10 +16,12 @@
#include <functional>
#include <memory>
-#include <new>
+#include <type_traits>
+#include <utility>
#include "gmock/gmock.h"
#include "gtest/gtest.h"
+#include "absl/base/config.h"
namespace absl {
ABSL_NAMESPACE_BEGIN
@@ -51,9 +53,14 @@ std::function<Slot&(Slot*)> PolicyWithoutOptionalOps::element;
struct PolicyWithOptionalOps : PolicyWithoutOptionalOps {
static std::function<void(void*, Slot*, Slot*)> transfer;
};
-
std::function<void(void*, Slot*, Slot*)> PolicyWithOptionalOps::transfer;
+struct PolicyWithMemcpyTransfer : PolicyWithoutOptionalOps {
+ static std::function<std::true_type(void*, Slot*, Slot*)> transfer;
+};
+std::function<std::true_type(void*, Slot*, Slot*)>
+ PolicyWithMemcpyTransfer::transfer;
+
struct Test : ::testing::Test {
Test() {
PolicyWithoutOptionalOps::construct = [&](void* a1, Slot* a2, Slot a3) {
@@ -114,6 +121,13 @@ TEST_F(Test, with_transfer) {
common_policy_traits<PolicyWithOptionalOps>::transfer(&alloc, &a, &b);
}
+TEST(TransferUsesMemcpy, Basic) {
+ EXPECT_FALSE(
+ common_policy_traits<PolicyWithOptionalOps>::transfer_uses_memcpy());
+ EXPECT_TRUE(
+ common_policy_traits<PolicyWithMemcpyTransfer>::transfer_uses_memcpy());
+}
+
} // namespace
} // namespace container_internal
ABSL_NAMESPACE_END