1// 2004-09-23 Chris Jefferson <chris@bubblescope.net> 2 3// Copyright (C) 2004 Free Software Foundation, Inc. 4// 5// This file is part of the GNU ISO C++ Library. This library is free 6// software; you can redistribute it and/or modify it under the 7// terms of the GNU General Public License as published by the 8// Free Software Foundation; either version 2, or (at your option) 9// any later version. 10 11// This library is distributed in the hope that it will be useful, 12// but WITHOUT ANY WARRANTY; without even the implied warranty of 13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14// GNU General Public License for more details. 15 16// You should have received a copy of the GNU General Public License along 17// with this library; see the file COPYING. If not, write to the Free 18// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 19// USA. 20 21// Tuple 22 23#include <tr1/tuple> 24#include <testsuite_hooks.h> 25 26using namespace std; 27using namespace tr1; 28 29// A simple class without conversions to check some things 30struct foo 31{ }; 32 33void 34test_constructors() 35{ 36 int x1=0,x2=0; 37 const int &z1=x1; 38 39 // Test empty constructor 40 tuple<> ta; 41 tuple<int,int> tb; 42 // Test construction from values 43 tuple<int,int> tc(x1,x2); 44 tuple<int,int&> td(x1,x2); 45 tuple<const int&> te(z1); 46 x1=1; 47 x2=1; 48 VERIFY(get<0>(td) == 0 && get<1>(td) == 1 && get<0>(te) == 1); 49 50 // Test identical tuple copy constructor 51 tuple<int,int> tf(tc); 52 tuple<int,int> tg(td); 53 tuple<const int&> th(te); 54 // Test different tuple copy constructor 55 tuple<int,double> ti(tc); 56 tuple<int,double> tj(td); 57 // Test constructing from a pair 58 pair<int,int> pair1(1,1); 59 const pair<int,int> pair2(pair1); 60 tuple<int,int> tl(pair1); 61 tuple<int,const int&> tm(pair1); 62 tuple<int,int> tn(pair2); 63 tuple<int,const int&> to(pair2); 64} 65 66int 67main(void) 68{ 69 //test construction 70 typedef tuple<int,int,int,int,int,int,int,int,int,int> type1; 71 type1 a(0, 0, 0, 0, 0, 0, 0, 0, 0, 1); 72 type1 b(0, 0, 0, 0, 0, 0, 0, 0, 0, 2); 73 type1 c(a); 74 typedef tuple<int,int,int,int,int,int,int,int,int,char> type2; 75 type2 d(0, 0, 0, 0, 0, 0, 0, 0, 0, 3); 76 type1 e(d); 77 typedef tuple<foo,int,int,int,int,int,int,int,int,foo> type3; 78 // get 79 VERIFY(get<9>(a)==1 && get<9>(b)==2); 80 // comparisons 81 VERIFY(a==a && !(a!=a) && a<=a && a>=a && !(a<a) && !(a>a)); 82 VERIFY(!(a==b) && a!=b && a<=b && a<b && !(a>=b) && !(a>b)); 83 //tie 84 { 85 int i = 0; 86 tie(ignore, ignore, ignore, ignore, ignore, ignore, ignore, ignore, 87 ignore, i) = a; 88 VERIFY(i == 1); 89 } 90 //test_assignment 91 a=d; 92 a=b; 93 //make_tuple 94 make_tuple(0, 0, 0, 0, 0, 0, 0, 0, 0, 0); 95 96 //tuple_size 97 VERIFY(tuple_size<type3>::value == 10); 98 //tuple_element 99 { 100 foo q1; 101 tuple_element<0,type3>::type q2(q1); 102 tuple_element<9,type3>::type q3(q1); 103 } 104 105} 106 107