[multiple changes]

2004-10-25  Benjamin Kosnik  <bkoz@redhat.com>

	* include/Makefile.am (tr1_headers): Add tuple.
	* include/Makefile.in: Regenerate.

2004-10-25  Chris Jefferson  <chris@bubblescope.net>

        * include/tr1/tuple: Implementation of tuple from library TR.
	* testsuite/tr1/6_containers/tuple/tuple_element.cc: New.
	* testsuite/tr1/6_containers/tuple/tuple_size.cc: New.
	* testsuite/tr1/6_containers/tuple/comparison_operators/comparisons.cc:
	New.
	* testsuite/tr1/6_containers/tuple/cons/assignment.cc: New.
	* testsuite/tr1/6_containers/tuple/cons/big_tuples.cc: New.
	* testsuite/tr1/6_containers/tuple/cons/constructor.cc: New.
	* testsuite/tr1/6_containers/tuple/creation_functions/make_tuple.cc:
	New.
	* testsuite/tr1/6_containers/tuple/creation_functions/tie.cc: New.
	* testsuite/tr1/6_containers/tuple/element_access/get.cc: New.

From-SVN: r89548
This commit is contained in:
Benjamin Kosnik 2004-10-25 19:05:58 +00:00
parent 08a692679f
commit a520f0b0ae
13 changed files with 2027 additions and 2 deletions

View File

@ -1,3 +1,23 @@
2004-10-25 Benjamin Kosnik <bkoz@redhat.com>
* include/Makefile.am (tr1_headers): Add tuple.
* include/Makefile.in: Regenerate.
2004-10-25 Chris Jefferson <chris@bubblescope.net>
* include/tr1/tuple: Implementation of tuple from library TR.
* testsuite/tr1/6_containers/tuple/tuple_element.cc: New.
* testsuite/tr1/6_containers/tuple/tuple_size.cc: New.
* testsuite/tr1/6_containers/tuple/comparison_operators/comparisons.cc:
New.
* testsuite/tr1/6_containers/tuple/cons/assignment.cc: New.
* testsuite/tr1/6_containers/tuple/cons/big_tuples.cc: New.
* testsuite/tr1/6_containers/tuple/cons/constructor.cc: New.
* testsuite/tr1/6_containers/tuple/creation_functions/make_tuple.cc:
New.
* testsuite/tr1/6_containers/tuple/creation_functions/tie.cc: New.
* testsuite/tr1/6_containers/tuple/element_access/get.cc: New.
2004-10-25 Paolo Carlini <pcarlini@suse.de>
* include/bits/basic_string.h (_Rep::_M_is_safe): Move to

View File

@ -228,7 +228,8 @@ ext_headers = \
tr1_srcdir = ${glibcxx_srcdir}/include/tr1
tr1_builddir = ./tr1
tr1_headers = \
${tr1_srcdir}/array
${tr1_srcdir}/array \
${tr1_srcdir}/tuple
# This is the common subset of files that all three "C" header models use.
c_base_srcdir = $(C_INCLUDE_DIR)

View File

@ -445,7 +445,8 @@ ext_headers = \
tr1_srcdir = ${glibcxx_srcdir}/include/tr1
tr1_builddir = ./tr1
tr1_headers = \
${tr1_srcdir}/array
${tr1_srcdir}/array \
${tr1_srcdir}/tuple
# This is the common subset of files that all three "C" header models use.

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,50 @@
// 2004-09-23 Chris Jefferson <chris@bubblescope.net>
// Copyright (C) 2004 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the
// Free Software Foundation; either version 2, or (at your option)
// any later version.
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License along
// with this library; see the file COPYING. If not, write to the Free
// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
// USA.
// Tuple
#include <tr1/tuple>
#include <testsuite_hooks.h>
using namespace std;
using namespace tr1;
#define TEST1(x) VERIFY( x == x && !(x != x) && x <= x && !(x < x) )
int
main()
{
int i=0;
int j=0;
int k=2;
tuple<int, int, int> a(0, 0, 0);
tuple<int, int, int> b(0, 0, 1);
tuple<int& , int& , int&> c(i,j,k);
tuple<const int&, const int&, const int&> d(c);
TEST1(a);
TEST1(b);
TEST1(c);
TEST1(d);
VERIFY(!(a > a) && !(b > b));
VERIFY(a >= a && b >= b);
VERIFY(a < b && !(b < a) && a <= b && !(b <= a));
VERIFY(b > a && !(a > b) && b >= a && !(a >= b));
}

View File

@ -0,0 +1,53 @@
// 2004-09-23 Chris Jefferson <chris@bubblescope.net>
// Copyright (C) 2004 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the
// Free Software Foundation; either version 2, or (at your option)
// any later version.
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License along
// with this library; see the file COPYING. If not, write to the Free
// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
// USA.
// Tuple
#include <tr1/tuple>
#include <testsuite_hooks.h>
using namespace std;
using namespace tr1;
int
main()
{
tuple<> ta;
tuple<> tb;
ta = tb;
tuple<int> tc(1);
tuple<int> td(0);
td = tc;
VERIFY(get<0>(td) == 1);
int i=0;
tuple<int&> te(i);
te = tc;
VERIFY(i == 1);
tuple<const int&> tf(tc);
get<0>(tc) = 2;
VERIFY(get<0>(tf) == 2);
tuple<double> tg;
tg = tc;
}

View File

@ -0,0 +1,106 @@
// 2004-09-23 Chris Jefferson <chris@bubblescope.net>
// Copyright (C) 2004 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the
// Free Software Foundation; either version 2, or (at your option)
// any later version.
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License along
// with this library; see the file COPYING. If not, write to the Free
// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
// USA.
// Tuple
#include <tr1/tuple>
#include <testsuite_hooks.h>
using namespace std;
using namespace tr1;
// A simple class without conversions to check some things
struct foo
{ };
void
test_constructors()
{
int x1=0,x2=0;
const int &z1=x1;
// Test empty constructor
tuple<> ta;
tuple<int,int> tb;
// Test construction from values
tuple<int,int> tc(x1,x2);
tuple<int,int&> td(x1,x2);
tuple<const int&> te(z1);
x1=1;
x2=1;
VERIFY(get<0>(td) == 0 && get<1>(td) == 1 && get<0>(te) == 1);
// Test identical tuple copy constructor
tuple<int,int> tf(tc);
tuple<int,int> tg(td);
tuple<const int&> th(te);
// Test different tuple copy constructor
tuple<int,double> ti(tc);
tuple<int,double> tj(td);
// Test constructing from a pair
pair<int,int> pair1(1,1);
const pair<int,int> pair2(pair1);
tuple<int,int> tl(pair1);
tuple<int,const int&> tm(pair1);
tuple<int,int> tn(pair2);
tuple<int,const int&> to(pair2);
}
int
main(void)
{
//test construction
typedef tuple<int,int,int,int,int,int,int,int,int,int> type1;
type1 a(0, 0, 0, 0, 0, 0, 0, 0, 0, 1);
type1 b(0, 0, 0, 0, 0, 0, 0, 0, 0, 2);
type1 c(a);
typedef tuple<int,int,int,int,int,int,int,int,int,char> type2;
type2 d(0, 0, 0, 0, 0, 0, 0, 0, 0, 3);
type1 e(d);
typedef tuple<foo,int,int,int,int,int,int,int,int,foo> type3;
// get
VERIFY(get<9>(a)==1 && get<9>(b)==2);
// comparisons
VERIFY(a==a && !(a!=a) && a<=a && a>=a && !(a<a) && !(a>a));
VERIFY(!(a==b) && a!=b && a<=b && a<b && !(a>=b) && !(a>b));
//tie
{
int i = 0;
tie(ignore, ignore, ignore, ignore, ignore, ignore, ignore, ignore,
ignore, i) = a;
VERIFY(i == 1);
}
//test_assignment
a=d;
a=b;
//make_tuple
make_tuple(0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
//tuple_size
VERIFY(tuple_size<type3>::value == 10);
//tuple_element
{
foo q1;
tuple_element<0,type3>::type q2(q1);
tuple_element<9,type3>::type q3(q1);
}
}

View File

@ -0,0 +1,65 @@
// 2004-09-23 Chris Jefferson <chris@bubblescope.net>
// Copyright (C) 2004 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the
// Free Software Foundation; either version 2, or (at your option)
// any later version.
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License along
// with this library; see the file COPYING. If not, write to the Free
// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
// USA.
// Tuple
#include <tr1/tuple>
#include <testsuite_hooks.h>
using namespace std;
using namespace tr1;
int
main()
{
int x1=0,x2=0;
const int &z1=x1;
// Test empty constructor
tuple<> ta;
tuple<int,int> tb;
// Test construction from values
tuple<int,int> tc(x1,x2);
tuple<int,int&> td(x1,x2);
tuple<const int&> te(z1);
x1=1;
x2=1;
VERIFY(get<0>(td) == 0 && get<1>(td) == 1 && get<0>(te) == 1);
// Test identical tuple copy constructor
tuple<int,int> tf(tc);
tuple<int,int> tg(td);
tuple<const int&> th(te);
// Test different tuple copy constructor
tuple<int,double> ti(tc);
tuple<int,double> tj(td);
//tuple<int&, int&> tk(tc);
tuple<const int&, const int&> tl(tc);
tuple<const int&, const int&> tm(tl);
// Test constructing from a pair
pair<int,int> pair1(1,1);
const pair<int,int> pair2(pair1);
tuple<int,int> tn(pair1);
tuple<int,const int&> to(pair1);
tuple<int,int> tp(pair2);
tuple<int,const int&> tq(pair2);
return 0;
}

View File

@ -0,0 +1,37 @@
// 2004-09-23 Chris Jefferson <chris@bubblescope.net>
// Copyright (C) 2004 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the
// Free Software Foundation; either version 2, or (at your option)
// any later version.
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License along
// with this library; see the file COPYING. If not, write to the Free
// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
// USA.
// Tuple
#include <tr1/tuple>
#include <testsuite_hooks.h>
using namespace std;
using namespace tr1;
int
main()
{
int i=0;
make_tuple(1,2,4.0);
make_tuple(ref(i)) = tuple<int>(1);
VERIFY(i == 1);
}

View File

@ -0,0 +1,43 @@
// 2004-09-23 Chris Jefferson <chris@bubblescope.net>
// Copyright (C) 2004 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the
// Free Software Foundation; either version 2, or (at your option)
// any later version.
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License along
// with this library; see the file COPYING. If not, write to the Free
// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
// USA.
// Tuple
#include <tr1/tuple>
#include <testsuite_hooks.h>
using namespace std;
using namespace tr1;
int
main()
{
int x1 = 0;
int x2 = 0;
int y1 = 0;
int y2 = 0;
tuple<int,int> ta(1,1);
tuple<const int&,const int&> tc(x1,x2);
tie(y1,y2)=ta;
VERIFY(y1 == 1 && y2 == 1);
tie(y1,y2)=tc;
VERIFY(y1 == 0 && y2 == 0);
}

View File

@ -0,0 +1,45 @@
// 2004-09-23 Chris Jefferson <chris@bubblescope.net>
// Copyright (C) 2004 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the
// Free Software Foundation; either version 2, or (at your option)
// any later version.
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License along
// with this library; see the file COPYING. If not, write to the Free
// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
// USA.
// Tuple
#include <tr1/tuple>
#include <testsuite_hooks.h>
using namespace std;
using namespace tr1;
int
main()
{
int j=1;
const int k=2;
tuple<int,int &,const int&> a(0,j,k);
const tuple<int,int &,const int&> b(1,j,k);
VERIFY(get<0>(a)==0 && get<1>(a)==1 && get<2>(a)==2);
get<0>(a)=3;
get<1>(a)=4;
VERIFY(get<0>(a)==3 && get<1>(a)==4);
VERIFY(j==4);
get<1>(b)=5;
VERIFY(get<0>(b)==1 && get<1>(b)==5 && get<2>(b)==2);
VERIFY(j==5);
}

View File

@ -0,0 +1,41 @@
// 2004-09-23 Chris Jefferson <chris@bubblescope.net>
// Copyright (C) 2004 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the
// Free Software Foundation; either version 2, or (at your option)
// any later version.
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License along
// with this library; see the file COPYING. If not, write to the Free
// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
// USA.
// Tuple
#include <tr1/tuple>
#include <testsuite_hooks.h>
using namespace std;
using namespace tr1;
struct foo
{ };
int
main()
{
// As foo isn't constructable from anything else, this
// lets us check if type is returning foo when it should
foo q1;
tuple_element<0,tuple<foo,void,int> >::type q2(q1);
tuple_element<2,tuple<void,int,foo> >::type q3(q1);
}

View File

@ -0,0 +1,39 @@
// 2004-09-23 Chris Jefferson <chris@bubblescope.net>
// Copyright (C) 2004 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the
// Free Software Foundation; either version 2, or (at your option)
// any later version.
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License along
// with this library; see the file COPYING. If not, write to the Free
// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
// USA.
// Tuple
#include <tr1/tuple>
#include <testsuite_hooks.h>
using namespace std;
using namespace tr1;
int
main()
{
VERIFY(tuple_size<tuple<> >::value == 0);
VERIFY(tuple_size<tuple<int> >::value == 1);
VERIFY(tuple_size<tuple<void> >::value == 1);
typedef tuple<int,const int&,void> test_tuple1;
VERIFY(tuple_size<test_tuple1>::value == 3);
VERIFY(tuple_size<tuple<tuple<void> > >::value == 1);
}