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/06/15 15:30:40 UTC
svn commit: r414577 - in /incubator/stdcxx/trunk/tests: src/21.strings.cpp
strings/21.string.append.cpp strings/21.string.assign.cpp
strings/21.string.cons.cpp strings/21.string.insert.cpp
strings/21.string.replace.cpp
Author: antonp
Date: Thu Jun 15 06:30:39 2006
New Revision: 414577
URL: http://svn.apache.org/viewvc?rev=414577&view=rev
Log:
2006-06-15 Anton Pevtsov <an...@moscow.vdiweb.com>
* 21.strings.cpp (_rw_reverse_results): new helper function to
reverse the substring in the resulting sequence
(_rw_dispatch): updated to reverse the resulting substring for
the reverse iterators via call to the helper function.
* 21.string.append.cpp (AppendRangeOverload): Added special
processing for the reverse iterators.
(test_append): reverse iterators tests enabled, range classes
variables renamed for the convenience.
* 21.string.assign.cpp: Same
* 21.string.cons.cpp: Same
* 21.string.insert.cpp: Same
* 21.string.replace.cpp: Same
Modified:
incubator/stdcxx/trunk/tests/src/21.strings.cpp
incubator/stdcxx/trunk/tests/strings/21.string.append.cpp
incubator/stdcxx/trunk/tests/strings/21.string.assign.cpp
incubator/stdcxx/trunk/tests/strings/21.string.cons.cpp
incubator/stdcxx/trunk/tests/strings/21.string.insert.cpp
incubator/stdcxx/trunk/tests/strings/21.string.replace.cpp
Modified: incubator/stdcxx/trunk/tests/src/21.strings.cpp
URL: http://svn.apache.org/viewvc/incubator/stdcxx/trunk/tests/src/21.strings.cpp?rev=414577&r1=414576&r2=414577&view=diff
==============================================================================
--- incubator/stdcxx/trunk/tests/src/21.strings.cpp (original)
+++ incubator/stdcxx/trunk/tests/src/21.strings.cpp Thu Jun 15 06:30:39 2006
@@ -987,6 +987,40 @@
/**************************************************************************/
+// helper function to reverse substring in the resulting sequence
+static
+StringTestCase _rw_reverse_results (const StringTestCase &tsrc,
+ _RWSTD_SIZE_T off, _RWSTD_SIZE_T ext)
+{
+ // expand expected results
+ char *new_res = 0;
+ _RWSTD_SIZE_T res_len = 0;
+ new_res = rw_expand (new_res, tsrc.res, tsrc.nres, &res_len);
+
+ // reverse them
+ _RWSTD_SIZE_T res_off = off;
+ _RWSTD_SIZE_T res_ext = (ext < res_len ? ext : res_len) - 1;
+
+ char* beg = new_res + res_off;
+ char* end = beg + res_ext;
+
+ for (; beg < end; ++beg, --end) {
+ char tmp = *beg;
+ *beg = *end;
+ *end = tmp;
+ }
+
+ // form new test case
+ StringTestCase new_case = {
+ tsrc.line, tsrc.off, tsrc.size, tsrc.off2,
+ tsrc.size2, tsrc.val, tsrc.str, tsrc.str_len,
+ tsrc.arg, tsrc.arg_len, new_res, res_len, tsrc.bthrow
+ };
+
+ return new_case;
+}
+
+
template <class charT, class Traits, class Allocator>
void
_rw_dispatch (charT*, Traits*, Allocator*,
@@ -1001,9 +1035,34 @@
TestFunc* const tfunc = _RWSTD_REINTERPRET_CAST (TestFunc*, farray [inx]);
+ bool reverse_iter = StringIds::ReverseIterator == func.iter_id_
+ || StringIds::ConstReverseIterator == func.iter_id_;
+
const Data tdata (func, tcase);
- tfunc ((charT*)0, (Traits*)0, (Allocator*)0, tdata);
+ // special processing for the reverse iterators
+ if (reverse_iter) {
+
+ _RWSTD_SIZE_T func_id = tdata.func_.which_ & StringIds::fid_mask;
+ bool like_ctor = StringIds::fid_ctor == func_id
+ || StringIds::fid_assign == func_id;
+
+ // ctor and assign require the full string reverse
+ _RWSTD_SIZE_T off = like_ctor ? 0 : tdata.off1_;
+ _RWSTD_SIZE_T ext = like_ctor ? tdata.reslen_ : tdata.ext2_;
+
+ StringTestCase rev_tcase = _rw_reverse_results (tcase, off, ext);
+
+ const Data rev_tdata (func, rev_tcase);
+
+ tfunc ((charT*)0, (Traits*)0, (Allocator*)0, rev_tdata);
+
+ // clean up allocated memory, if any
+ if (0 != rev_tcase.res)
+ delete[] rev_tcase.res;
+ }
+ else
+ tfunc ((charT*)0, (Traits*)0, (Allocator*)0, tdata);
}
Modified: incubator/stdcxx/trunk/tests/strings/21.string.append.cpp
URL: http://svn.apache.org/viewvc/incubator/stdcxx/trunk/tests/strings/21.string.append.cpp?rev=414577&r1=414576&r2=414577&view=diff
==============================================================================
--- incubator/stdcxx/trunk/tests/strings/21.string.append.cpp (original)
+++ incubator/stdcxx/trunk/tests/strings/21.string.append.cpp Thu Jun 15 06:30:39 2006
@@ -534,7 +534,13 @@
const StringTestCase &tcase = tdata.tcase_;
- const std::size_t off = tdata.off2_;
+ bool reverse_iter = StringIds::ReverseIterator == tdata.func_.iter_id_
+ || StringIds::ConstReverseIterator == tdata.func_.iter_id_;
+
+ const std::size_t srclen_ = tcase.arg ? tdata.arglen_ : str.size ();
+
+ const std::size_t off =
+ reverse_iter ? srclen_ - tdata.off2_ - tdata.ext2_ : tdata.off2_;
const std::size_t ext = tdata.ext2_;
if (0 == tcase.arg) {
@@ -838,8 +844,8 @@
#define TEST(Iterator) do { \
typedef typename String::Iterator Iter; \
static const \
- AppendRangeOverload<String, Iter> app; \
- test_append ((charT*)0, (Traits*)0, (Allocator*)0, app, tdata); \
+ AppendRangeOverload<String, Iter> rng; \
+ test_append ((charT*)0, (Traits*)0, (Allocator*)0, rng, tdata); \
} while (0)
case StringIds::Pointer: TEST (pointer); break;
@@ -847,13 +853,8 @@
case StringIds::Iterator: TEST (iterator); break;
case StringIds::ConstIterator: TEST (const_iterator); break;
- // disabled for now
- case StringIds::ReverseIterator:
- // TEST (reverse_iterator);
- break;
-
- case StringIds::ConstReverseIterator:
- // TEST (const_reverse_iterator);
+ case StringIds::ReverseIterator: TEST (reverse_iterator); break;
+ case StringIds::ConstReverseIterator: TEST (const_reverse_iterator);
break;
// exercise specializations of the member function template
@@ -863,8 +864,8 @@
#define TEST(Iterator) do { \
typedef Iterator<charT> Iter; \
static const \
- AppendRange<String, Iter> app; \
- test_append ((charT*)0, (Traits*)0, (Allocator*)0, app, tdata); \
+ AppendRange<String, Iter> rng; \
+ test_append ((charT*)0, (Traits*)0, (Allocator*)0, rng, tdata); \
} while (0)
case StringIds::Input: TEST (InputIter); break;
@@ -878,8 +879,8 @@
}
else {
// exercise ordinary overloads of the member function
- static const RangeBase<String > app;
- test_append ((charT*)0, (Traits*)0, (Allocator*)0, app, tdata);
+ static const RangeBase<String > rng;
+ test_append ((charT*)0, (Traits*)0, (Allocator*)0, rng, tdata);
}
}
Modified: incubator/stdcxx/trunk/tests/strings/21.string.assign.cpp
URL: http://svn.apache.org/viewvc/incubator/stdcxx/trunk/tests/strings/21.string.assign.cpp?rev=414577&r1=414576&r2=414577&view=diff
==============================================================================
--- incubator/stdcxx/trunk/tests/strings/21.string.assign.cpp (original)
+++ incubator/stdcxx/trunk/tests/strings/21.string.assign.cpp Thu Jun 15 06:30:39 2006
@@ -480,7 +480,13 @@
const StringTestCase &tcase = tdata.tcase_;
- const std::size_t off = tdata.off2_;
+ bool reverse_iter = StringIds::ReverseIterator == tdata.func_.iter_id_
+ || StringIds::ConstReverseIterator == tdata.func_.iter_id_;
+
+ const std::size_t srclen_ = tcase.arg ? tdata.arglen_ : str.size ();
+
+ const std::size_t off =
+ reverse_iter ? srclen_ - tdata.off2_ - tdata.ext2_ : tdata.off2_;
const std::size_t ext = tdata.ext2_;
if (0 == tcase.arg) {
@@ -791,8 +797,8 @@
#define TEST(Iterator) do { \
typedef typename String::Iterator Iter; \
static const \
- AssignRangeOverload<String, Iter> app; \
- test_assign ((charT*)0, (Traits*)0, (Allocator*)0, app, tdata); \
+ AssignRangeOverload<String, Iter> rng; \
+ test_assign ((charT*)0, (Traits*)0, (Allocator*)0, rng, tdata); \
} while (0)
case StringIds::Pointer: TEST (pointer); break;
@@ -800,13 +806,8 @@
case StringIds::Iterator: TEST (iterator); break;
case StringIds::ConstIterator: TEST (const_iterator); break;
- // disabled for now
- case StringIds::ReverseIterator:
- // TEST (reverse_iterator);
- break;
-
- case StringIds::ConstReverseIterator:
- // TEST (const_reverse_iterator);
+ case StringIds::ReverseIterator: TEST (reverse_iterator); break;
+ case StringIds::ConstReverseIterator: TEST (const_reverse_iterator);
break;
// exercise specializations of the member function template
@@ -816,8 +817,8 @@
#define TEST(Iterator) do { \
typedef Iterator<charT> Iter; \
static const \
- AssignRange<String, Iter> app; \
- test_assign ((charT*)0, (Traits*)0, (Allocator*)0, app, tdata); \
+ AssignRange<String, Iter> rng; \
+ test_assign ((charT*)0, (Traits*)0, (Allocator*)0, rng, tdata); \
} while (0)
case StringIds::Input: TEST (InputIter); break;
@@ -831,8 +832,8 @@
}
else {
// exercise ordinary overloads of the member function
- static const RangeBase<String> app;
- test_assign ((charT*)0, (Traits*)0, (Allocator*)0, app, tdata);
+ static const RangeBase<String> rng;
+ test_assign ((charT*)0, (Traits*)0, (Allocator*)0, rng, tdata);
}
}
Modified: incubator/stdcxx/trunk/tests/strings/21.string.cons.cpp
URL: http://svn.apache.org/viewvc/incubator/stdcxx/trunk/tests/strings/21.string.cons.cpp?rev=414577&r1=414576&r2=414577&view=diff
==============================================================================
--- incubator/stdcxx/trunk/tests/strings/21.string.cons.cpp (original)
+++ incubator/stdcxx/trunk/tests/strings/21.string.cons.cpp Thu Jun 15 06:30:39 2006
@@ -577,7 +577,11 @@
operator() (String& str_arg,
const StringTestCaseData<StringChar>& tdata) const {
- const std::size_t off = tdata.off2_;
+ bool reverse_iter = StringIds::ReverseIterator == tdata.func_.iter_id_
+ || StringIds::ConstReverseIterator == tdata.func_.iter_id_;
+
+ const std::size_t off = reverse_iter ?
+ tdata.arglen_ - tdata.off2_ - tdata.ext2_ : tdata.off2_;
const std::size_t ext = tdata.ext2_;
const Iterator first (begin (str_arg, (Iterator*)0) + off);
@@ -1054,13 +1058,8 @@
case StringIds::Iterator: TEST (iterator); break;
case StringIds::ConstIterator: TEST (const_iterator); break;
- // disabled for now
- case StringIds::ReverseIterator:
- // TEST (reverse_iterator);
- break;
-
- case StringIds::ConstReverseIterator:
- // TEST (const_reverse_iterator);
+ case StringIds::ReverseIterator: TEST (reverse_iterator); break;
+ case StringIds::ConstReverseIterator: TEST (const_reverse_iterator);
break;
// exercise specializations of the member function template
Modified: incubator/stdcxx/trunk/tests/strings/21.string.insert.cpp
URL: http://svn.apache.org/viewvc/incubator/stdcxx/trunk/tests/strings/21.string.insert.cpp?rev=414577&r1=414576&r2=414577&view=diff
==============================================================================
--- incubator/stdcxx/trunk/tests/strings/21.string.insert.cpp (original)
+++ incubator/stdcxx/trunk/tests/strings/21.string.insert.cpp Thu Jun 15 06:30:39 2006
@@ -603,7 +603,13 @@
// create a pair of iterators into the string object being modified
const StringIter first1 (str.begin () + tdata.off1_);
- const std::size_t off = tdata.off2_;
+ bool reverse_iter = StringIds::ReverseIterator == tdata.func_.iter_id_
+ || StringIds::ConstReverseIterator == tdata.func_.iter_id_;
+
+ const std::size_t srclen_ = tcase.arg ? tdata.arglen_ : str.size ();
+
+ const std::size_t off =
+ reverse_iter ? srclen_ - tdata.off2_ - tdata.ext2_ : tdata.off2_;
const std::size_t ext = tdata.ext2_;
if (0 == tcase.arg) {
@@ -936,8 +942,8 @@
#define TEST(Iterator) do { \
typedef typename String::Iterator Iter; \
static const \
- InsertRangeOverload<String, Iter> rep; \
- test_insert ((charT*)0, (Traits*)0, (Allocator*)0, rep, tdata); \
+ InsertRangeOverload<String, Iter> rng; \
+ test_insert ((charT*)0, (Traits*)0, (Allocator*)0, rng, tdata); \
} while (0)
case StringIds::Pointer: TEST (pointer); break;
@@ -945,13 +951,8 @@
case StringIds::Iterator: TEST (iterator); break;
case StringIds::ConstIterator: TEST (const_iterator); break;
- // disabled for now
- case StringIds::ReverseIterator:
- // TEST (reverse_iterator);
- break;
-
- case StringIds::ConstReverseIterator:
- // TEST (const_reverse_iterator);
+ case StringIds::ReverseIterator: TEST (reverse_iterator); break;
+ case StringIds::ConstReverseIterator: TEST (const_reverse_iterator);
break;
// exercise specializations of the member function template
@@ -960,8 +961,8 @@
#define TEST(Iterator) do { \
typedef Iterator<charT> Iter; \
static const \
- InsertRange<String, Iter> rep; \
- test_insert ((charT*)0, (Traits*)0, (Allocator*)0, rep, tdata); \
+ InsertRange<String, Iter> rng; \
+ test_insert ((charT*)0, (Traits*)0, (Allocator*)0, rng, tdata); \
} while (0)
case StringIds::Input: TEST (InputIter); break;
@@ -975,8 +976,8 @@
}
else {
// exercise ordinary overloads of the member function
- static const RangeBase<String> rep;
- test_insert ((charT*)0, (Traits*)0, (Allocator*)0, rep, tdata);
+ static const RangeBase<String> rng;
+ test_insert ((charT*)0, (Traits*)0, (Allocator*)0, rng, tdata);
}
}
Modified: incubator/stdcxx/trunk/tests/strings/21.string.replace.cpp
URL: http://svn.apache.org/viewvc/incubator/stdcxx/trunk/tests/strings/21.string.replace.cpp?rev=414577&r1=414576&r2=414577&view=diff
==============================================================================
--- incubator/stdcxx/trunk/tests/strings/21.string.replace.cpp (original)
+++ incubator/stdcxx/trunk/tests/strings/21.string.replace.cpp Thu Jun 15 06:30:39 2006
@@ -774,7 +774,13 @@
const StringIter first1 (str.begin () + tdata.off1_);
const StringIter last1 (first1 + tdata.ext1_);
- const std::size_t off = tdata.off2_;
+ bool reverse_iter = StringIds::ReverseIterator == tdata.func_.iter_id_
+ || StringIds::ConstReverseIterator == tdata.func_.iter_id_;
+
+ const std::size_t srclen_ = tcase.arg ? tdata.arglen_ : str.size ();
+
+ const std::size_t off =
+ reverse_iter ? srclen_ - tdata.off2_ - tdata.ext2_ : tdata.off2_;
const std::size_t ext = tdata.ext2_;
if (0 == tcase.arg) {
@@ -800,7 +806,7 @@
template <class charT, class Traits, class Allocator>
void test_replace (charT*, Traits*, Allocator*, const RangeBase<
- std::basic_string <charT, Traits, Allocator> > &rep,
+ std::basic_string <charT, Traits, Allocator> > &rng,
const StringTestCaseData<charT> &tdata)
{
typedef std::basic_string <charT, Traits, Allocator> String;
@@ -943,7 +949,7 @@
break;
case Replace (iter_iter_range):
- ret_ptr = &rep (str, tdata);
+ ret_ptr = &rng (str, tdata);
break;
default:
@@ -1114,8 +1120,8 @@
#define TEST(Iterator) do { \
typedef typename String::Iterator Iter; \
static const \
- ReplaceRangeOverload<String, Iter> rep; \
- test_replace ((charT*)0, (Traits*)0, (Allocator*)0, rep, tdata); \
+ ReplaceRangeOverload<String, Iter> rng; \
+ test_replace ((charT*)0, (Traits*)0, (Allocator*)0, rng, tdata); \
} while (0)
case StringIds::Pointer: TEST (pointer); break;
@@ -1123,13 +1129,8 @@
case StringIds::Iterator: TEST (iterator); break;
case StringIds::ConstIterator: TEST (const_iterator); break;
- // disabled for now
- case StringIds::ReverseIterator:
- // TEST (reverse_iterator);
- break;
-
- case StringIds::ConstReverseIterator:
- // TEST (const_reverse_iterator);
+ case StringIds::ReverseIterator: TEST (reverse_iterator); break;
+ case StringIds::ConstReverseIterator: TEST (const_reverse_iterator);
break;
// exercise specializations of the member function template
@@ -1138,8 +1139,8 @@
#define TEST(Iterator) do { \
typedef Iterator<charT> Iter; \
static const \
- ReplaceRange<String, Iter> rep; \
- test_replace ((charT*)0, (Traits*)0, (Allocator*)0, rep, tdata); \
+ ReplaceRange<String, Iter> rng; \
+ test_replace ((charT*)0, (Traits*)0, (Allocator*)0, rng, tdata); \
} while (0)
case StringIds::Input: TEST (InputIter); break;
@@ -1153,8 +1154,8 @@
}
else {
// exercise ordinary overloads of the member function
- static const RangeBase<String> rep;
- test_replace ((charT*)0, (Traits*)0, (Allocator*)0, rep, tdata);
+ static const RangeBase<String> rng;
+ test_replace ((charT*)0, (Traits*)0, (Allocator*)0, rng, tdata);
}
}