You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stdcxx.apache.org by se...@apache.org on 2006/05/17 04:56:34 UTC

svn commit: r407130 - in /incubator/stdcxx/trunk/tests: include/21.strings.h src/21.strings.cpp

Author: sebor
Date: Tue May 16 19:56:33 2006
New Revision: 407130

URL: http://svn.apache.org/viewcvs?rev=407130&view=rev
Log:
2006-05-16  Martin Sebor  <se...@roguewave.com>

	* 21.strings.h (TEST_DISPATCH): Added an Alloc parameter.
	(DEFINE_TEST_DISPATCH): Introduced a transitional overload of
	the dispatch function template taking an Allocator argument
	and dispatching to the test-defined one which doesn't take
	one.
	(DEFINE_STRING_TEST_DISPATCH): New macro to define a dispatch
	function to invoke a test-defined function template with an
	Allocator argument.
	(rw_disable_user_allocator): Transitional variable to disable
	tests exercising basic_string with a user-defined allocator.
	* 21.strings.cpp (rw_disable_user_allocator): Defined.
	(_rw_run_test): Conditionally enabled tests exercising user
	defined allocators.
	("|-enable-size-const#"): Added a missing command line option.

Modified:
    incubator/stdcxx/trunk/tests/include/21.strings.h
    incubator/stdcxx/trunk/tests/src/21.strings.cpp

Modified: incubator/stdcxx/trunk/tests/include/21.strings.h
URL: http://svn.apache.org/viewcvs/incubator/stdcxx/trunk/tests/include/21.strings.h?rev=407130&r1=407129&r2=407130&view=diff
==============================================================================
--- incubator/stdcxx/trunk/tests/include/21.strings.h (original)
+++ incubator/stdcxx/trunk/tests/include/21.strings.h Tue May 16 19:56:33 2006
@@ -499,38 +499,39 @@
 #define Disabled(which)   \
     StringMembers::opt_memfun_disabled [which & ~StringMembers::mem_mask]
 
+
 #ifndef _RWSTD_NO_WCHAR_T
-#  define TEST_DISPATCH(fname, memfun, tcase)                   \
+#  define TEST_DISPATCH(Alloc, fname, memfun, tcase)            \
     if (StringMembers::DefaultTraits == memfun.traits_id_) {    \
         if (StringMembers::Char == memfun.char_id_)             \
             fname (char (), (std::char_traits<char>*)0,         \
-                   memfun.which_, tcase);                       \
+                   (Alloc<char>*)0, memfun.which_, tcase);      \
         else if (StringMembers::WChar == memfun.char_id_)       \
             fname (wchar_t (), (std::char_traits<wchar_t>*)0,   \
-                   memfun.which_, tcase);                       \
+                   (Alloc<wchar_t>*)0, memfun.which_, tcase);   \
         else                                                    \
             rw_note (0, 0, 0,                                   \
                      "%{$CLASS} tests not implemented");        \
     }                                                           \
     else {                                                      \
-       if (StringMembers::Char == memfun.char_id_)              \
-           fname (char (), (UserTraits<char>*)0,                \
-                  memfun.which_, tcase);                        \
+        if (StringMembers::Char == memfun.char_id_)             \
+            fname (char (), (UserTraits<char>*)0,               \
+                   (Alloc<char>*)0, memfun.which_, tcase);      \
        else if (StringMembers::WChar == memfun.char_id_)        \
-           fname (wchar_t (), (UserTraits<wchar_t>*)0,          \
-                  memfun.which_, tcase);                        \
+            fname (wchar_t (), (UserTraits<wchar_t>*)0,         \
+                   (Alloc<wchar_t>*)0, memfun.which_, tcase);   \
        else                                                     \
            fname (UserChar (), (UserTraits<UserChar>*)0,        \
-                  memfun.which_, tcase);                        \
+                  (Alloc<UserChar>*)0, memfun.which_, tcase);   \
     }                                                           \
     (void)0
 
 #else   // if defined (_RWSTD_NO_WCHAR_T)
-#  define TEST_DISPATCH(fname, memfun, tcase)                   \
+#  define TEST_DISPATCH(Alloc, fname, memfun, tcase)            \
     if (StringMembers::DefaultTraits == memfun.traits_id_) {    \
         if (StringMembers::Char == memfun.char_id_)             \
             fname (char (), (std::char_traits<char>*)0,         \
-                   memfun.which_, tcase);                       \
+                   (Alloc<char>*)0, memfun.which_, tcase);      \
         else if (StringMembers::WChar == memfun.char_id_)       \
             RW_ASSERT (!"logic error: wchar_t disabled");       \
         else                                                    \
@@ -541,22 +542,50 @@
     else {                                                      \
         if (StringMembers::Char == memfun.char_id_)             \
             fname (char (), (UserTraits<char>*)0,               \
-                   memfun.which_, tcase);                       \
+                   (Alloc<char>*)0, memfun.which_, tcase);      \
         else if (StringMembers::WChar == memfun.char_id_)       \
              RW_ASSERT (!"logic error: wchar_t disabled");      \
         else if (StringMembers::UChar == memfun.char_id_)       \
             fname (UserChar (), (UserTraits<UserChar>*)0,       \
-                   memfun.which_, tcase);                       \
+                   (Alloc<UserChar>*)0, memfun.which_, tcase);  \
     }                                                           \
     (void)0
 
 #endif   // _RWSTD_NO_WCHAR_T
 
 
+extern _TEST_EXPORT
+int rw_disable_user_allocator;
+
+
+// transitional, to be replaced by DEFINE_STRING_TEST_DISPATCH()
 #define DEFINE_TEST_DISPATCH(fname)                             \
+    template <class charT, class Traits, class Allocator>       \
+    void                                                        \
+    fname (charT, Traits*, Allocator*,                          \
+           StringMembers::OverloadId which,                     \
+           const StringMembers::TestCase &tcase) {              \
+        fname (charT (), (Traits*)0, which, tcase);             \
+    }                                                           \
+                                                                \
     static void                                                 \
     fname (const MemFun &memfun, const TestCase &tcase) {       \
-        TEST_DISPATCH (fname, memfun, tcase);                   \
+        /* disable tests exercising user-define allocator */    \
+        rw_disable_user_allocator = 1;                          \
+        TEST_DISPATCH (std::allocator, fname, memfun, tcase);   \
+    } typedef void rw_unused_typedef
+
+#define DEFINE_STRING_TEST_DISPATCH(fname)                              \
+    static void                                                         \
+    fname (const MemFun &memfun, const TestCase &tcase) {               \
+        if (StringMembers::DefaultAllocator == memfun.alloc_id_) {      \
+            TEST_DISPATCH (std::allocator, fname, memfun, tcase);       \
+        }                                                               \
+        else if (StringMembers::UserAllocator == memfun.alloc_id_) {    \
+            TEST_DISPATCH (UserAlloc, fname, memfun, tcase);            \
+        }                                                               \
+        else                                                            \
+            RW_ASSERT (!"logic error: bad allocator");                  \
     } typedef void rw_unused_typedef
     
 

Modified: incubator/stdcxx/trunk/tests/src/21.strings.cpp
URL: http://svn.apache.org/viewcvs/incubator/stdcxx/trunk/tests/src/21.strings.cpp?rev=407130&r1=407129&r2=407130&view=diff
==============================================================================
--- incubator/stdcxx/trunk/tests/src/21.strings.cpp (original)
+++ incubator/stdcxx/trunk/tests/src/21.strings.cpp Tue May 16 19:56:33 2006
@@ -716,6 +716,11 @@
 _rw_string_test_count;
 
 
+// TODO: remove this
+_TEST_EXPORT
+int rw_disable_user_allocator;
+
+
 static int
 _rw_run_test (int, char*[])
 {
@@ -784,7 +789,7 @@
 
     static const StringMembers::Allocator alloc_types[] = {
         StringMembers::DefaultAllocator,
-        // StringMembers::UserAllocator,   // not implemented yet
+        StringMembers::UserAllocator,
         StringMembers::UnknownAllocator
     };
 
@@ -818,6 +823,12 @@
 
             for (size_t k = 0; alloc_types [k]; ++k) {
 
+                // TODO: remove this as soon as user-defined allocators
+                // are fully exercised
+                if (   StringMembers::UserAllocator == alloc_types [k]
+                    && rw_disable_user_allocator)
+                    continue;
+
                 if (_rw_opt_no_alloc_types [k]) {
                     // issue only the first note
                     rw_note (1 < _rw_opt_no_alloc_types [k]++, _rw_this_file,
@@ -945,6 +956,7 @@
                     "|-enable-ptr# "
                     "|-enable-str# "
                     "|-enable-size# "
+                    "|-enable-size-const# "
                     "|-enable-ptr_size# "
                     "|-enable-str_size# "
                     "|-enable-ptr_size_size# "