Found six (nmostly) identical files named 'test_allocator.h' in the libcxx test suite. Moved one to /support, made it a superset, and removed all but one of the others, and iupdated all the includes. Left the odd one (thread/futures/test_allocator.h) for later.

llvm-svn: 196174
diff --git a/libcxx/test/strings/basic.string/string.capacity/capacity.pass.cpp b/libcxx/test/strings/basic.string/string.capacity/capacity.pass.cpp
index 4a447d5..bae7621 100644
--- a/libcxx/test/strings/basic.string/string.capacity/capacity.pass.cpp
+++ b/libcxx/test/strings/basic.string/string.capacity/capacity.pass.cpp
@@ -14,7 +14,7 @@
 #include <string>
 #include <cassert>
 
-#include "../test_allocator.h"
+#include "test_allocator.h"
 #include "min_allocator.h"
 
 template <class S>
diff --git a/libcxx/test/strings/basic.string/string.cons/alloc.pass.cpp b/libcxx/test/strings/basic.string/string.cons/alloc.pass.cpp
index b15b569..512d118 100644
--- a/libcxx/test/strings/basic.string/string.cons/alloc.pass.cpp
+++ b/libcxx/test/strings/basic.string/string.cons/alloc.pass.cpp
@@ -14,7 +14,7 @@
 #include <string>
 #include <cassert>
 
-#include "../test_allocator.h"
+#include "test_allocator.h"
 #include "min_allocator.h"
 
 template <class S>
diff --git a/libcxx/test/strings/basic.string/string.cons/copy.pass.cpp b/libcxx/test/strings/basic.string/string.cons/copy.pass.cpp
index fb6001f..9c9fc32 100644
--- a/libcxx/test/strings/basic.string/string.cons/copy.pass.cpp
+++ b/libcxx/test/strings/basic.string/string.cons/copy.pass.cpp
@@ -14,7 +14,7 @@
 #include <string>
 #include <cassert>
 
-#include "../test_allocator.h"
+#include "test_allocator.h"
 #include "min_allocator.h"
 
 template <class S>
diff --git a/libcxx/test/strings/basic.string/string.cons/copy_alloc.pass.cpp b/libcxx/test/strings/basic.string/string.cons/copy_alloc.pass.cpp
index d18241e..cf80210 100644
--- a/libcxx/test/strings/basic.string/string.cons/copy_alloc.pass.cpp
+++ b/libcxx/test/strings/basic.string/string.cons/copy_alloc.pass.cpp
@@ -14,7 +14,7 @@
 #include <string>
 #include <cassert>
 
-#include "../test_allocator.h"
+#include "test_allocator.h"
 #include "min_allocator.h"
 
 template <class S>
diff --git a/libcxx/test/strings/basic.string/string.cons/default_noexcept.pass.cpp b/libcxx/test/strings/basic.string/string.cons/default_noexcept.pass.cpp
index ed68c93..f935db8 100644
--- a/libcxx/test/strings/basic.string/string.cons/default_noexcept.pass.cpp
+++ b/libcxx/test/strings/basic.string/string.cons/default_noexcept.pass.cpp
@@ -17,7 +17,7 @@
 #include <string>
 #include <cassert>
 
-#include "../test_allocator.h"
+#include "test_allocator.h"
 
 template <class T>
 struct some_alloc
diff --git a/libcxx/test/strings/basic.string/string.cons/dtor_noexcept.pass.cpp b/libcxx/test/strings/basic.string/string.cons/dtor_noexcept.pass.cpp
index c455083..b3cc127 100644
--- a/libcxx/test/strings/basic.string/string.cons/dtor_noexcept.pass.cpp
+++ b/libcxx/test/strings/basic.string/string.cons/dtor_noexcept.pass.cpp
@@ -14,7 +14,7 @@
 #include <string>
 #include <cassert>
 
-#include "../test_allocator.h"
+#include "test_allocator.h"
 
 #if __has_feature(cxx_noexcept)
 
diff --git a/libcxx/test/strings/basic.string/string.cons/initializer_list.pass.cpp b/libcxx/test/strings/basic.string/string.cons/initializer_list.pass.cpp
index 60e62cc..d6ff850 100644
--- a/libcxx/test/strings/basic.string/string.cons/initializer_list.pass.cpp
+++ b/libcxx/test/strings/basic.string/string.cons/initializer_list.pass.cpp
@@ -14,7 +14,7 @@
 #include <string>
 #include <cassert>
 
-#include "../test_allocator.h"
+#include "test_allocator.h"
 #include "min_allocator.h"
 
 int main()
diff --git a/libcxx/test/strings/basic.string/string.cons/iter_alloc.pass.cpp b/libcxx/test/strings/basic.string/string.cons/iter_alloc.pass.cpp
index 11f2b43..664cb80 100644
--- a/libcxx/test/strings/basic.string/string.cons/iter_alloc.pass.cpp
+++ b/libcxx/test/strings/basic.string/string.cons/iter_alloc.pass.cpp
@@ -17,7 +17,7 @@
 #include <iterator>
 #include <cassert>
 
-#include "../test_allocator.h"
+#include "test_allocator.h"
 #include "../input_iterator.h"
 #include "min_allocator.h"
 
diff --git a/libcxx/test/strings/basic.string/string.cons/move.pass.cpp b/libcxx/test/strings/basic.string/string.cons/move.pass.cpp
index 873e889..b94f189 100644
--- a/libcxx/test/strings/basic.string/string.cons/move.pass.cpp
+++ b/libcxx/test/strings/basic.string/string.cons/move.pass.cpp
@@ -16,7 +16,7 @@
 
 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
 
-#include "../test_allocator.h"
+#include "test_allocator.h"
 #include "min_allocator.h"
 
 template <class S>
diff --git a/libcxx/test/strings/basic.string/string.cons/move_alloc.pass.cpp b/libcxx/test/strings/basic.string/string.cons/move_alloc.pass.cpp
index 1f0d5cd..4e8b038 100644
--- a/libcxx/test/strings/basic.string/string.cons/move_alloc.pass.cpp
+++ b/libcxx/test/strings/basic.string/string.cons/move_alloc.pass.cpp
@@ -16,7 +16,7 @@
 
 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
 
-#include "../test_allocator.h"
+#include "test_allocator.h"
 #include "min_allocator.h"
 
 
diff --git a/libcxx/test/strings/basic.string/string.cons/move_assign_noexcept.pass.cpp b/libcxx/test/strings/basic.string/string.cons/move_assign_noexcept.pass.cpp
index fdcf478..32c9514 100644
--- a/libcxx/test/strings/basic.string/string.cons/move_assign_noexcept.pass.cpp
+++ b/libcxx/test/strings/basic.string/string.cons/move_assign_noexcept.pass.cpp
@@ -19,7 +19,7 @@
 #include <string>
 #include <cassert>
 
-#include "../test_allocator.h"
+#include "test_allocator.h"
 
 template <class T>
 struct some_alloc
diff --git a/libcxx/test/strings/basic.string/string.cons/move_assignment.pass.cpp b/libcxx/test/strings/basic.string/string.cons/move_assignment.pass.cpp
index 60de3b0..5bc1c8a 100644
--- a/libcxx/test/strings/basic.string/string.cons/move_assignment.pass.cpp
+++ b/libcxx/test/strings/basic.string/string.cons/move_assignment.pass.cpp
@@ -17,7 +17,7 @@
 
 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
 
-#include "../test_allocator.h"
+#include "test_allocator.h"
 #include "min_allocator.h"
 
 template <class S>
diff --git a/libcxx/test/strings/basic.string/string.cons/move_noexcept.pass.cpp b/libcxx/test/strings/basic.string/string.cons/move_noexcept.pass.cpp
index 42e828b..556aabd 100644
--- a/libcxx/test/strings/basic.string/string.cons/move_noexcept.pass.cpp
+++ b/libcxx/test/strings/basic.string/string.cons/move_noexcept.pass.cpp
@@ -17,7 +17,7 @@
 #include <string>
 #include <cassert>
 
-#include "../test_allocator.h"
+#include "test_allocator.h"
 
 template <class T>
 struct some_alloc
diff --git a/libcxx/test/strings/basic.string/string.cons/pointer_alloc.pass.cpp b/libcxx/test/strings/basic.string/string.cons/pointer_alloc.pass.cpp
index 8aa88c9..f6e9e00 100644
--- a/libcxx/test/strings/basic.string/string.cons/pointer_alloc.pass.cpp
+++ b/libcxx/test/strings/basic.string/string.cons/pointer_alloc.pass.cpp
@@ -16,7 +16,7 @@
 #include <algorithm>
 #include <cassert>
 
-#include "../test_allocator.h"
+#include "test_allocator.h"
 #include "min_allocator.h"
 
 template <class charT>
diff --git a/libcxx/test/strings/basic.string/string.cons/pointer_size_alloc.pass.cpp b/libcxx/test/strings/basic.string/string.cons/pointer_size_alloc.pass.cpp
index 629e296..f1f107a 100644
--- a/libcxx/test/strings/basic.string/string.cons/pointer_size_alloc.pass.cpp
+++ b/libcxx/test/strings/basic.string/string.cons/pointer_size_alloc.pass.cpp
@@ -16,7 +16,7 @@
 #include <algorithm>
 #include <cassert>
 
-#include "../test_allocator.h"
+#include "test_allocator.h"
 #include "min_allocator.h"
 
 template <class charT>
diff --git a/libcxx/test/strings/basic.string/string.cons/size_char_alloc.pass.cpp b/libcxx/test/strings/basic.string/string.cons/size_char_alloc.pass.cpp
index a8e6fdf..4dfe9063 100644
--- a/libcxx/test/strings/basic.string/string.cons/size_char_alloc.pass.cpp
+++ b/libcxx/test/strings/basic.string/string.cons/size_char_alloc.pass.cpp
@@ -16,7 +16,7 @@
 #include <algorithm>
 #include <cassert>
 
-#include "../test_allocator.h"
+#include "test_allocator.h"
 #include "min_allocator.h"
 
 template <class charT>
diff --git a/libcxx/test/strings/basic.string/string.cons/substr.pass.cpp b/libcxx/test/strings/basic.string/string.cons/substr.pass.cpp
index 3e04a97..2a9bf2a 100644
--- a/libcxx/test/strings/basic.string/string.cons/substr.pass.cpp
+++ b/libcxx/test/strings/basic.string/string.cons/substr.pass.cpp
@@ -18,7 +18,7 @@
 #include <algorithm>
 #include <cassert>
 
-#include "../test_allocator.h"
+#include "test_allocator.h"
 #include "min_allocator.h"
 
 template <class S>
diff --git a/libcxx/test/strings/basic.string/string.nonmembers/string.special/swap_noexcept.pass.cpp b/libcxx/test/strings/basic.string/string.nonmembers/string.special/swap_noexcept.pass.cpp
index 01767e4..4d5d796 100644
--- a/libcxx/test/strings/basic.string/string.nonmembers/string.special/swap_noexcept.pass.cpp
+++ b/libcxx/test/strings/basic.string/string.nonmembers/string.special/swap_noexcept.pass.cpp
@@ -18,7 +18,7 @@
 #include <string>
 #include <cassert>
 
-#include "../../test_allocator.h"
+#include "test_allocator.h"
 
 template <class T>
 struct some_alloc
diff --git a/libcxx/test/strings/basic.string/string.ops/string.accessors/get_allocator.pass.cpp b/libcxx/test/strings/basic.string/string.ops/string.accessors/get_allocator.pass.cpp
index b3892d7..6ba040d 100644
--- a/libcxx/test/strings/basic.string/string.ops/string.accessors/get_allocator.pass.cpp
+++ b/libcxx/test/strings/basic.string/string.ops/string.accessors/get_allocator.pass.cpp
@@ -14,7 +14,7 @@
 #include <string>
 #include <cassert>
 
-#include "../../test_allocator.h"
+#include "test_allocator.h"
 #include "min_allocator.h"
 
 template <class S>
diff --git a/libcxx/test/strings/basic.string/test_allocator.h b/libcxx/test/strings/basic.string/test_allocator.h
deleted file mode 100644
index 8985215..0000000
--- a/libcxx/test/strings/basic.string/test_allocator.h
+++ /dev/null
@@ -1,75 +0,0 @@
-#ifndef TEST_ALLOCATOR_H
-#define TEST_ALLOCATOR_H
-
-#include <cstddef>
-#include <type_traits>
-#include <cstdlib>
-#include <new>
-#include <climits>
-
-class test_alloc_base
-{
-protected:
-    static int count;
-public:
-    static int throw_after;
-};
-
-int test_alloc_base::count = 0;
-int test_alloc_base::throw_after = INT_MAX;
-
-template <class T>
-class test_allocator
-    : public test_alloc_base
-{
-    int data_;
-
-    template <class U> friend class test_allocator;
-public:
-
-    typedef unsigned                                                   size_type;
-    typedef int                                                        difference_type;
-    typedef T                                                          value_type;
-    typedef value_type*                                                pointer;
-    typedef const value_type*                                          const_pointer;
-    typedef typename std::add_lvalue_reference<value_type>::type       reference;
-    typedef typename std::add_lvalue_reference<const value_type>::type const_reference;
-
-    template <class U> struct rebind {typedef test_allocator<U> other;};
-
-    test_allocator() throw() : data_(-1) {}
-    explicit test_allocator(int i) throw() : data_(i) {}
-    test_allocator(const test_allocator& a) throw()
-        : data_(a.data_) {}
-    template <class U> test_allocator(const test_allocator<U>& a) throw()
-        : data_(a.data_) {}
-    ~test_allocator() throw() {data_ = 0;}
-    pointer address(reference x) const {return &x;}
-    const_pointer address(const_reference x) const {return &x;}
-    pointer allocate(size_type n, const void* = 0)
-        {
-            if (count >= throw_after) {
-#ifndef _LIBCPP_NO_EXCEPTIONS
-                throw std::bad_alloc();
-#else
-                std::terminate();
-#endif
-            }
-            ++count;
-            return (pointer)std::malloc(n * sizeof(T));
-        }
-    void deallocate(pointer p, size_type n)
-        {std::free(p);}
-    size_type max_size() const throw()
-        {return UINT_MAX / sizeof(T);}
-    void construct(pointer p, const T& val)
-        {::new(p) T(val);}
-    void destroy(pointer p) {p->~T();}
-
-    friend bool operator==(const test_allocator& x, const test_allocator& y)
-        {return x.data_ == y.data_;}
-    friend bool operator!=(const test_allocator& x, const test_allocator& y)
-        {return !(x == y);}
-};
-
-#endif  // TEST_ALLOCATOR_H