Home | History | Annotate | Download | only in tuple.rel
      1 //===----------------------------------------------------------------------===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is dual licensed under the MIT and the University of Illinois Open
      6 // Source Licenses. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 
     10 // <tuple>
     11 
     12 // template <class... Types> class tuple;
     13 
     14 // template<class... TTypes, class... UTypes>
     15 //   bool
     16 //   operator==(const tuple<TTypes...>& t, const tuple<UTypes...>& u);
     17 
     18 // UNSUPPORTED: c++98, c++03
     19 
     20 #include <tuple>
     21 #include <string>
     22 #include <cassert>
     23 
     24 #include "test_macros.h"
     25 
     26 int main()
     27 {
     28     {
     29         typedef std::tuple<> T1;
     30         typedef std::tuple<> T2;
     31         const T1 t1;
     32         const T2 t2;
     33         assert(t1 == t2);
     34         assert(!(t1 != t2));
     35     }
     36     {
     37         typedef std::tuple<int> T1;
     38         typedef std::tuple<double> T2;
     39         const T1 t1(1);
     40         const T2 t2(1.1);
     41         assert(!(t1 == t2));
     42         assert(t1 != t2);
     43     }
     44     {
     45         typedef std::tuple<int> T1;
     46         typedef std::tuple<double> T2;
     47         const T1 t1(1);
     48         const T2 t2(1);
     49         assert(t1 == t2);
     50         assert(!(t1 != t2));
     51     }
     52     {
     53         typedef std::tuple<int, double> T1;
     54         typedef std::tuple<double, long> T2;
     55         const T1 t1(1, 2);
     56         const T2 t2(1, 2);
     57         assert(t1 == t2);
     58         assert(!(t1 != t2));
     59     }
     60     {
     61         typedef std::tuple<int, double> T1;
     62         typedef std::tuple<double, long> T2;
     63         const T1 t1(1, 2);
     64         const T2 t2(1, 3);
     65         assert(!(t1 == t2));
     66         assert(t1 != t2);
     67     }
     68     {
     69         typedef std::tuple<int, double> T1;
     70         typedef std::tuple<double, long> T2;
     71         const T1 t1(1, 2);
     72         const T2 t2(1.1, 2);
     73         assert(!(t1 == t2));
     74         assert(t1 != t2);
     75     }
     76     {
     77         typedef std::tuple<int, double> T1;
     78         typedef std::tuple<double, long> T2;
     79         const T1 t1(1, 2);
     80         const T2 t2(1.1, 3);
     81         assert(!(t1 == t2));
     82         assert(t1 != t2);
     83     }
     84     {
     85         typedef std::tuple<long, int, double> T1;
     86         typedef std::tuple<double, long, int> T2;
     87         const T1 t1(1, 2, 3);
     88         const T2 t2(1, 2, 3);
     89         assert(t1 == t2);
     90         assert(!(t1 != t2));
     91     }
     92     {
     93         typedef std::tuple<long, int, double> T1;
     94         typedef std::tuple<double, long, int> T2;
     95         const T1 t1(1, 2, 3);
     96         const T2 t2(1.1, 2, 3);
     97         assert(!(t1 == t2));
     98         assert(t1 != t2);
     99     }
    100     {
    101         typedef std::tuple<long, int, double> T1;
    102         typedef std::tuple<double, long, int> T2;
    103         const T1 t1(1, 2, 3);
    104         const T2 t2(1, 3, 3);
    105         assert(!(t1 == t2));
    106         assert(t1 != t2);
    107     }
    108     {
    109         typedef std::tuple<long, int, double> T1;
    110         typedef std::tuple<double, long, int> T2;
    111         const T1 t1(1, 2, 3);
    112         const T2 t2(1, 2, 4);
    113         assert(!(t1 == t2));
    114         assert(t1 != t2);
    115     }
    116     {
    117         typedef std::tuple<long, int, double> T1;
    118         typedef std::tuple<double, long, int> T2;
    119         const T1 t1(1, 2, 3);
    120         const T2 t2(1, 3, 2);
    121         assert(!(t1 == t2));
    122         assert(t1 != t2);
    123     }
    124     {
    125         typedef std::tuple<long, int, double> T1;
    126         typedef std::tuple<double, long, int> T2;
    127         const T1 t1(1, 2, 3);
    128         const T2 t2(1.1, 2, 2);
    129         assert(!(t1 == t2));
    130         assert(t1 != t2);
    131     }
    132     {
    133         typedef std::tuple<long, int, double> T1;
    134         typedef std::tuple<double, long, int> T2;
    135         const T1 t1(1, 2, 3);
    136         const T2 t2(1.1, 3, 3);
    137         assert(!(t1 == t2));
    138         assert(t1 != t2);
    139     }
    140     {
    141         typedef std::tuple<long, int, double> T1;
    142         typedef std::tuple<double, long, int> T2;
    143         const T1 t1(1, 2, 3);
    144         const T2 t2(1.1, 3, 2);
    145         assert(!(t1 == t2));
    146         assert(t1 != t2);
    147     }
    148 #if TEST_STD_VER > 11
    149     {
    150         typedef std::tuple<long, int, double> T1;
    151         typedef std::tuple<double, long, int> T2;
    152         constexpr T1 t1(1, 2, 3);
    153         constexpr T2 t2(1.1, 3, 2);
    154         static_assert(!(t1 == t2), "");
    155         static_assert(t1 != t2, "");
    156     }
    157 #endif
    158 }
    159