#include <list>
#include <vector>
#include <deque>
+#if !defined(_LIBCPP_HAS_NO_THREADS)
+# include <thread>
+#endif
#include "container_debug_tests.hpp"
#include "debug_mode_helper.h"
InsertIterIterIter();
EmplaceIterValue();
EraseIterIter();
+ ThreadUseIter();
}
else {
SpliceFirstElemAfter();
EXPECT_DEATH( CC.front() );
}
+ static void ThreadUseIter() {
+#if !defined(_LIBCPP_HAS_NO_THREADS)
+ CHECKPOINT("thread iter use");
+ const size_t maxRounds = 7;
+ struct TestRunner{
+ void operator()() {
+ for (size_t count = 0; count < maxRounds; count++) {
+ const size_t containerCount = 21;
+ std::vector<Container> containers;
+ std::vector<typename Container::iterator> iterators;
+ for (size_t containerIndex = 0; containerIndex < containerCount; containerIndex++) {
+ containers.push_back(makeContainer(3));
+ Container &c = containers.back();
+ iterators.push_back(c.begin());
+ iterators.push_back(c.end());
+ }
+ }
+ }
+ };
+ TestRunner r;
+ const size_t threadCount = 13;
+ std::vector<std::thread> threads;
+ for (size_t count = 0; count < threadCount; count++)
+ threads.emplace_back(r);
+ r();
+ for (size_t count = 0; count < threadCount; count++)
+ threads[count].join();
+#endif
+ }
+
static void EraseIterIter() {
CHECKPOINT("testing erase iter iter invalidation");
Container C1 = makeContainer(3);