1 // Copyright Louis Dionne 2013-2017
2 // Distributed under the Boost Software License, Version 1.0.
3 // (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
4 
5 #ifndef BOOST_HANA_TEST_AUTO_LEXICOGRAPHICAL_COMPARE_HPP
6 #define BOOST_HANA_TEST_AUTO_LEXICOGRAPHICAL_COMPARE_HPP
7 
8 #include <boost/hana/assert.hpp>
9 #include <boost/hana/equal.hpp>
10 #include <boost/hana/lexicographical_compare.hpp>
11 #include <boost/hana/not.hpp>
12 
13 #include <laws/base.hpp>
14 #include "test_case.hpp"
15 
16 
__anon1a1fd0660102null17 TestCase test_lexicographical_compare{[]{
18     namespace hana = boost::hana;
19     using hana::test::ct_ord;
20 
21     struct undefined { };
22 
23     BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::lexicographical_compare(
24         MAKE_TUPLE(),
25         MAKE_TUPLE()
26     )));
27 
28     BOOST_HANA_CONSTANT_CHECK(hana::lexicographical_compare(
29         MAKE_TUPLE(),
30         MAKE_TUPLE(undefined{})
31     ));
32 
33     BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::lexicographical_compare(
34         MAKE_TUPLE(undefined{}),
35         MAKE_TUPLE()
36     )));
37 
38     BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::lexicographical_compare(
39         MAKE_TUPLE(ct_ord<0>{}),
40         MAKE_TUPLE(ct_ord<0>{})
41     )));
42 
43     BOOST_HANA_CONSTANT_CHECK(hana::lexicographical_compare(
44         MAKE_TUPLE(ct_ord<0>{}),
45         MAKE_TUPLE(ct_ord<1>{})
46     ));
47 
48     BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::lexicographical_compare(
49         MAKE_TUPLE(ct_ord<1>{}),
50         MAKE_TUPLE(ct_ord<0>{})
51     )));
52 
53     BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::lexicographical_compare(
54         MAKE_TUPLE(ct_ord<0>{}, undefined{}),
55         MAKE_TUPLE(ct_ord<0>{})
56     )));
57 
58     BOOST_HANA_CONSTANT_CHECK(hana::lexicographical_compare(
59         MAKE_TUPLE(ct_ord<0>{}),
60         MAKE_TUPLE(ct_ord<0>{}, undefined{})
61     ));
62 
63     BOOST_HANA_CONSTANT_CHECK(hana::lexicographical_compare(
64         MAKE_TUPLE(ct_ord<0>{}, ct_ord<0>{}),
65         MAKE_TUPLE(ct_ord<0>{}, ct_ord<1>{})
66     ));
67 
68     BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::lexicographical_compare(
69         MAKE_TUPLE(ct_ord<0>{}, ct_ord<1>{}),
70         MAKE_TUPLE(ct_ord<0>{}, ct_ord<0>{})
71     )));
72 
73     BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::lexicographical_compare(
74         MAKE_TUPLE(ct_ord<0>{}, ct_ord<1>{}, ct_ord<2>{}),
75         MAKE_TUPLE(ct_ord<0>{}, ct_ord<1>{}, ct_ord<2>{})
76     )));
77 
78     BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::lexicographical_compare(
79         MAKE_TUPLE(ct_ord<0>{}, ct_ord<1>{}, ct_ord<2>{}, undefined{}),
80         MAKE_TUPLE(ct_ord<0>{}, ct_ord<1>{}, ct_ord<2>{})
81     )));
82 
83     BOOST_HANA_CONSTANT_CHECK(hana::lexicographical_compare(
84         MAKE_TUPLE(ct_ord<0>{}, ct_ord<1>{}, ct_ord<2>{}),
85         MAKE_TUPLE(ct_ord<0>{}, ct_ord<1>{}, ct_ord<2>{}, undefined{})
86     ));
87 
88     BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::lexicographical_compare(
89         MAKE_TUPLE(ct_ord<0>{}, ct_ord<1>{}, ct_ord<3>{}, undefined{}),
90         MAKE_TUPLE(ct_ord<0>{}, ct_ord<1>{}, ct_ord<2>{}, undefined{})
91     )));
92 
93     BOOST_HANA_CONSTANT_CHECK(hana::lexicographical_compare(
94         MAKE_TUPLE(ct_ord<0>{}, ct_ord<1>{}, ct_ord<2>{}, undefined{}),
95         MAKE_TUPLE(ct_ord<0>{}, ct_ord<1>{}, ct_ord<3>{}, undefined{})
96     ));
97 
98     BOOST_HANA_CONSTANT_CHECK(hana::lexicographical_compare(
99         MAKE_TUPLE(ct_ord<0>{}, ct_ord<1>{}, ct_ord<2>{}, undefined{}),
100         MAKE_TUPLE(ct_ord<0>{}, ct_ord<1>{}, ct_ord<3>{})
101     ));
102 
103     BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::lexicographical_compare(
104         MAKE_TUPLE(ct_ord<0>{}, ct_ord<1>{}, ct_ord<3>{}),
105         MAKE_TUPLE(ct_ord<0>{}, ct_ord<1>{}, ct_ord<2>{}, undefined{})
106     )));
107 }};
108 
109 #endif // !BOOST_HANA_TEST_AUTO_LEXICOGRAPHICAL_COMPARE_HPP
110