mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-13 22:24:07 +00:00
Implement copy and move assignment for TinyPtrVector. These try to
re-use allocated vectors as much as possible. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@161041 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -60,6 +60,13 @@ protected:
|
||||
V.push_back(Values[i]);
|
||||
}
|
||||
|
||||
void setVectors(ArrayRef<PtrT> Values1, ArrayRef<PtrT> Values2) {
|
||||
V.clear();
|
||||
appendValues(V, Values1);
|
||||
V2.clear();
|
||||
appendValues(V2, Values2);
|
||||
}
|
||||
|
||||
void expectValues(const VectorT &V, ArrayRef<PtrT> Values) {
|
||||
EXPECT_EQ(Values.empty(), V.empty());
|
||||
EXPECT_EQ(Values.size(), V.size());
|
||||
@ -157,6 +164,165 @@ TYPED_TEST(TinyPtrVectorTest, CopyAndMoveCtorTest) {
|
||||
#endif
|
||||
}
|
||||
|
||||
TYPED_TEST(TinyPtrVectorTest, CopyAndMoveTest) {
|
||||
this->V = this->V2;
|
||||
this->expectValues(this->V, this->testArray(0));
|
||||
this->expectValues(this->V2, this->testArray(0));
|
||||
#if LLVM_USE_RVALUE_REFERENCES
|
||||
this->V = std::move(this->V2);
|
||||
this->expectValues(this->V, this->testArray(0));
|
||||
#endif
|
||||
|
||||
this->setVectors(this->testArray(1), this->testArray(0));
|
||||
this->V = this->V2;
|
||||
this->expectValues(this->V, this->testArray(0));
|
||||
this->expectValues(this->V2, this->testArray(0));
|
||||
#if LLVM_USE_RVALUE_REFERENCES
|
||||
this->setVectors(this->testArray(1), this->testArray(0));
|
||||
this->V = std::move(this->V2);
|
||||
this->expectValues(this->V, this->testArray(0));
|
||||
#endif
|
||||
|
||||
this->setVectors(this->testArray(2), this->testArray(0));
|
||||
this->V = this->V2;
|
||||
this->expectValues(this->V, this->testArray(0));
|
||||
this->expectValues(this->V2, this->testArray(0));
|
||||
#if LLVM_USE_RVALUE_REFERENCES
|
||||
this->setVectors(this->testArray(2), this->testArray(0));
|
||||
this->V = std::move(this->V2);
|
||||
this->expectValues(this->V, this->testArray(0));
|
||||
#endif
|
||||
|
||||
this->setVectors(this->testArray(42), this->testArray(0));
|
||||
this->V = this->V2;
|
||||
this->expectValues(this->V, this->testArray(0));
|
||||
this->expectValues(this->V2, this->testArray(0));
|
||||
#if LLVM_USE_RVALUE_REFERENCES
|
||||
this->setVectors(this->testArray(42), this->testArray(0));
|
||||
this->V = std::move(this->V2);
|
||||
this->expectValues(this->V, this->testArray(0));
|
||||
#endif
|
||||
|
||||
this->setVectors(this->testArray(0), this->testArray(1));
|
||||
this->V = this->V2;
|
||||
this->expectValues(this->V, this->testArray(1));
|
||||
this->expectValues(this->V2, this->testArray(1));
|
||||
#if LLVM_USE_RVALUE_REFERENCES
|
||||
this->setVectors(this->testArray(0), this->testArray(1));
|
||||
this->V = std::move(this->V2);
|
||||
this->expectValues(this->V, this->testArray(1));
|
||||
#endif
|
||||
|
||||
this->setVectors(this->testArray(0), this->testArray(2));
|
||||
this->V = this->V2;
|
||||
this->expectValues(this->V, this->testArray(2));
|
||||
this->expectValues(this->V2, this->testArray(2));
|
||||
#if LLVM_USE_RVALUE_REFERENCES
|
||||
this->setVectors(this->testArray(0), this->testArray(2));
|
||||
this->V = std::move(this->V2);
|
||||
this->expectValues(this->V, this->testArray(2));
|
||||
#endif
|
||||
|
||||
this->setVectors(this->testArray(0), this->testArray(42));
|
||||
this->V = this->V2;
|
||||
this->expectValues(this->V, this->testArray(42));
|
||||
this->expectValues(this->V2, this->testArray(42));
|
||||
#if LLVM_USE_RVALUE_REFERENCES
|
||||
this->setVectors(this->testArray(0), this->testArray(42));
|
||||
this->V = std::move(this->V2);
|
||||
this->expectValues(this->V, this->testArray(42));
|
||||
#endif
|
||||
|
||||
this->setVectors(this->testArray(1), this->testArray(1));
|
||||
this->V = this->V2;
|
||||
this->expectValues(this->V, this->testArray(1));
|
||||
this->expectValues(this->V2, this->testArray(1));
|
||||
#if LLVM_USE_RVALUE_REFERENCES
|
||||
this->V = std::move(this->V2);
|
||||
this->expectValues(this->V, this->testArray(1));
|
||||
#endif
|
||||
|
||||
this->setVectors(this->testArray(1), this->testArray(2));
|
||||
this->V = this->V2;
|
||||
this->expectValues(this->V, this->testArray(2));
|
||||
this->expectValues(this->V2, this->testArray(2));
|
||||
#if LLVM_USE_RVALUE_REFERENCES
|
||||
this->setVectors(this->testArray(1), this->testArray(2));
|
||||
this->V = std::move(this->V2);
|
||||
this->expectValues(this->V, this->testArray(2));
|
||||
#endif
|
||||
|
||||
this->setVectors(this->testArray(1), this->testArray(42));
|
||||
this->V = this->V2;
|
||||
this->expectValues(this->V, this->testArray(42));
|
||||
this->expectValues(this->V2, this->testArray(42));
|
||||
#if LLVM_USE_RVALUE_REFERENCES
|
||||
this->setVectors(this->testArray(1), this->testArray(42));
|
||||
this->V = std::move(this->V2);
|
||||
this->expectValues(this->V, this->testArray(42));
|
||||
#endif
|
||||
|
||||
this->setVectors(this->testArray(2), this->testArray(1));
|
||||
this->V = this->V2;
|
||||
this->expectValues(this->V, this->testArray(1));
|
||||
this->expectValues(this->V2, this->testArray(1));
|
||||
#if LLVM_USE_RVALUE_REFERENCES
|
||||
this->setVectors(this->testArray(2), this->testArray(1));
|
||||
this->V = std::move(this->V2);
|
||||
this->expectValues(this->V, this->testArray(1));
|
||||
#endif
|
||||
|
||||
this->setVectors(this->testArray(2), this->testArray(2));
|
||||
this->V = this->V2;
|
||||
this->expectValues(this->V, this->testArray(2));
|
||||
this->expectValues(this->V2, this->testArray(2));
|
||||
#if LLVM_USE_RVALUE_REFERENCES
|
||||
this->setVectors(this->testArray(2), this->testArray(2));
|
||||
this->V = std::move(this->V2);
|
||||
this->expectValues(this->V, this->testArray(2));
|
||||
#endif
|
||||
|
||||
this->setVectors(this->testArray(2), this->testArray(42));
|
||||
this->V = this->V2;
|
||||
this->expectValues(this->V, this->testArray(42));
|
||||
this->expectValues(this->V2, this->testArray(42));
|
||||
#if LLVM_USE_RVALUE_REFERENCES
|
||||
this->setVectors(this->testArray(2), this->testArray(42));
|
||||
this->V = std::move(this->V2);
|
||||
this->expectValues(this->V, this->testArray(42));
|
||||
#endif
|
||||
|
||||
this->setVectors(this->testArray(42), this->testArray(1));
|
||||
this->V = this->V2;
|
||||
this->expectValues(this->V, this->testArray(1));
|
||||
this->expectValues(this->V2, this->testArray(1));
|
||||
#if LLVM_USE_RVALUE_REFERENCES
|
||||
this->setVectors(this->testArray(42), this->testArray(1));
|
||||
this->V = std::move(this->V2);
|
||||
this->expectValues(this->V, this->testArray(1));
|
||||
#endif
|
||||
|
||||
this->setVectors(this->testArray(42), this->testArray(2));
|
||||
this->V = this->V2;
|
||||
this->expectValues(this->V, this->testArray(2));
|
||||
this->expectValues(this->V2, this->testArray(2));
|
||||
#if LLVM_USE_RVALUE_REFERENCES
|
||||
this->setVectors(this->testArray(42), this->testArray(2));
|
||||
this->V = std::move(this->V2);
|
||||
this->expectValues(this->V, this->testArray(2));
|
||||
#endif
|
||||
|
||||
this->setVectors(this->testArray(42), this->testArray(42));
|
||||
this->V = this->V2;
|
||||
this->expectValues(this->V, this->testArray(42));
|
||||
this->expectValues(this->V2, this->testArray(42));
|
||||
#if LLVM_USE_RVALUE_REFERENCES
|
||||
this->setVectors(this->testArray(42), this->testArray(42));
|
||||
this->V = std::move(this->V2);
|
||||
this->expectValues(this->V, this->testArray(42));
|
||||
#endif
|
||||
}
|
||||
|
||||
TYPED_TEST(TinyPtrVectorTest, EraseTest) {
|
||||
this->appendValues(this->V, this->testArray(1));
|
||||
this->expectValues(this->V, this->testArray(1));
|
||||
|
Reference in New Issue
Block a user