From df82fbffa29428af258dc84ce2acbb07180f557e Mon Sep 17 00:00:00 2001 From: Richard Nelson Date: Tue, 26 Jul 2011 14:35:54 -0700 Subject: removed last vestiges of llinstancetracerscopedguard --- indra/llcommon/tests/llinstancetracker_test.cpp | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) (limited to 'indra/llcommon/tests/llinstancetracker_test.cpp') diff --git a/indra/llcommon/tests/llinstancetracker_test.cpp b/indra/llcommon/tests/llinstancetracker_test.cpp index c7cb488ca1..af55341e1f 100644 --- a/indra/llcommon/tests/llinstancetracker_test.cpp +++ b/indra/llcommon/tests/llinstancetracker_test.cpp @@ -156,8 +156,7 @@ namespace tut keys.insert(&two); keys.insert(&three); { - Unkeyed::LLInstanceTrackerScopedGuard guard; - for (Unkeyed::key_iter ki(guard.beginKeys()), kend(guard.endKeys()); + for (Unkeyed::key_iter ki(beginKeys()), kend(endKeys()); ki != kend; ++ki) { ensure_equals("spurious key", keys.erase(*ki), 1); @@ -170,9 +169,7 @@ namespace tut instances.insert(&two); instances.insert(&three); { - Unkeyed::LLInstanceTrackerScopedGuard guard; - for (Unkeyed::instance_iter ii(guard.beginInstances()), iend(guard.endInstances()); - ii != iend; ++ii) + for (Unkeyed::instance_iter ii(beginInstances()), iend(endInstances()); ii != iend; ++ii) { Unkeyed& ref = *ii; ensure_equals("spurious instance", instances.erase(&ref), 1); -- cgit v1.2.3 From 75d2382dc3fd1beb190eba12188883db98278f89 Mon Sep 17 00:00:00 2001 From: Richard Nelson Date: Tue, 26 Jul 2011 18:54:07 -0700 Subject: fixed build --- indra/llcommon/tests/llinstancetracker_test.cpp | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) (limited to 'indra/llcommon/tests/llinstancetracker_test.cpp') diff --git a/indra/llcommon/tests/llinstancetracker_test.cpp b/indra/llcommon/tests/llinstancetracker_test.cpp index af55341e1f..73cbd76d91 100644 --- a/indra/llcommon/tests/llinstancetracker_test.cpp +++ b/indra/llcommon/tests/llinstancetracker_test.cpp @@ -151,25 +151,13 @@ namespace tut { Unkeyed one, two, three; typedef std::set KeySet; - KeySet keys; - keys.insert(&one); - keys.insert(&two); - keys.insert(&three); - { - for (Unkeyed::key_iter ki(beginKeys()), kend(endKeys()); - ki != kend; ++ki) - { - ensure_equals("spurious key", keys.erase(*ki), 1); - } - } - ensure_equals("unreported key", keys.size(), 0); - + KeySet instances; instances.insert(&one); instances.insert(&two); instances.insert(&three); { - for (Unkeyed::instance_iter ii(beginInstances()), iend(endInstances()); ii != iend; ++ii) + for (Unkeyed::instance_iter ii(Unkeyed::beginInstances()), iend(Unkeyed::endInstances()); ii != iend; ++ii) { Unkeyed& ref = *ii; ensure_equals("spurious instance", instances.erase(&ref), 1); -- cgit v1.2.3 From 5c8f22c640fb6955bed345128163a5d5677d8a23 Mon Sep 17 00:00:00 2001 From: Richard Nelson Date: Wed, 27 Jul 2011 15:34:58 -0700 Subject: fix for gcc --- indra/llcommon/tests/llinstancetracker_test.cpp | 144 ++++++++++++------------ 1 file changed, 72 insertions(+), 72 deletions(-) (limited to 'indra/llcommon/tests/llinstancetracker_test.cpp') diff --git a/indra/llcommon/tests/llinstancetracker_test.cpp b/indra/llcommon/tests/llinstancetracker_test.cpp index 73cbd76d91..3caf49aa6e 100644 --- a/indra/llcommon/tests/llinstancetracker_test.cpp +++ b/indra/llcommon/tests/llinstancetracker_test.cpp @@ -90,79 +90,79 @@ namespace tut ensure_equals(Keyed::instanceCount(), 0); } - template<> template<> - void object::test<2>() - { - ensure_equals(Unkeyed::instanceCount(), 0); - { - Unkeyed one; - ensure_equals(Unkeyed::instanceCount(), 1); - Unkeyed* found = Unkeyed::getInstance(&one); - ensure_equals(found, &one); - { - boost::scoped_ptr two(new Unkeyed); - ensure_equals(Unkeyed::instanceCount(), 2); - Unkeyed* found = Unkeyed::getInstance(two.get()); - ensure_equals(found, two.get()); - } - ensure_equals(Unkeyed::instanceCount(), 1); - } - ensure_equals(Unkeyed::instanceCount(), 0); - } + // template<> template<> + // void object::test<2>() + // { + // ensure_equals(Unkeyed::instanceCount(), 0); + // { + // Unkeyed one; + // ensure_equals(Unkeyed::instanceCount(), 1); + // Unkeyed* found = Unkeyed::getInstance(&one); + // ensure_equals(found, &one); + // { + // boost::scoped_ptr two(new Unkeyed); + // ensure_equals(Unkeyed::instanceCount(), 2); + // Unkeyed* found = Unkeyed::getInstance(two.get()); + // ensure_equals(found, two.get()); + // } + // ensure_equals(Unkeyed::instanceCount(), 1); + // } + // ensure_equals(Unkeyed::instanceCount(), 0); + // } - template<> template<> - void object::test<3>() - { - Keyed one("one"), two("two"), three("three"); - // We don't want to rely on the underlying container delivering keys - // in any particular order. That allows us the flexibility to - // reimplement LLInstanceTracker using, say, a hash map instead of a - // std::map. We DO insist that every key appear exactly once. - typedef std::vector StringVector; - StringVector keys(Keyed::beginKeys(), Keyed::endKeys()); - std::sort(keys.begin(), keys.end()); - StringVector::const_iterator ki(keys.begin()); - ensure_equals(*ki++, "one"); - ensure_equals(*ki++, "three"); - ensure_equals(*ki++, "two"); - // Use ensure() here because ensure_equals would want to display - // mismatched values, and frankly that wouldn't help much. - ensure("didn't reach end", ki == keys.end()); + // template<> template<> + // void object::test<3>() + // { + // Keyed one("one"), two("two"), three("three"); + // // We don't want to rely on the underlying container delivering keys + // // in any particular order. That allows us the flexibility to + // // reimplement LLInstanceTracker using, say, a hash map instead of a + // // std::map. We DO insist that every key appear exactly once. + // typedef std::vector StringVector; + // StringVector keys(Keyed::beginKeys(), Keyed::endKeys()); + // std::sort(keys.begin(), keys.end()); + // StringVector::const_iterator ki(keys.begin()); + // ensure_equals(*ki++, "one"); + // ensure_equals(*ki++, "three"); + // ensure_equals(*ki++, "two"); + // // Use ensure() here because ensure_equals would want to display + // // mismatched values, and frankly that wouldn't help much. + // ensure("didn't reach end", ki == keys.end()); - // Use a somewhat different approach to order independence with - // beginInstances(): explicitly capture the instances we know in a - // set, and delete them as we iterate through. - typedef std::set InstanceSet; - InstanceSet instances; - instances.insert(&one); - instances.insert(&two); - instances.insert(&three); - for (Keyed::instance_iter ii(Keyed::beginInstances()), iend(Keyed::endInstances()); - ii != iend; ++ii) - { - Keyed& ref = *ii; - ensure_equals("spurious instance", instances.erase(&ref), 1); - } - ensure_equals("unreported instance", instances.size(), 0); - } + // // Use a somewhat different approach to order independence with + // // beginInstances(): explicitly capture the instances we know in a + // // set, and delete them as we iterate through. + // typedef std::set InstanceSet; + // InstanceSet instances; + // instances.insert(&one); + // instances.insert(&two); + // instances.insert(&three); + // for (Keyed::instance_iter ii(Keyed::beginInstances()), iend(Keyed::endInstances()); + // ii != iend; ++ii) + // { + // Keyed& ref = *ii; + // ensure_equals("spurious instance", instances.erase(&ref), 1); + // } + // ensure_equals("unreported instance", instances.size(), 0); + // } - template<> template<> - void object::test<4>() - { - Unkeyed one, two, three; - typedef std::set KeySet; - - KeySet instances; - instances.insert(&one); - instances.insert(&two); - instances.insert(&three); - { - for (Unkeyed::instance_iter ii(Unkeyed::beginInstances()), iend(Unkeyed::endInstances()); ii != iend; ++ii) - { - Unkeyed& ref = *ii; - ensure_equals("spurious instance", instances.erase(&ref), 1); - } - } - ensure_equals("unreported instance", instances.size(), 0); - } + // template<> template<> + // void object::test<4>() + // { + // Unkeyed one, two, three; + // typedef std::set KeySet; + // + // KeySet instances; + // instances.insert(&one); + // instances.insert(&two); + // instances.insert(&three); + + //for (Unkeyed::instance_iter ii(Unkeyed::beginInstances()), iend(Unkeyed::endInstances()); ii != iend; ++ii) + //{ + // Unkeyed& ref = *ii; + // ensure_equals("spurious instance", instances.erase(&ref), 1); + //} + + // ensure_equals("unreported instance", instances.size(), 0); + // } } // namespace tut -- cgit v1.2.3 From bf906ac9264e21d622e4ce867c40dd53a0da6013 Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Wed, 24 Aug 2011 09:08:42 -0400 Subject: Re-add 3 llinstancetracker tests disabled by changeset 1ead63777bf6. Fix LLInstanceTracker::key_iter constructor param; accepting InstanceMap::iterator by non-const reference relied on Microsoft extension that accepts non-const reference to an rvalue. Given typical iterator implementation, simply accept by value instead, which makes gcc happy too. --- indra/llcommon/tests/llinstancetracker_test.cpp | 144 ++++++++++++------------ 1 file changed, 72 insertions(+), 72 deletions(-) (limited to 'indra/llcommon/tests/llinstancetracker_test.cpp') diff --git a/indra/llcommon/tests/llinstancetracker_test.cpp b/indra/llcommon/tests/llinstancetracker_test.cpp index 3caf49aa6e..80b35bbdc3 100644 --- a/indra/llcommon/tests/llinstancetracker_test.cpp +++ b/indra/llcommon/tests/llinstancetracker_test.cpp @@ -90,79 +90,79 @@ namespace tut ensure_equals(Keyed::instanceCount(), 0); } - // template<> template<> - // void object::test<2>() - // { - // ensure_equals(Unkeyed::instanceCount(), 0); - // { - // Unkeyed one; - // ensure_equals(Unkeyed::instanceCount(), 1); - // Unkeyed* found = Unkeyed::getInstance(&one); - // ensure_equals(found, &one); - // { - // boost::scoped_ptr two(new Unkeyed); - // ensure_equals(Unkeyed::instanceCount(), 2); - // Unkeyed* found = Unkeyed::getInstance(two.get()); - // ensure_equals(found, two.get()); - // } - // ensure_equals(Unkeyed::instanceCount(), 1); - // } - // ensure_equals(Unkeyed::instanceCount(), 0); - // } + template<> template<> + void object::test<2>() + { + ensure_equals(Unkeyed::instanceCount(), 0); + { + Unkeyed one; + ensure_equals(Unkeyed::instanceCount(), 1); + Unkeyed* found = Unkeyed::getInstance(&one); + ensure_equals(found, &one); + { + boost::scoped_ptr two(new Unkeyed); + ensure_equals(Unkeyed::instanceCount(), 2); + Unkeyed* found = Unkeyed::getInstance(two.get()); + ensure_equals(found, two.get()); + } + ensure_equals(Unkeyed::instanceCount(), 1); + } + ensure_equals(Unkeyed::instanceCount(), 0); + } - // template<> template<> - // void object::test<3>() - // { - // Keyed one("one"), two("two"), three("three"); - // // We don't want to rely on the underlying container delivering keys - // // in any particular order. That allows us the flexibility to - // // reimplement LLInstanceTracker using, say, a hash map instead of a - // // std::map. We DO insist that every key appear exactly once. - // typedef std::vector StringVector; - // StringVector keys(Keyed::beginKeys(), Keyed::endKeys()); - // std::sort(keys.begin(), keys.end()); - // StringVector::const_iterator ki(keys.begin()); - // ensure_equals(*ki++, "one"); - // ensure_equals(*ki++, "three"); - // ensure_equals(*ki++, "two"); - // // Use ensure() here because ensure_equals would want to display - // // mismatched values, and frankly that wouldn't help much. - // ensure("didn't reach end", ki == keys.end()); + template<> template<> + void object::test<3>() + { + Keyed one("one"), two("two"), three("three"); + // We don't want to rely on the underlying container delivering keys + // in any particular order. That allows us the flexibility to + // reimplement LLInstanceTracker using, say, a hash map instead of a + // std::map. We DO insist that every key appear exactly once. + typedef std::vector StringVector; + StringVector keys(Keyed::beginKeys(), Keyed::endKeys()); + std::sort(keys.begin(), keys.end()); + StringVector::const_iterator ki(keys.begin()); + ensure_equals(*ki++, "one"); + ensure_equals(*ki++, "three"); + ensure_equals(*ki++, "two"); + // Use ensure() here because ensure_equals would want to display + // mismatched values, and frankly that wouldn't help much. + ensure("didn't reach end", ki == keys.end()); - // // Use a somewhat different approach to order independence with - // // beginInstances(): explicitly capture the instances we know in a - // // set, and delete them as we iterate through. - // typedef std::set InstanceSet; - // InstanceSet instances; - // instances.insert(&one); - // instances.insert(&two); - // instances.insert(&three); - // for (Keyed::instance_iter ii(Keyed::beginInstances()), iend(Keyed::endInstances()); - // ii != iend; ++ii) - // { - // Keyed& ref = *ii; - // ensure_equals("spurious instance", instances.erase(&ref), 1); - // } - // ensure_equals("unreported instance", instances.size(), 0); - // } + // Use a somewhat different approach to order independence with + // beginInstances(): explicitly capture the instances we know in a + // set, and delete them as we iterate through. + typedef std::set InstanceSet; + InstanceSet instances; + instances.insert(&one); + instances.insert(&two); + instances.insert(&three); + for (Keyed::instance_iter ii(Keyed::beginInstances()), iend(Keyed::endInstances()); + ii != iend; ++ii) + { + Keyed& ref = *ii; + ensure_equals("spurious instance", instances.erase(&ref), 1); + } + ensure_equals("unreported instance", instances.size(), 0); + } + + template<> template<> + void object::test<4>() + { + Unkeyed one, two, three; + typedef std::set KeySet; + + KeySet instances; + instances.insert(&one); + instances.insert(&two); + instances.insert(&three); - // template<> template<> - // void object::test<4>() - // { - // Unkeyed one, two, three; - // typedef std::set KeySet; - // - // KeySet instances; - // instances.insert(&one); - // instances.insert(&two); - // instances.insert(&three); - - //for (Unkeyed::instance_iter ii(Unkeyed::beginInstances()), iend(Unkeyed::endInstances()); ii != iend; ++ii) - //{ - // Unkeyed& ref = *ii; - // ensure_equals("spurious instance", instances.erase(&ref), 1); - //} - - // ensure_equals("unreported instance", instances.size(), 0); - // } + for (Unkeyed::instance_iter ii(Unkeyed::beginInstances()), iend(Unkeyed::endInstances()); ii != iend; ++ii) + { + Unkeyed& ref = *ii; + ensure_equals("spurious instance", instances.erase(&ref), 1); + } + + ensure_equals("unreported instance", instances.size(), 0); + } } // namespace tut -- cgit v1.2.3 From b4a1d339fc9bc69c1045a622bf59df815fdc77ad Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Wed, 7 Sep 2011 17:29:08 -0400 Subject: STORM-1541: Add LLInstanceTracker tests for active-iterator asserts. The recent class-static LLInstanceTracker::instance_iter and key_iter reference count is intended to guard against deleting an instance of an LLInstanceTracker subclass during iteration. Add tests for that functionality. --- indra/llcommon/tests/llinstancetracker_test.cpp | 64 +++++++++++++++++++++++++ 1 file changed, 64 insertions(+) (limited to 'indra/llcommon/tests/llinstancetracker_test.cpp') diff --git a/indra/llcommon/tests/llinstancetracker_test.cpp b/indra/llcommon/tests/llinstancetracker_test.cpp index 80b35bbdc3..b34d1c5fd3 100644 --- a/indra/llcommon/tests/llinstancetracker_test.cpp +++ b/indra/llcommon/tests/llinstancetracker_test.cpp @@ -40,6 +40,7 @@ #include // other Linden headers #include "../test/lltut.h" +#include "wrapllerrs.h" struct Keyed: public LLInstanceTracker { @@ -165,4 +166,67 @@ namespace tut ensure_equals("unreported instance", instances.size(), 0); } + + template<> template<> + void object::test<5>() + { + set_test_name("delete Keyed with outstanding instance_iter"); + std::string what; + Keyed* keyed = new Keyed("one"); + { + WrapLL_ERRS wrapper; + Keyed::instance_iter i(Keyed::beginInstances()); + try + { + delete keyed; + } + catch (const WrapLL_ERRS::FatalException& e) + { + what = e.what(); + } + } + ensure(! what.empty()); + } + + template<> template<> + void object::test<6>() + { + set_test_name("delete Keyed with outstanding key_iter"); + std::string what; + Keyed* keyed = new Keyed("one"); + { + WrapLL_ERRS wrapper; + Keyed::key_iter i(Keyed::beginKeys()); + try + { + delete keyed; + } + catch (const WrapLL_ERRS::FatalException& e) + { + what = e.what(); + } + } + ensure(! what.empty()); + } + + template<> template<> + void object::test<7>() + { + set_test_name("delete Unkeyed with outstanding instance_iter"); + std::string what; + Unkeyed* unkeyed = new Unkeyed; + { + WrapLL_ERRS wrapper; + Unkeyed::instance_iter i(Unkeyed::beginInstances()); + try + { + delete unkeyed; + } + catch (const WrapLL_ERRS::FatalException& e) + { + what = e.what(); + } + } + ensure(! what.empty()); + } } // namespace tut -- cgit v1.2.3