You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stdcxx.apache.org by an...@apache.org on 2006/05/16 15:32:06 UTC

svn commit: r406937 - /incubator/stdcxx/trunk/tests/strings/21.string.append.cpp

Author: antonp
Date: Tue May 16 06:32:05 2006
New Revision: 406937

URL: http://svn.apache.org/viewcvs?rev=406937&view=rev
Log:
2006-05-16  Anton Pevtsov  <an...@moscow.vdiweb.com>

	* 21.string.append.cpp (push_back_val_test_cases): New array to
	exercise the push_back method.
	(test_append): Added the case to exercise the push_back method.

Modified:
    incubator/stdcxx/trunk/tests/strings/21.string.append.cpp

Modified: incubator/stdcxx/trunk/tests/strings/21.string.append.cpp
URL: http://svn.apache.org/viewcvs/incubator/stdcxx/trunk/tests/strings/21.string.append.cpp?rev=406937&r1=406936&r2=406937&view=diff
==============================================================================
--- incubator/stdcxx/trunk/tests/strings/21.string.append.cpp (original)
+++ incubator/stdcxx/trunk/tests/strings/21.string.append.cpp Tue May 16 06:32:05 2006
@@ -38,7 +38,8 @@
 /**************************************************************************/
 
 // for convenience and brevity
-#define Append(which)   StringMembers::append_ ## which
+#define Append(which)             StringMembers::append_ ## which
+#define PushBack(which)           StringMembers::push_back_ ## which
 
 typedef StringMembers::OverloadId OverloadId;
 typedef StringMembers::TestCase   TestCase;
@@ -394,6 +395,45 @@
 
 /**************************************************************************/
 
+// exercises:
+// push_back (value_type)
+static const TestCase
+push_back_val_test_cases [] = {
+
+#undef TEST
+#define TEST(str, val, res, bthrow) {           \
+        __LINE__, -1, -1, -1, -1, val,          \
+        str, sizeof str - 1,                    \
+        0, 0, res, sizeof res - 1, bthrow       \
+    }
+
+    //    +-------------------------------------- controlled sequence
+    //    |            +--------------------- character to be appended
+    //    |            |   +----------------- expected result sequence
+    //    |            |   |       +--------- exception info
+    //    |            |   |       |             0 - no exception
+    //    |            |   |       |            -1 - exc. safety
+    //    |            |   |       |
+    //    |            |   |       +------------+
+    //    V            V   V                    V
+    TEST ("ab",        'c', "abc",              0),
+
+    TEST ("",          'a', "a",                0),
+    TEST ("",          '\0', "\0",              0),
+    TEST ("\0",        'a', "\0a",              0),
+    TEST ("\0",        '\0', "\0\0",            0),
+
+    TEST ("a\0b\0\0c", '\0', "a\0b\0\0c\0",     0),
+    TEST ("a\0bc\0\0", 'a', "a\0bc\0\0a",       0),
+    TEST ("\0abc\0\0", 'a', "\0abc\0\0a",       0),
+
+    TEST ("x@4095",    'x', "x@4096",           0),
+
+    TEST ("last",      't', "lastt",            0)
+};
+
+/**************************************************************************/
+
 template <class charT, class Traits, class Iterator>
 void test_append_range (const charT    *wstr,
                         std::size_t     wstr_len,
@@ -554,6 +594,7 @@
 
     const charT* const ptr_arg = tcase.arg ? s_arg.c_str () : s_str.c_str ();
     const String&      str_arg = tcase.arg ? s_arg : s_str;
+    const charT        val_arg = (make_char (char (tcase.val), (charT*)0));
 
     std::size_t total_length_calls = 0;
     std::size_t n_length_calls = 0;
@@ -627,20 +668,26 @@
             }
 
             case Append (size_val): {
-                const charT ch (make_char (char (tcase.val), (charT*)0));
-                const String& s_res = s_str.append (tcase.size, ch);
+                const String& s_res = s_str.append (tcase.size, val_arg);
                 res_off = &s_res - &s_str;
                 break;
             }
 
+            case PushBack (val): {
+                s_str.push_back (val_arg);
+                break;
+            }
+
             default:
                 RW_ASSERT (!"logic error: unknown append overload");
             }
 
             // verify the returned value
-            rw_assert (0 == res_off, 0, tcase.line,
-                       "line %d. %{$FUNCALL} returned invalid reference, "
-                       "offset is %zu", __LINE__, res_off);
+            if (PushBack (val) != which) {
+                rw_assert (0 == res_off, 0, tcase.line,
+                           "line %d. %{$FUNCALL} returned invalid reference, "
+                           "offset is %zu", __LINE__, res_off);
+            }
 
             // verify that strings are of equal length
             rw_assert (res_len == s_str.size (), 0, tcase.line,
@@ -775,7 +822,12 @@
         TEST (ptr_size),
         TEST (str_size_size),
         TEST (size_val),
-        TEST (range)
+        TEST (range),
+
+        { 
+            StringMembers::push_back_val, push_back_val_test_cases,
+            sizeof push_back_val_test_cases / sizeof *push_back_val_test_cases
+        }
     };
 
     const std::size_t test_count = sizeof tests / sizeof *tests;