forked from OSchip/llvm-project
Add an immovable type to test Optional<T>::emplace more rigorously after r218732.
llvm-svn: 218783
This commit is contained in:
parent
b458dc2eee
commit
847b37ec8a
|
@ -324,15 +324,36 @@ TEST_F(OptionalTest, MoveOnlyAssigningAssignment) {
|
|||
EXPECT_EQ(1u, MoveOnly::Destructions);
|
||||
}
|
||||
|
||||
struct Immovable {
|
||||
static unsigned Constructions;
|
||||
static unsigned Destructions;
|
||||
int val;
|
||||
explicit Immovable(int val) : val(val) {
|
||||
++Constructions;
|
||||
}
|
||||
~Immovable() {
|
||||
++Destructions;
|
||||
}
|
||||
static void ResetCounts() {
|
||||
Constructions = 0;
|
||||
Destructions = 0;
|
||||
}
|
||||
private:
|
||||
// This should disable all move/copy operations.
|
||||
Immovable(Immovable&& other) LLVM_DELETED_FUNCTION;
|
||||
};
|
||||
|
||||
unsigned Immovable::Constructions = 0;
|
||||
unsigned Immovable::Destructions = 0;
|
||||
|
||||
TEST_F(OptionalTest, MoveOnlyEmplace) {
|
||||
Optional<MoveOnly> A;
|
||||
MoveOnly::ResetCounts();
|
||||
Optional<Immovable> A;
|
||||
Immovable::ResetCounts();
|
||||
A.emplace(4);
|
||||
EXPECT_TRUE((bool)A);
|
||||
EXPECT_EQ(4, A->val);
|
||||
EXPECT_EQ(0u, MoveOnly::MoveConstructions);
|
||||
EXPECT_EQ(0u, MoveOnly::MoveAssignments);
|
||||
EXPECT_EQ(0u, MoveOnly::Destructions);
|
||||
EXPECT_EQ(1u, Immovable::Constructions);
|
||||
EXPECT_EQ(0u, Immovable::Destructions);
|
||||
}
|
||||
|
||||
#if LLVM_HAS_RVALUE_REFERENCE_THIS
|
||||
|
|
Loading…
Reference in New Issue