combine instance management with both code paths
for assignable / not assignable types
This commit is contained in:
parent
b6e0497f8b
commit
625787fbba
1 changed files with 14 additions and 2 deletions
|
|
@ -53,6 +53,7 @@ namespace test{
|
||||||
// using std::vector;
|
// using std::vector;
|
||||||
using std::string;
|
using std::string;
|
||||||
using std::rand;
|
using std::rand;
|
||||||
|
using std::swap;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -66,6 +67,7 @@ namespace test{
|
||||||
|
|
||||||
Tracker() : i_(rand() % 500) { ++cntTracker; }
|
Tracker() : i_(rand() % 500) { ++cntTracker; }
|
||||||
Tracker(Tracker const& ot) : i_(ot.i_) { ++cntTracker; }
|
Tracker(Tracker const& ot) : i_(ot.i_) { ++cntTracker; }
|
||||||
|
Tracker(uint i) : i_() { ++cntTracker; }
|
||||||
~Tracker() { --cntTracker; }
|
~Tracker() { --cntTracker; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -186,6 +188,8 @@ namespace test{
|
||||||
|
|
||||||
/** @test verify that ctor and dtor calls are balanced,
|
/** @test verify that ctor and dtor calls are balanced,
|
||||||
* even when assigning and self-assigning.
|
* even when assigning and self-assigning.
|
||||||
|
* @note Tracker uses the simple implementation for assignable values,
|
||||||
|
* while NonAssign uses the embedded-buffer implementation
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
verifySaneInstanceHandling()
|
verifySaneInstanceHandling()
|
||||||
|
|
@ -197,11 +201,19 @@ namespace test{
|
||||||
|
|
||||||
verifyWrapper<Tracker> (t1, t2);
|
verifyWrapper<Tracker> (t1, t2);
|
||||||
verifyWrapper<Tracker*> (&t1, &t2);
|
verifyWrapper<Tracker*> (&t1, &t2);
|
||||||
|
verifyWrapper<Tracker> (t1, t2.i_);
|
||||||
verifyWrapper<Tracker, Tracker&> (t1, t2);
|
verifyWrapper<Tracker, Tracker&> (t1, t2);
|
||||||
|
|
||||||
|
NonAssign u1;
|
||||||
|
NonAssign u2;
|
||||||
|
verifyWrapper<NonAssign> (u1, u2);
|
||||||
|
verifyWrapper<NonAssign*> (&u1, &u2);
|
||||||
|
verifyWrapper<NonAssign> (u1, u2.i_);
|
||||||
|
verifyWrapper<NonAssign, NonAssign&> (u1, u2);
|
||||||
|
verifyWrapper<Tracker> (u1, u2);
|
||||||
}
|
}
|
||||||
CHECK (1 == cntTracker); // one singleton instance in NullValue<Tracker> survives
|
CHECK (2 == cntTracker); // surviving singleton instances
|
||||||
}
|
} // NullValue<Tracker> and NullValue<NonAssign>
|
||||||
|
|
||||||
|
|
||||||
/** @test verify especially that we can handle and re-"assign" an embedded pointer */
|
/** @test verify especially that we can handle and re-"assign" an embedded pointer */
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue