You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stdcxx.apache.org by el...@apache.org on 2008/07/18 20:05:55 UTC
svn commit: r677985 - in /stdcxx/branches/4.3.x: include/rw/ tests/utilities/
Author: elemings
Date: Fri Jul 18 11:05:55 2008
New Revision: 677985
URL: http://svn.apache.org/viewvc?rev=677985&view=rev
Log:
2008-07-18 Eric Lemings <er...@roguewave.com>
STDCXX-958
* include/rw/_tuple.h (operator==): Minor formatting change.
(operator<): Fixed lexicographical comparison logic.
* tests/utilities/20.tuple.h: Remove global tuple typedefs and
unused output opeator<<.
* tests/utilities/20.tuple.cnstr.cpp: Replaced typedefs with
explicit tuple types. Added TUPLE macros where tuple types
containing commas are used as function macro arguments.
* tests/utilities/20.tuple.creation.cpp: Same.
* tests/utilities/20.tuple.elem.cpp: Same.
* tests/utilities/20.tuple.helpers.cpp: Same.
* tests/utilities/20.tuple.rel.cpp: Same. Also added more tests
(which uncovered broken `operator<') and concise TEST() function
macro wrapper.
Modified:
stdcxx/branches/4.3.x/include/rw/_tuple.h
stdcxx/branches/4.3.x/tests/utilities/20.tuple.cnstr.cpp
stdcxx/branches/4.3.x/tests/utilities/20.tuple.creation.cpp
stdcxx/branches/4.3.x/tests/utilities/20.tuple.elem.cpp
stdcxx/branches/4.3.x/tests/utilities/20.tuple.h
stdcxx/branches/4.3.x/tests/utilities/20.tuple.helpers.cpp
stdcxx/branches/4.3.x/tests/utilities/20.tuple.rel.cpp
Modified: stdcxx/branches/4.3.x/include/rw/_tuple.h
URL: http://svn.apache.org/viewvc/stdcxx/branches/4.3.x/include/rw/_tuple.h?rev=677985&r1=677984&r2=677985&view=diff
==============================================================================
--- stdcxx/branches/4.3.x/include/rw/_tuple.h (original)
+++ stdcxx/branches/4.3.x/include/rw/_tuple.h Fri Jul 18 11:05:55 2008
@@ -210,7 +210,7 @@
template <class... _TypesT, class... _TypesU>
bool operator== (const __rw_tuple<_TypesT...>& __x,
const __rw_tuple<_TypesU...>& __y) {
- return (__x._C_head () == __y._C_head ())
+ return (__x._C_head () == __y._C_head ())
&& (__x._C_tail () == __y._C_tail ());
}
@@ -223,8 +223,9 @@
template <class... _TypesT, class... _TypesU>
bool operator< (const __rw_tuple<_TypesT...>& __x,
const __rw_tuple<_TypesU...>& __y) {
- return (__x._C_head () < __y._C_head ())
- || (__y._C_tail () < __x._C_tail ());
+ return (__x._C_head () < __y._C_head ())
+ || ( !(__y._C_head () < __x._C_head ())
+ && (__x._C_tail () < __y._C_tail ()));
}
_RWSTD_SPECIALIZED_FUNCTION
Modified: stdcxx/branches/4.3.x/tests/utilities/20.tuple.cnstr.cpp
URL: http://svn.apache.org/viewvc/stdcxx/branches/4.3.x/tests/utilities/20.tuple.cnstr.cpp?rev=677985&r1=677984&r2=677985&view=diff
==============================================================================
--- stdcxx/branches/4.3.x/tests/utilities/20.tuple.cnstr.cpp (original)
+++ stdcxx/branches/4.3.x/tests/utilities/20.tuple.cnstr.cpp Fri Jul 18 11:05:55 2008
@@ -39,6 +39,7 @@
#include <type_traits> // for decay
#include <rw_valcmp.h> // for rw_fltcmp
+#include <rw_allocator.h> // for UserAlloc
#include "20.tuple.h"
@@ -149,18 +150,24 @@
{
rw_info (0, __FILE__, __LINE__, "default constructor");
- EmptyTuple et; _RWSTD_UNUSED (et);
- IntTuple it; _RWSTD_UNUSED (it);
- ConstIntTuple ct; _RWSTD_UNUSED (ct);
+ std::tuple<> et; _RWSTD_UNUSED (et);
+ // TODO: enable this test after implementing empty space optimization
+ //rw_assert (sizeof (et) == 0, __FILE__, __LINE__,
+ //"sizeof (std::tuple<>); got %u, expected 0",
+ //sizeof (et));
+
+ std::tuple<int> it; _RWSTD_UNUSED (it);
+ std::tuple<const int> ct; _RWSTD_UNUSED (ct);
// ill-formed for tuples with element types containing references
- PairTuple pt; _RWSTD_UNUSED (pt);
- NestedTuple nt; _RWSTD_UNUSED (nt);
- BigTuple bt; _RWSTD_UNUSED (bt);
+ std::tuple<long, const char*> pt; _RWSTD_UNUSED (pt);
+ std::tuple<std::tuple<int> > nt; _RWSTD_UNUSED (nt);
+ std::tuple<bool, char, int, double, void*, UserDefined> bt;
+ _RWSTD_UNUSED (bt);
UserDefined::reset ();
- UserTuple ut; _RWSTD_UNUSED (ut);
+ std::tuple<UserDefined> ut; _RWSTD_UNUSED (ut);
rw_assert (1 == UserDefined::actual.dflt_ctor, __FILE__, __LINE__,
- "UserTuple::UserTuple (); called %d default ctors, "
+ "std::tuple<UserDefined> ut; called %d default ctors, "
"expected 1", UserDefined::actual.dflt_ctor);
}
@@ -172,36 +179,37 @@
rw_info (0, __FILE__, __LINE__, "value copy constructor");
const int i = std::rand ();
- IntTuple it1 (i);
+ std::tuple<int> it1 (i);
test (__LINE__, it1, i);
- const IntTuple it2 (i);
+ const std::tuple<int> it2 (i);
test (__LINE__, it2, i);
- ConstIntTuple ct (i);
+ std::tuple<const int> ct (i);
test (__LINE__, ct, i);
int j = std::rand ();
- const IntRefTuple rt (j);
+ const std::tuple<int&> rt (j);
test (__LINE__, rt, j);
- NestedTuple nt (it2);
+ std::tuple<std::tuple<int> > nt (it2);
//std::get<0> (it2) = std::rand (); // diliberately cause assertion
test (__LINE__, nt, it2);
const long l = std::rand ();
- PairTuple pt (l, "string");
+ std::tuple<long, const char*> pt (l, "string");
test (__LINE__, pt, l, (const char*) "string");
const UserDefined ud (i);
UserDefined::reset ();
- UserTuple ut (ud);
+ std::tuple<UserDefined> ut (ud);
UserDefined::expect.copy_ctor = 1;
test (__LINE__, ut, ud);
const bool b = true; const char c = 'a';
const double d = 3.14159; void* const p = (void*) &i;
- BigTuple bt (b, c, i, d, p, ud);
+ std::tuple<bool, char, int, double, void*, UserDefined>
+ bt (b, c, i, d, p, ud);
++UserDefined::expect.copy_ctor;
test (__LINE__, bt, b, c, i, d, p, ud);
}
@@ -215,42 +223,43 @@
#define INTEGER_CONSTANT 256
- IntTuple it1 (INTEGER_CONSTANT);
+ std::tuple<int> it1 (INTEGER_CONSTANT);
test (__LINE__, it1, INTEGER_CONSTANT);
const int c = std::rand ();
int i = c; // move semantics can alter source value
- IntTuple it2 (i); // temporary source value
+ std::tuple<int> it2 (i); // temporary source value
test (__LINE__, it2, c);
- const IntTuple it3 (INTEGER_CONSTANT);
+ const std::tuple<int> it3 (INTEGER_CONSTANT);
test (__LINE__, it3, INTEGER_CONSTANT);
i = c;
- const IntTuple it4 (i);
+ const std::tuple<int> it4 (i);
test (__LINE__, it4, c);
- ConstIntTuple ct1 (INTEGER_CONSTANT);
+ std::tuple<const int> ct1 (INTEGER_CONSTANT);
test (__LINE__, ct1, INTEGER_CONSTANT);
i = c;
- ConstIntTuple ct2 (i);
+ std::tuple<const int> ct2 (i);
test (__LINE__, ct2, c);
// ill-formed for tuples with element types containing references
- NestedTuple nt (it1);
+ std::tuple<std::tuple<int> > nt (it1);
test (__LINE__, nt, it1);
- PairTuple pt (123456789L, "string");
+ std::tuple<long, const char*> pt (123456789L, "string");
test (__LINE__, pt, 123456789L, (const char*) "string");
const UserDefined src (c);
UserDefined tmp (src);
UserDefined::reset ();
- UserTuple ut (tmp);
+ std::tuple<UserDefined> ut (tmp);
UserDefined::expect.move_ctor = 1;
test (__LINE__, ut, src);
tmp = src; ++UserDefined::expect.copy_asgn;
- BigTuple bt (true, 'a', INTEGER_CONSTANT, 3.14159, (void*) 0, tmp);
+ std::tuple<bool, char, int, double, void*, UserDefined>
+ bt (true, 'a', INTEGER_CONSTANT, 3.14159, (void*) 0, tmp);
++UserDefined::expect.move_ctor;
test (__LINE__, bt,
true, 'a', INTEGER_CONSTANT, 3.14159, (void*) 0, src);
@@ -264,41 +273,42 @@
rw_info (0, __FILE__, __LINE__,
"copy constructor (homogenous tuples)");
- EmptyTuple et1, et2 (et1);
+ std::tuple<> et1, et2 (et1);
_RWSTD_UNUSED (et2);
const int ci = std::rand ();
- const IntTuple it1 (ci);
- IntTuple it2 (it1);
+ const std::tuple<int> it1 (ci);
+ std::tuple<int> it2 (it1);
test (__LINE__, it2, ci);
- const ConstIntTuple& ct1 = it1; // same as copy ctor
- ConstIntTuple ct2 (ct1);
+ const std::tuple<const int>& ct1 = it1; // same as copy ctor
+ std::tuple<const int> ct2 (ct1);
test (__LINE__, ct2, ci);
int i = ci;
- const IntRefTuple rt1 (i);
- IntRefTuple rt2 (rt1);
+ const std::tuple<int&> rt1 (i);
+ std::tuple<int&> rt2 (rt1);
test (__LINE__, rt2, ci);
- const NestedTuple nt1 (it1);
- NestedTuple nt2 (nt1);
+ const std::tuple<std::tuple<int> > nt1 (it1);
+ std::tuple<std::tuple<int> > nt2 (nt1);
test (__LINE__, nt2, it1);
- const PairTuple pt1 (1234567890L, "string");
- PairTuple pt2 (pt1);
+ const std::tuple<long, const char*> pt1 (1234567890L, "string");
+ std::tuple<long, const char*> pt2 (pt1);
test (__LINE__, pt2, 1234567890L, (const char*) "string");
UserDefined ud (ci);
- const UserTuple ut1 (ud);
+ const std::tuple<UserDefined> ut1 (ud);
UserDefined::reset ();
- UserTuple ut2 (ut1);
+ std::tuple<UserDefined> ut2 (ut1);
++UserDefined::expect.copy_ctor;
test (__LINE__, ut2, ud);
- const BigTuple bt1 (true, 'a', ci, 3.14159, (void* const) &i, ud);
+ const std::tuple<bool, char, int, double, void*, UserDefined>
+ bt1 (true, 'a', ci, 3.14159, (void* const) &i, ud);
++UserDefined::expect.move_ctor; // moved ud to bt1
- BigTuple bt2 (bt1);
+ std::tuple<bool, char, int, double, void*, UserDefined> bt2 (bt1);
++UserDefined::expect.copy_ctor; // copied to bt2
test (__LINE__, bt2, true, 'a', ci, 3.14159, (void* const) &i, ud);
}
@@ -311,36 +321,38 @@
rw_info (0, __FILE__, __LINE__,
"move constructor (homogenous tuples)");
- EmptyTuple et (EmptyTuple ()); _RWSTD_UNUSED (et);
+ std::tuple<> et (std::tuple<> ()); _RWSTD_UNUSED (et);
const int ci = std::rand ();
- IntTuple it1 (ci);
- IntTuple it2 (std::move (it1));
+ std::tuple<int> it1 (ci);
+ std::tuple<int> it2 (std::move (it1));
test (__LINE__, it2, ci);
- ConstIntTuple ct1 (ci);
- ConstIntTuple ct2 = std::move (ct1);
+ std::tuple<const int> ct1 (ci);
+ std::tuple<const int> ct2 = std::move (ct1);
test (__LINE__, ct2, ci);
- NestedTuple nt1 (it1);
- NestedTuple nt2 = std::move (nt1);
+ std::tuple<std::tuple<int> > nt1 (it1);
+ std::tuple<std::tuple<int> > nt2 = std::move (nt1);
test (__LINE__, nt2, it1);
- PairTuple pt1 (1234567890L, "string");
- PairTuple pt2 (std::move (pt1));
+ std::tuple<long, const char*> pt1 (1234567890L, "string");
+ std::tuple<long, const char*> pt2 (std::move (pt1));
test (__LINE__, pt2, 1234567890L, (const char*) "string");
const UserDefined ud (ci);
- UserTuple ut1 (ud);
+ std::tuple<UserDefined> ut1 (ud);
UserDefined::reset ();
- UserTuple ut2 (std::move (ut1));
+ std::tuple<UserDefined> ut2 (std::move (ut1));
++UserDefined::expect.move_ctor;
test (__LINE__, ut2, ud);
- BigTuple bt1 (true, 'a', ci, 3.14159, (void*) &ci, ud);
+ std::tuple<bool, char, int, double, void*, UserDefined>
+ bt1 (true, 'a', ci, 3.14159, (void*) &ci, ud);
++UserDefined::expect.copy_ctor;
- BigTuple bt2 (std::move (bt1));
+ std::tuple<bool, char, int, double, void*, UserDefined>
+ bt2 (std::move (bt1));
++UserDefined::expect.move_ctor;
test (__LINE__, bt2, true, 'a', ci, 3.14159, (void*) &ci, ud);
}
@@ -353,45 +365,47 @@
rw_info (0, __FILE__, __LINE__,
"copy assignment operator (homogenous tuples)");
- const EmptyTuple et1 = EmptyTuple ();
- EmptyTuple et2;
+ const std::tuple<> et1 = std::tuple<> ();
+ std::tuple<> et2;
et2 = et1;
_RWSTD_UNUSED (et2);
int i = std::rand ();
- const IntTuple it1 (i);
- IntTuple it2;
+ const std::tuple<int> it1 (i);
+ std::tuple<int> it2;
it2 = it1;
test (__LINE__, it2, i);
// copy assignment ill-formed for constant element types
- const IntRefTuple rt1 (i);
+ const std::tuple<int&> rt1 (i);
int j = -1; // outside range of rand()
- IntRefTuple rt2 (j); // note, different reference
+ std::tuple<int&> rt2 (j); // note, different reference
rt2 = rt1;
test (__LINE__, rt2, i);
- NestedTuple nt1 (it1);
- NestedTuple nt2;
+ std::tuple<std::tuple<int> > nt1 (it1);
+ std::tuple<std::tuple<int> > nt2;
nt2 = nt1;
test (__LINE__, nt2, it1);
- const PairTuple pt1 (long (i), "string");
- PairTuple pt2;
+ const std::tuple<long, const char*> pt1 (long (i), "string");
+ std::tuple<long, const char*> pt2;
pt2 = pt1;
test (__LINE__, pt2, long (i), (const char*) "string");
const UserDefined ud (i);
- const UserTuple ut1 (ud);
- UserTuple ut2;
+ const std::tuple<UserDefined> ut1 (ud);
+ std::tuple<UserDefined> ut2;
UserDefined::reset ();
ut2 = ut1; ++UserDefined::expect.copy_asgn;
test (__LINE__, ut2, ud);
- const BigTuple bt1 (true, 'a', i, 3.14159, (void* const) &i, ud);
+ const std::tuple<bool, char, int, double, void*, UserDefined>
+ bt1 (true, 'a', i, 3.14159, (void* const) &i, ud);
++UserDefined::expect.copy_ctor;
- BigTuple bt2; ++UserDefined::expect.dflt_ctor;
+ std::tuple<bool, char, int, double, void*, UserDefined> bt2;
+ ++UserDefined::expect.dflt_ctor;
bt2 = bt1; ++UserDefined::expect.copy_asgn;
test (__LINE__, bt2, true, 'a', i, 3.14159, (void* const) &i, ud);
}
@@ -404,38 +418,39 @@
rw_info (0, __FILE__, __LINE__,
"move assignment operator (homogenous tuples)");
- EmptyTuple et1, et2;
+ std::tuple<> et1, et2;
et2 = std::move (et1);
_RWSTD_UNUSED (et2);
int i = std::rand ();
- IntTuple it1 (i);
- IntTuple it2;
+ std::tuple<int> it1 (i);
+ std::tuple<int> it2;
it2 = std::move (it1);
test (__LINE__, it2, i);
// move assignment ill-formed for constant element types
- NestedTuple nt1 (it2);
- NestedTuple nt2;
+ std::tuple<std::tuple<int> > nt1 (it2);
+ std::tuple<std::tuple<int> > nt2;
nt2 = std::move (nt1);
test (__LINE__, nt2, it2);
- PairTuple pt1 (1234567890L, "string");
- PairTuple pt2;
+ std::tuple<long, const char*> pt1 (1234567890L, "string");
+ std::tuple<long, const char*> pt2;
pt2 = std::move (pt1);
test (__LINE__, pt2, 1234567890L, (const char*) "string");
const UserDefined ud (i);
- UserTuple ut1 (ud);
- UserTuple ut2;
+ std::tuple<UserDefined> ut1 (ud);
+ std::tuple<UserDefined> ut2;
UserDefined::reset ();
ut2 = std::move (ut1); ++UserDefined::expect.move_asgn;
test (__LINE__, ut2, ud);
- BigTuple bt1 (true, 'a', i, 3.14159, (void* const) &i, ud);
- BigTuple bt2;
+ std::tuple<bool, char, int, double, void*, UserDefined>
+ bt1 (true, 'a', i, 3.14159, (void* const) &i, ud);
+ std::tuple<bool, char, int, double, void*, UserDefined> bt2;
UserDefined::reset ();
bt2 = std::move (bt1); ++UserDefined::expect.move_asgn;
test (__LINE__, bt2, true, 'a', i, 3.14159, (void* const) &i, ud);
@@ -455,10 +470,6 @@
operator const char* () const { return this->data (); }
};
-typedef std::tuple<char> CompatIntTuple;
-typedef std::tuple<unsigned, String> CompatPairTuple;
-typedef std::tuple<int, int, short, float,
- char*, UserDefined> CompatBigTuple;
static void
test_hetero_copy_ctor ()
@@ -468,19 +479,20 @@
int i = std::rand () % CHAR_MAX;
- const CompatIntTuple cit (static_cast<char> (i));
- IntTuple it (cit);
+ const std::tuple<char> cit (static_cast<char> (i));
+ std::tuple<int> it (cit);
test (__LINE__, it, i);
- CompatPairTuple cpt (12345U, "string");
- PairTuple pt (cpt);
+ std::tuple<unsigned, String> cpt (12345U, "string");
+ std::tuple<long, const char*> pt (cpt);
test (__LINE__, pt, 12345U, (const char*) "string");
char s [] = "string"; const UserDefined ud (i);
- const CompatBigTuple cbt (int (true), int ('a'), short (i),
- 3.14159f, s, ud);
+ const std::tuple<int, int, short, float, char*, UserDefined>
+ cbt (int (true), int ('a'), short (i), 3.14159f, s, ud);
UserDefined::reset ();
- BigTuple bt (cbt); ++UserDefined::expect.copy_ctor;
+ std::tuple<bool, char, int, double, void*, UserDefined> bt (cbt);
+ ++UserDefined::expect.copy_ctor;
test (__LINE__, bt, true, 'a', i, 3.14159f, s, ud);
}
@@ -494,19 +506,21 @@
int i = std::rand () % CHAR_MAX;
- CompatIntTuple cit (static_cast<char> (i));
- IntTuple it (std::move (cit));
+ std::tuple<char> cit (static_cast<char> (i));
+ std::tuple<int> it (std::move (cit));
test (__LINE__, it, i);
- CompatPairTuple cpt (12345U, "string");
- PairTuple pt (std::move (cpt));
+ std::tuple<unsigned, String> cpt (12345U, "string");
+ std::tuple<long, const char*> pt (std::move (cpt));
test (__LINE__, pt, 12345U, (const char*) "string");
char s [] = "string"; const UserDefined ud (i);
- CompatBigTuple cbt (int (true), int ('a'), short (i),
- 3.14159f, s, ud);
+ std::tuple<int, int, short, float, char*, UserDefined>
+ cbt (int (true), int ('a'), short (i), 3.14159f, s, ud);
UserDefined::reset ();
- BigTuple bt (std::move (cbt)); ++UserDefined::expect.move_ctor;
+ std::tuple<bool, char, int, double, void*, UserDefined>
+ bt (std::move (cbt));
+ ++UserDefined::expect.move_ctor;
test (__LINE__, bt, true, 'a', i, 3.14159f, s, ud);
}
@@ -520,20 +534,20 @@
int i = std::rand () % CHAR_MAX;
- CompatIntTuple cit (static_cast<char> (i));
- IntTuple it;
+ std::tuple<char> cit (static_cast<char> (i));
+ std::tuple<int> it;
it = cit;
test (__LINE__, it, i);
- CompatPairTuple cpt (12345U, "string");
- PairTuple pt;
+ std::tuple<unsigned, String> cpt (12345U, "string");
+ std::tuple<long, const char*> pt;
pt = cpt;
test (__LINE__, pt, 12345U, (const char*) "string");
char s [] = "string"; const UserDefined ud (i);
- CompatBigTuple cbt (int (true), int ('a'), short (i),
- 3.14159f, s, ud);
- BigTuple bt;
+ std::tuple<int, int, short, float, char*, UserDefined>
+ cbt (int (true), int ('a'), short (i), 3.14159f, s, ud);
+ std::tuple<bool, char, int, double, void*, UserDefined> bt;
UserDefined::reset ();
bt = cbt; ++UserDefined::expect.copy_asgn;
test (__LINE__, bt, true, 'a', i, 3.14159f, s, ud);
@@ -549,20 +563,21 @@
int i = std::rand () % CHAR_MAX;
- CompatIntTuple cit (i);
- IntTuple it;
+ std::tuple<char> cit (i);
+ std::tuple<int> it;
it = std::move (cit);
test (__LINE__, it, i);
- CompatPairTuple cpt (12345U, "string");
- PairTuple pt;
+ std::tuple<unsigned, String> cpt (12345U, "string");
+ std::tuple<long, const char*> pt;
pt = std::move (cpt);
test (__LINE__, pt, 12345U, (const char*) "string");
char s [] = "string"; const UserDefined ud (i);
- CompatBigTuple cbt (int (true), int ('a'), short (i),
- 3.14159f, s, ud);
- BigTuple bt; ++UserDefined::expect.move_ctor;
+ std::tuple<int, int, short, float, char*, UserDefined>
+ cbt (int (true), int ('a'), short (i), 3.14159f, s, ud);
+ std::tuple<bool, char, int, double, void*, UserDefined> bt;
+ ++UserDefined::expect.move_ctor;
UserDefined::reset ();
bt = std::move (cbt); ++UserDefined::expect.move_asgn;
test (__LINE__, bt, true, 'a', i, 3.14159f, s, ud);
@@ -570,8 +585,6 @@
/**************************************************************************/
-#include <rw_allocator.h> // for UserAlloc
-
static void
test_alloc_ctors ()
{
Modified: stdcxx/branches/4.3.x/tests/utilities/20.tuple.creation.cpp
URL: http://svn.apache.org/viewvc/stdcxx/branches/4.3.x/tests/utilities/20.tuple.creation.cpp?rev=677985&r1=677984&r2=677985&view=diff
==============================================================================
--- stdcxx/branches/4.3.x/tests/utilities/20.tuple.creation.cpp (original)
+++ stdcxx/branches/4.3.x/tests/utilities/20.tuple.creation.cpp Fri Jul 18 11:05:55 2008
@@ -46,17 +46,15 @@
{
rw_info (0, __FILE__, __LINE__, "make_tuple");
- IntTuple it1 = std::make_tuple (1);
+ std::tuple<int> it1 = std::make_tuple (1);
- typedef std::tuple<int, int> IntTuple2;
int i = 2;
- IntTuple2 it2 = std::make_tuple (1, i);
+ std::tuple<int, int> it2 = std::make_tuple (1, i);
- typedef std::tuple<int, int, int> IntTuple3;
const int j = 3;
- IntTuple3 it3 = std::make_tuple (1, i, j);
+ std::tuple<int, int, int> it3 = std::make_tuple (1, i, j);
- IntRefTuple rt1 = std::make_tuple (std::ref (i));
+ std::tuple<int&> rt1 = std::make_tuple (std::ref (i));
std::tuple<const int&> rt2 = std::make_tuple (std::cref (i));
}
@@ -89,16 +87,17 @@
{
rw_info (0, __FILE__, __LINE__, "tuple_cat");
-#define Big1stPart bool, char, int, double
-#define Big2ndPart void*, UserDefined
+#define FirstHalf bool, char, int, double
+#define SecondHalf void*, UserDefined
- typedef std::tuple<Big1stPart> Big1stTuple;
- Big1stTuple bt1 (true, 'a', 256, 3.14159);
+ typedef std::tuple<FirstHalf> FirstTuple;
+ FirstTuple t1 (true, 'a', 256, 3.14159);
- typedef std::tuple<Big2ndPart> Big2ndTuple;
- Big2ndTuple bt2 (&bt1, UserDefined ());
+ typedef std::tuple<SecondHalf> SecondTuple;
+ SecondTuple t2 (&t1, UserDefined ());
- //BigTuple bt (tuple_cat (bt1, bt2));
+ typedef std::tuple<FirstHalf, SecondHalf> WholeTuple;
+ //WholeTuple t3 (tuple_cat (t1, t2));
}
/**************************************************************************/
Modified: stdcxx/branches/4.3.x/tests/utilities/20.tuple.elem.cpp
URL: http://svn.apache.org/viewvc/stdcxx/branches/4.3.x/tests/utilities/20.tuple.elem.cpp?rev=677985&r1=677984&r2=677985&view=diff
==============================================================================
--- stdcxx/branches/4.3.x/tests/utilities/20.tuple.elem.cpp (original)
+++ stdcxx/branches/4.3.x/tests/utilities/20.tuple.elem.cpp Fri Jul 18 11:05:55 2008
@@ -11,7 +11,7 @@
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
+ * except in compliance with the License. You may otain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
@@ -50,91 +50,93 @@
static void* ptr_val;
static UserDefined user_val;
+typedef std::tuple<bool, char, int, double, void*, UserDefined> Tuple;
+
static void
-test_const_get (const BigTuple& bt)
+test_const_get (const Tuple& t)
{
rw_info (0, __FILE__, __LINE__, "get (const)");
- const bool& b = std::get<0> (bt);
- rw_assert (b == BOOL_VAL, __FILE__, __LINE__, "get<0>(bt), got %s, "
+ const bool& b = std::get<0> (t);
+ rw_assert (b == BOOL_VAL, __FILE__, __LINE__, "get<0>(t), got %s, "
"expected %s", b? "true": "false", BOOL_VAL? "true": "false");
- const char& c = std::get<1> (bt);
+ const char& c = std::get<1> (t);
rw_assert (c == CHAR_VAL, __FILE__, __LINE__,
- "get<1>(bt), got \'%c\', expected \'%c\'", c, CHAR_VAL);
+ "get<1>(t), got \'%c\', expected \'%c\'", c, CHAR_VAL);
- const int& i = std::get<2> (bt);
+ const int& i = std::get<2> (t);
rw_assert (i == INT_VAL, __FILE__, __LINE__,
- "get<2>(bt), got %d, expected %d", i, INT_VAL);
+ "get<2>(t), got %d, expected %d", i, INT_VAL);
- const double& d = std::get<3> (bt);
+ const double& d = std::get<3> (t);
rw_assert (0 == rw_dblcmp (d, DBL_VAL), __FILE__, __LINE__,
- "get<3>(bt), got %f, expected %f", d, DBL_VAL);
+ "get<3>(t), got %f, expected %f", d, DBL_VAL);
- void* const& p = std::get<4> (bt);
+ void* const& p = std::get<4> (t);
rw_assert (p == PTR_VAL, __FILE__, __LINE__,
- "get<4>(bt), got %p, expected %p", p, PTR_VAL);
+ "get<4>(t), got %p, expected %p", p, PTR_VAL);
- const UserDefined& uc = std::get<5> (bt);
+ const UserDefined& uc = std::get<5> (t);
rw_assert (uc == USER_VAL, __FILE__, __LINE__,
- "get<5>(bt), got %d, expected %d",
+ "get<5>(t), got %d, expected %d",
uc.value (), USER_VAL.value ());
}
/**************************************************************************/
static void
-test_get (BigTuple& bt)
+test_get (Tuple& t)
{
rw_info (0, __FILE__, __LINE__, "get");
- bool& b = std::get<0> (bt);
+ bool& b = std::get<0> (t);
rw_assert (b == BOOL_VAL, __FILE__, __LINE__,
- "get<0>(bt), got %d, expected %b", b, BOOL_VAL);
+ "get<0>(t), got %d, expected %b", b, BOOL_VAL);
b = !BOOL_VAL;
- rw_assert (std::get<0> (bt) == !BOOL_VAL, __FILE__, __LINE__,
- "get<0>(bt), got %d, expected %b", std::get<0> (bt),
+ rw_assert (std::get<0> (t) == !BOOL_VAL, __FILE__, __LINE__,
+ "get<0>(t), got %d, expected %b", std::get<0> (t),
!BOOL_VAL);
- char& c = std::get<1> (bt);
+ char& c = std::get<1> (t);
rw_assert (c == 'a', __FILE__, __LINE__,
- "get<1>(bt), got %c, expected \'%c\'", c, CHAR_VAL);
+ "get<1>(t), got %c, expected \'%c\'", c, CHAR_VAL);
c = '1';
- rw_assert (std::get<1> (bt) == '1', __FILE__, __LINE__,
- "get<1>(bt), got %c, expected \'1\'", std::get<1> (bt));
+ rw_assert (std::get<1> (t) == '1', __FILE__, __LINE__,
+ "get<1>(t), got %c, expected \'1\'", std::get<1> (t));
- int& i = std::get<2> (bt);
+ int& i = std::get<2> (t);
rw_assert (i == INT_VAL, __FILE__, __LINE__,
- "get<2>(bt), got %d, expected %d", i, INT_VAL);
+ "get<2>(t), got %d, expected %d", i, INT_VAL);
i = INT_VAL+1;
- rw_assert (std::get<2> (bt) == INT_VAL+1, __FILE__, __LINE__,
- "get<1>(bt), got %d, expected %d", std::get<2> (bt),
+ rw_assert (std::get<2> (t) == INT_VAL+1, __FILE__, __LINE__,
+ "get<1>(t), got %d, expected %d", std::get<2> (t),
INT_VAL+1);
- double& d = std::get<3> (bt);
+ double& d = std::get<3> (t);
rw_assert (0 == rw_dblcmp (d, DBL_VAL), __FILE__, __LINE__,
- "get<3>(bt), got %f, expected %f", d, DBL_VAL);
+ "get<3>(t), got %f, expected %f", d, DBL_VAL);
d = DBL_VAL*DBL_VAL;
- rw_assert (0 == rw_dblcmp (std::get<3> (bt), DBL_VAL*DBL_VAL),
+ rw_assert (0 == rw_dblcmp (std::get<3> (t), DBL_VAL*DBL_VAL),
__FILE__, __LINE__,
- "get<3>(bt), got %f, expected %f", std::get<3> (bt),
+ "get<3>(t), got %f, expected %f", std::get<3> (t),
DBL_VAL*DBL_VAL);
- void* p = std::get<4> (bt);
+ void* p = std::get<4> (t);
rw_assert (p == PTR_VAL, __FILE__, __LINE__,
- "get<4>(bt), got %p, expected %p", p, PTR_VAL);
+ "get<4>(t), got %p, expected %p", p, PTR_VAL);
p = &d;
- rw_assert (std::get<4> (bt) == &d, __FILE__, __LINE__,
- "get<4>(bt), got %p, expected %p", std::get<4> (bt), &d);
+ rw_assert (std::get<4> (t) == &d, __FILE__, __LINE__,
+ "get<4>(t), got %p, expected %p", std::get<4> (t), &d);
- UserDefined& uc = std::get<5> (bt);
+ UserDefined& uc = std::get<5> (t);
rw_assert (uc == USER_VAL, __FILE__, __LINE__,
- "get<5>(bt), got %d, expected %d",
+ "get<5>(t), got %d, expected %d",
uc.value (), USER_VAL.value ());
uc = UserDefined (INT_VAL);
- rw_assert ((std::get<5> (bt)).value () == INT_VAL, __FILE__, __LINE__,
- "get<5>(bt), got %d, expected %d",
- (std::get<5> (bt)).value (), INT_VAL);
+ rw_assert ((std::get<5> (t)).value () == INT_VAL, __FILE__, __LINE__,
+ "get<5>(t), got %d, expected %d",
+ (std::get<5> (t)).value (), INT_VAL);
}
/**************************************************************************/
@@ -143,10 +145,10 @@
run_test (int /*argc*/, char* argv [])
{
ptr_val = static_cast<void*> (argv [0]);
- BigTuple bt (BOOL_VAL, CHAR_VAL, INT_VAL, DBL_VAL, PTR_VAL, USER_VAL);
+ Tuple t (BOOL_VAL, CHAR_VAL, INT_VAL, DBL_VAL, PTR_VAL, USER_VAL);
- test_const_get (bt);
- test_get (bt);
+ test_const_get (t);
+ test_get (t);
return 0;
}
Modified: stdcxx/branches/4.3.x/tests/utilities/20.tuple.h
URL: http://svn.apache.org/viewvc/stdcxx/branches/4.3.x/tests/utilities/20.tuple.h?rev=677985&r1=677984&r2=677985&view=diff
==============================================================================
--- stdcxx/branches/4.3.x/tests/utilities/20.tuple.h (original)
+++ stdcxx/branches/4.3.x/tests/utilities/20.tuple.h Fri Jul 18 11:05:55 2008
@@ -155,35 +155,8 @@
return lhs.value () < rhs.value ();
}
-inline std::ostream&
-operator< (std::ostream& os, const UserDefined& src)
-{
- os << "UserDefined@" << &src << " [value_ = " << src.value () << "]";
- return os;
-}
-
/**************************************************************************/
-// various tuple types for test purposes
-
-typedef std::tuple <> EmptyTuple;
-
-typedef std::tuple <int> IntTuple;
-typedef std::tuple <const int> ConstIntTuple;
-typedef std::tuple <int&> IntRefTuple;
-
-typedef std::tuple <IntTuple> NestedTuple;
-
-typedef std::tuple <long, const char*> PairTuple;
-
-typedef std::tuple <UserDefined> UserTuple;
-
-#define BIG_TYPES bool, char, int, double, void*, UserDefined
-#define BIG_SIZE 6
-
-typedef std::tuple <BIG_TYPES> BigTuple;
-
-
// tuple names
template <class T>
@@ -208,8 +181,8 @@
TYPE_NAME (TUPLE, "std::tuple<long, const char*>")
#undef TUPLE
-#define TUPLE std::tuple<BIG_TYPES>
-// should use BIG_TYPES in string if possible
+#define TUPLE \
+std::tuple<bool, char, int, double, void*, UserDefined>
TYPE_NAME (TUPLE, "std::tuple<bool, char, int, double, void*, " \
"UserDefined>")
Modified: stdcxx/branches/4.3.x/tests/utilities/20.tuple.helpers.cpp
URL: http://svn.apache.org/viewvc/stdcxx/branches/4.3.x/tests/utilities/20.tuple.helpers.cpp?rev=677985&r1=677984&r2=677985&view=diff
==============================================================================
--- stdcxx/branches/4.3.x/tests/utilities/20.tuple.helpers.cpp (original)
+++ stdcxx/branches/4.3.x/tests/utilities/20.tuple.helpers.cpp Fri Jul 18 11:05:55 2008
@@ -49,16 +49,22 @@
"tuple_size<" #T ">::value, got %d, expected " \
STRING (S), std::tuple_size<T>::value)
- TEST (EmptyTuple, 0);
+ TEST (std::tuple<>, 0);
- TEST (IntTuple, 1);
- TEST (ConstIntTuple, 1);
- TEST (UserTuple, 1);
- TEST (NestedTuple, 1);
+ TEST (std::tuple<int>, 1);
+ TEST (std::tuple<const int>, 1);
+ TEST (std::tuple<UserDefined>, 1);
+ TEST (std::tuple<std::tuple<int> >, 1);
- TEST (PairTuple, 2);
+#undef TUPLE
+#define TUPLE std::tuple<long, const char*>
- TEST (BigTuple, BIG_SIZE);
+ TEST (TUPLE, 2);
+
+#undef TUPLE
+#define TUPLE std::tuple<bool, char, int, double, void*, UserDefined>
+
+ TEST (TUPLE, 6);
}
/**************************************************************************/
@@ -106,32 +112,43 @@
{
rw_info (0, __FILE__, __LINE__, "tuple_element");
+#undef IS_SAME
#define IS_SAME(T,U) \
_RW::__rw_is_same<T, U>::value
+
+#undef TYPE_NAME
#define TYPE_NAME(T) \
(any_t (T ())).type_name ()
#undef TEST
#define TEST(N, T, E) \
- typedef std::tuple_element<N, T>::type T ## N; \
- rw_assert (IS_SAME(T ## N, E), __FILE__, __LINE__, \
+{ \
+ typedef std::tuple_element<N, T>::type elem_type; \
+ rw_assert (IS_SAME(elem_type, E), __FILE__, __LINE__, \
"tuple_element<0, " #T ">::type, got type \"%s\", " \
- "expected type \"" #E "\"", TYPE_NAME (T##N))
+ "expected type \"" #E "\"", TYPE_NAME (elem_type)); \
+}
- TEST (0, IntTuple, int);
- TEST (0, ConstIntTuple, const int);
- TEST (0, NestedTuple, std::tuple<int>);
- TEST (0, UserTuple, UserDefined);
-
- TEST (0, PairTuple, long);
- TEST (1, PairTuple, const char*);
-
- TEST (0, BigTuple, bool);
- TEST (1, BigTuple, char);
- TEST (2, BigTuple, int);
- TEST (3, BigTuple, double);
- TEST (4, BigTuple, void*);
- TEST (5, BigTuple, UserDefined);
+ TEST (0, std::tuple<int>, int)
+ TEST (0, std::tuple<const int>, const int)
+ TEST (0, std::tuple<std::tuple<int> >, std::tuple<int>)
+ TEST (0, std::tuple<UserDefined>, UserDefined)
+
+#undef TUPLE
+#define TUPLE std::tuple<long, const char*>
+
+ TEST (0, TUPLE, long)
+ TEST (1, TUPLE, const char*)
+
+#undef TUPLE
+#define TUPLE std::tuple<bool, char, int, double, void*, UserDefined>
+
+ TEST (0, TUPLE, bool)
+ TEST (1, TUPLE, char)
+ TEST (2, TUPLE, int)
+ TEST (3, TUPLE, double)
+ TEST (4, TUPLE, void*)
+ TEST (5, TUPLE, UserDefined)
}
/**************************************************************************/
Modified: stdcxx/branches/4.3.x/tests/utilities/20.tuple.rel.cpp
URL: http://svn.apache.org/viewvc/stdcxx/branches/4.3.x/tests/utilities/20.tuple.rel.cpp?rev=677985&r1=677984&r2=677985&view=diff
==============================================================================
--- stdcxx/branches/4.3.x/tests/utilities/20.tuple.rel.cpp (original)
+++ stdcxx/branches/4.3.x/tests/utilities/20.tuple.rel.cpp Fri Jul 18 11:05:55 2008
@@ -43,31 +43,36 @@
{
rw_info (0, __FILE__, __LINE__, "operator==");
- EmptyTuple nt1, nt2;
+ std::tuple<> nt1, nt2;
+ // special case
rw_assert (nt1 == nt1, __FILE__, __LINE__,
"nt1 == nt1, got false, expected true");
- rw_assert (nt1 == nt2, __FILE__, __LINE__,
- "nt1 == nt2, got true, expected false");
- IntTuple it1 (1), it2 (1);
- rw_assert (it1 == it1, __FILE__, __LINE__,
- "it1 == it1, got false, expected true");
- rw_assert (it1 == it2, __FILE__, __LINE__,
- "it1 == it2, got false, expected true");
-
- UserDefined ud;
- UserTuple ut1 (ud), ut2 (ud);
- rw_assert (ut1 == ut1, __FILE__, __LINE__,
- "ut1 == ut1, got false, expected true");
- rw_assert (ut1 == ut2, __FILE__, __LINE__,
- "ut1 == ut2, got false, expected true");
-
- BigTuple bt1 (true, 'a', 256, 3.14159, &nt1, ud);
- BigTuple bt2 (true, 'a', 256, 3.14159, &nt1, ud);
- rw_assert (bt1 == bt1, __FILE__, __LINE__,
- "bt1 == bt1, got false, expected true");
- rw_assert (bt1 == bt2, __FILE__, __LINE__,
- "bt1 == bt2, got false, expected true");
+#undef TEST
+#define TEST(expr) \
+ rw_assert (expr, __FILE__, __LINE__, #expr \
+ "; got %b, expected %b", !(expr), expr)
+
+ TEST (nt1 == nt2);
+
+ std::tuple<int> it1 (1), it2 (1), it3 (2);
+ TEST (it1 == it1);
+ TEST (it1 == it2);
+ TEST (!(it1 == it3));
+
+ UserDefined ud1 (1), ud2 (2);
+ std::tuple<UserDefined> ut1 (ud1), ut2 (ud1), ut3 (ud2);
+ TEST (ut1 == ut1);
+ TEST (ut1 == ut2);
+ TEST (!(ut1 == ut3));
+
+ std::tuple<bool, char, int, double, void*, UserDefined>
+ bt1 (true, 'a', 255, 3.14159, &nt1, ud1),
+ bt2 (true, 'a', 255, 3.14159, &nt1, ud1),
+ bt3 (true, 'a', 256, 3.14159, &nt1, ud1);
+ TEST (bt1 == bt1);
+ TEST (bt1 == bt2);
+ TEST (!(bt1 == bt3));
}
/**************************************************************************/
@@ -77,25 +82,36 @@
{
rw_info (0, __FILE__, __LINE__, "operator<");
- EmptyTuple nt1, nt2;
- rw_assert (!(nt1 < nt1), __FILE__, __LINE__,
- "nt1 < nt1, got true, expected false");
- rw_assert (!(nt1 < nt2), __FILE__, __LINE__,
- "nt1 < nt2, got true, expected false");
-
- IntTuple it1 (1), it2 (2);
- rw_assert (it1 < it2, __FILE__, __LINE__,
- "it1 < it2, got false, expected true");
+ std::tuple<> nt1, nt2;
+ TEST (!(nt1 < nt1));
+ TEST (!(nt1 < nt2));
+
+ std::tuple<int> it1 (1), it2 (2);
+ TEST (!(it1 < it1));
+ TEST (it1 < it2);
UserDefined ud1 (1), ud2 (2);
- UserTuple ut1 (ud1), ut2 (ud2);
- rw_assert (ut1 < ut2, __FILE__, __LINE__,
- "ut1 < ut2, got false, expected true");
-
- BigTuple bt1 (true, 'a', 255, 3.14159, &nt1, ud1);
- BigTuple bt2 (true, 'a', 256, 3.14159, &nt1, ud1);
+ std::tuple<UserDefined> ut1 (ud1), ut2 (ud2);
+ TEST (!(ut1 < ut1));
+ TEST (ut1 < ut2);
+
+ std::tuple<long, const char*> pt1 (1234L, "string");
+ TEST (!(pt1 < pt1));
+ std::tuple<long, const char*> pt2 (1235L, "string");
+ TEST (pt1 < pt2);
+ std::tuple<long, const char*> pt3 (1234L, "strings");
+ TEST (pt1 < pt3);
+
+ std::tuple<bool, char, int, double, void*, UserDefined>
+ bt1 (true, 'a', 255, 3.14159, &nt1, ud1),
+ bt2 (true, 'a', 256, 3.14159, &nt1, ud1),
+ bt3 (true, 'a', 255, 3.14159, &nt1, ud2);
+ rw_assert (!(bt1 < bt1), __FILE__, __LINE__,
+ "bt1 < bt1, got true, expected false");
rw_assert (bt1 < bt2, __FILE__, __LINE__,
"bt1 < bt2, got false, expected true");
+ rw_assert (bt1 < bt3, __FILE__, __LINE__,
+ "bt1 < bt3, got false, expected true");
}
/**************************************************************************/