summaryrefslogtreecommitdiff
path: root/libstdc++-v3/testsuite/20_util/tuple/creation_functions
diff options
context:
space:
mode:
Diffstat (limited to 'libstdc++-v3/testsuite/20_util/tuple/creation_functions')
-rw-r--r--libstdc++-v3/testsuite/20_util/tuple/creation_functions/23978.cc45
-rw-r--r--libstdc++-v3/testsuite/20_util/tuple/creation_functions/48476.cc85
-rw-r--r--libstdc++-v3/testsuite/20_util/tuple/creation_functions/forward_as_tuple.cc72
-rw-r--r--libstdc++-v3/testsuite/20_util/tuple/creation_functions/make_tuple.cc37
-rw-r--r--libstdc++-v3/testsuite/20_util/tuple/creation_functions/tie.cc42
-rw-r--r--libstdc++-v3/testsuite/20_util/tuple/creation_functions/tie2.cc38
6 files changed, 319 insertions, 0 deletions
diff --git a/libstdc++-v3/testsuite/20_util/tuple/creation_functions/23978.cc b/libstdc++-v3/testsuite/20_util/tuple/creation_functions/23978.cc
new file mode 100644
index 000000000..7db57bc70
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/tuple/creation_functions/23978.cc
@@ -0,0 +1,45 @@
+// { dg-options "-std=gnu++0x" }
+//
+// Copyright (C) 2007, 2009 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 3, 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 COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// Tuple
+
+#include <tuple>
+#include <utility>
+#include <testsuite_hooks.h>
+
+using namespace std;
+
+// libstdc++/23978
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ pair<int, int> p(1, 2);
+ int x = 0;
+ int y = 0;
+ tie(x, y) = p;
+ VERIFY( x == 1 && y == 2 );
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/tuple/creation_functions/48476.cc b/libstdc++-v3/testsuite/20_util/tuple/creation_functions/48476.cc
new file mode 100644
index 000000000..1607e4552
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/tuple/creation_functions/48476.cc
@@ -0,0 +1,85 @@
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2011 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 3, 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 COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <tuple>
+#include <type_traits>
+#include <testsuite_hooks.h>
+
+template<typename T>
+ typename std::decay<T>::type copy(T&& x)
+ { return std::forward<T>(x); }
+
+template<typename... Args1, typename... Args2>
+ void
+ check_tuple_cat(std::tuple<Args1...> t1, std::tuple<Args2...> t2)
+ {
+ bool test __attribute__((unused)) = true;
+
+ typedef std::tuple<Args1..., Args2...> concatenated;
+
+ auto cat1 = std::tuple_cat( t1, t2 );
+ auto cat2 = std::tuple_cat(copy(t1), t2 );
+ auto cat3 = std::tuple_cat( t1, copy(t2));
+ auto cat4 = std::tuple_cat(copy(t1), copy(t2));
+
+ static_assert( std::is_same<decltype(cat1), concatenated>::value, "" );
+ static_assert( std::is_same<decltype(cat2), concatenated>::value, "" );
+ static_assert( std::is_same<decltype(cat3), concatenated>::value, "" );
+ static_assert( std::is_same<decltype(cat4), concatenated>::value, "" );
+
+ VERIFY( cat1 == cat2 );
+ VERIFY( cat1 == cat3 );
+ VERIFY( cat1 == cat4 );
+ }
+
+// libstdc++/48476
+void test01()
+{
+ int i = 0;
+ std::tuple<> t0;
+ std::tuple<int&> t1(i);
+ std::tuple<int&, int> t2(i, 0);
+ std::tuple<int const&, int, double> t3(i, 0, 0);
+
+ check_tuple_cat(t0, t0);
+ check_tuple_cat(t0, t1);
+ check_tuple_cat(t0, t2);
+ check_tuple_cat(t0, t3);
+
+ check_tuple_cat(t1, t0);
+ check_tuple_cat(t1, t1);
+ check_tuple_cat(t1, t2);
+ check_tuple_cat(t1, t3);
+
+ check_tuple_cat(t2, t0);
+ check_tuple_cat(t2, t1);
+ check_tuple_cat(t2, t2);
+ check_tuple_cat(t2, t3);
+
+ check_tuple_cat(t3, t0);
+ check_tuple_cat(t3, t1);
+ check_tuple_cat(t3, t2);
+ check_tuple_cat(t3, t3);
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/tuple/creation_functions/forward_as_tuple.cc b/libstdc++-v3/testsuite/20_util/tuple/creation_functions/forward_as_tuple.cc
new file mode 100644
index 000000000..bad4ad49c
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/tuple/creation_functions/forward_as_tuple.cc
@@ -0,0 +1,72 @@
+// { dg-options "-std=gnu++0x" }
+
+// 2010-04-30 Paolo Carlini <paolo.carlini@oracle.com>
+//
+// Copyright (C) 2010 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 3, 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 COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// Tuple
+
+#include <tuple>
+#include <type_traits>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ std::forward_as_tuple();
+
+ VERIFY( std::get<0>(std::forward_as_tuple(-1)) == -1 );
+ VERIFY( (std::is_same<decltype(std::forward_as_tuple(-1)),
+ std::tuple<int&&>>::value) );
+
+ const int i1 = 1;
+ const int i2 = 2;
+ const double d1 = 4.0;
+ auto t1 = std::forward_as_tuple(i1, i2, d1);
+ VERIFY( (std::is_same<decltype(t1), std::tuple<const int&,
+ const int&, const double&>>::value) );
+ VERIFY( std::get<0>(t1) == i1 );
+ VERIFY( std::get<1>(t1) == i2 );
+ VERIFY( std::get<2>(t1) == d1 );
+
+ typedef const int a_type1[3];
+ a_type1 a1 = { -1, 1, 2 };
+ auto t2 = std::forward_as_tuple(a1);
+ VERIFY( (std::is_same<decltype(t2), std::tuple<a_type1&>>::value) );
+ VERIFY( std::get<0>(t2)[0] == a1[0] );
+ VERIFY( std::get<0>(t2)[1] == a1[1] );
+ VERIFY( std::get<0>(t2)[2] == a1[2] );
+
+ typedef int a_type2[2];
+ a_type2 a2 = { 2, -2 };
+ volatile int i4 = 1;
+ auto t3 = std::forward_as_tuple(a2, i4);
+ VERIFY( (std::is_same<decltype(t3), std::tuple<a_type2&,
+ volatile int&>>::value) );
+ VERIFY( std::get<0>(t3)[0] == a2[0] );
+ VERIFY( std::get<0>(t3)[1] == a2[1] );
+ VERIFY( std::get<1>(t3) == i4 );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/tuple/creation_functions/make_tuple.cc b/libstdc++-v3/testsuite/20_util/tuple/creation_functions/make_tuple.cc
new file mode 100644
index 000000000..7521111fa
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/tuple/creation_functions/make_tuple.cc
@@ -0,0 +1,37 @@
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2007, 2009 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 3, 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 COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// Tuple
+
+#include <tuple>
+#include <functional>
+#include <testsuite_hooks.h>
+
+using namespace std;
+
+int
+main()
+{
+ bool test __attribute__((unused)) = true;
+
+ int i=0;
+ make_tuple(1,2,4.0);
+ make_tuple(ref(i)) = tuple<int>(1);
+ VERIFY(i == 1);
+}
diff --git a/libstdc++-v3/testsuite/20_util/tuple/creation_functions/tie.cc b/libstdc++-v3/testsuite/20_util/tuple/creation_functions/tie.cc
new file mode 100644
index 000000000..a76928979
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/tuple/creation_functions/tie.cc
@@ -0,0 +1,42 @@
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2007, 2009 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 3, 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 COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// Tuple
+
+#include <tuple>
+#include <testsuite_hooks.h>
+
+using namespace std;
+
+int
+main()
+{
+ bool test __attribute__((unused)) = true;
+
+ 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);
+}
diff --git a/libstdc++-v3/testsuite/20_util/tuple/creation_functions/tie2.cc b/libstdc++-v3/testsuite/20_util/tuple/creation_functions/tie2.cc
new file mode 100644
index 000000000..538c3e8e1
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/tuple/creation_functions/tie2.cc
@@ -0,0 +1,38 @@
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2007, 2009 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 3, 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 COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// Tuple
+
+#include <tuple>
+#include <string>
+#include <testsuite_hooks.h>
+
+int
+main()
+{
+ bool test __attribute__((unused)) = true;
+ using namespace std;
+
+ int i;
+ string s;
+
+ tie(i, ignore, s) = make_tuple(42, 3.14, "C++");
+ VERIFY( i == 42 );
+ VERIFY( s == "C++" );
+}