summaryrefslogtreecommitdiffstats
path: root/llvm/unittests/ADT/ImmutableListTest.cpp
diff options
context:
space:
mode:
authorKristof Umann <dkszelethus@gmail.com>2018-08-28 14:17:51 +0000
committerKristof Umann <dkszelethus@gmail.com>2018-08-28 14:17:51 +0000
commitd0202395f17408b554384034b6476c6272bf1be3 (patch)
tree0ba600b29520927a99ab844d8407fffef719a9e5 /llvm/unittests/ADT/ImmutableListTest.cpp
parentfa8ce34534886bb47eb82e2c4ad372c16a0787b9 (diff)
downloadbcm5719-llvm-d0202395f17408b554384034b6476c6272bf1be3.tar.gz
bcm5719-llvm-d0202395f17408b554384034b6476c6272bf1be3.zip
[ADT] ImmutableList no longer requires elements to be copy constructible
ImmutableList used to require elements to have a copy constructor for no good reason, this patch aims to fix this. It also required but did not enforce its elements to be trivially destructible, so a new static_assert is added to guard against misuse. Differential Revision: https://reviews.llvm.org/D49985 llvm-svn: 340824
Diffstat (limited to 'llvm/unittests/ADT/ImmutableListTest.cpp')
-rw-r--r--llvm/unittests/ADT/ImmutableListTest.cpp43
1 files changed, 43 insertions, 0 deletions
diff --git a/llvm/unittests/ADT/ImmutableListTest.cpp b/llvm/unittests/ADT/ImmutableListTest.cpp
index 0e72769ed10..df150cb1519 100644
--- a/llvm/unittests/ADT/ImmutableListTest.cpp
+++ b/llvm/unittests/ADT/ImmutableListTest.cpp
@@ -150,6 +150,49 @@ TEST_F(ImmutableListTest, MultiElemIntListTest) {
EXPECT_TRUE(L5.isEqual(L5));
}
+template <typename Fundamental>
+struct ExplicitCtorWrapper : public Wrapper<Fundamental> {
+ explicit ExplicitCtorWrapper(Fundamental F) : Wrapper<Fundamental>(F) {}
+ ExplicitCtorWrapper(const ExplicitCtorWrapper &) = delete;
+ ExplicitCtorWrapper(ExplicitCtorWrapper &&) = default;
+ ExplicitCtorWrapper &operator=(const ExplicitCtorWrapper &) = delete;
+ ExplicitCtorWrapper &operator=(ExplicitCtorWrapper &&) = default;
+};
+
+TEST_F(ImmutableListTest, EmplaceIntListTest) {
+ ImmutableList<ExplicitCtorWrapper<int>>::Factory f;
+
+ ImmutableList<ExplicitCtorWrapper<int>> L = f.getEmptyList();
+ ImmutableList<ExplicitCtorWrapper<int>> L2 = f.emplace(L, 3);
+
+ ImmutableList<ExplicitCtorWrapper<int>> L3 =
+ f.add(ExplicitCtorWrapper<int>(2), L2);
+
+ ImmutableList<ExplicitCtorWrapper<int>> L4 =
+ f.emplace(L3, ExplicitCtorWrapper<int>(1));
+
+ ImmutableList<ExplicitCtorWrapper<int>> L5 =
+ f.add(ExplicitCtorWrapper<int>(1), L3);
+
+ EXPECT_FALSE(L2.isEmpty());
+ EXPECT_TRUE(L2.getTail().isEmpty());
+ EXPECT_EQ(3, L2.getHead());
+ EXPECT_TRUE(L.isEqual(L2.getTail()));
+ EXPECT_TRUE(L2.getTail().isEqual(L));
+
+ EXPECT_FALSE(L3.isEmpty());
+ EXPECT_FALSE(L2 == L3);
+ EXPECT_EQ(2, L3.getHead());
+ EXPECT_TRUE(L2 == L3.getTail());
+
+ EXPECT_FALSE(L4.isEmpty());
+ EXPECT_EQ(1, L4.getHead());
+ EXPECT_TRUE(L3 == L4.getTail());
+
+ EXPECT_TRUE(L4 == L5);
+ EXPECT_TRUE(L3 == L5.getTail());
+}
+
TEST_F(ImmutableListTest, CharListOrderingTest) {
ImmutableList<Wrapper<char>>::Factory f;
ImmutableList<Wrapper<char>> L = f.getEmptyList();
OpenPOWER on IntegriCloud