• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #include <boost/hana/assert.hpp>
6 #include <boost/hana/equal.hpp>
7 #include <boost/hana/map.hpp>
8 #include <boost/hana/not.hpp>
9 #include <boost/hana/not_equal.hpp>
10 
11 #include <laws/base.hpp>
12 #include <support/minimal_product.hpp>
13 namespace hana = boost::hana;
14 
15 
16 template <int i>
key()17 auto key() { return hana::test::ct_eq<i>{}; }
18 
19 template <int i>
val()20 auto val() { return hana::test::ct_eq<-i>{}; }
21 
22 template <int i, int j>
p()23 auto p() { return ::minimal_product(key<i>(), val<j>()); }
24 
main()25 int main() {
26     BOOST_HANA_CONSTANT_CHECK(hana::equal(
27         hana::make_map(),
28         hana::make_map()
29     ));
30     BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::equal(
31         hana::make_map(p<1, 1>()),
32         hana::make_map()
33     )));
34     BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::equal(
35         hana::make_map(),
36         hana::make_map(p<1, 1>())
37     )));
38 
39     BOOST_HANA_CONSTANT_CHECK(hana::equal(
40         hana::make_map(p<1, 1>()),
41         hana::make_map(p<1, 1>())
42     ));
43     BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::equal(
44         hana::make_map(p<1, 1>()),
45         hana::make_map(p<1, 2>())
46     )));
47     BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::equal(
48         hana::make_map(p<1, 1>()),
49         hana::make_map(p<2, 1>())
50     )));
51     BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::equal(
52         hana::make_map(p<1, 1>()),
53         hana::make_map(p<1, 1>(), p<2, 2>())
54     )));
55 
56     BOOST_HANA_CONSTANT_CHECK(hana::equal(
57         hana::make_map(p<1, 1>(), p<2, 2>()),
58         hana::make_map(p<1, 1>(), p<2, 2>())
59     ));
60     BOOST_HANA_CONSTANT_CHECK(hana::equal(
61         hana::make_map(p<1, 1>(), p<2, 2>()),
62         hana::make_map(p<2, 2>(), p<1, 1>())
63     ));
64     BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::equal(
65         hana::make_map(p<1, 1>(), p<2, 2>()),
66         hana::make_map(p<9, 1>(), p<2, 2>()))
67     ));
68     BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::equal(
69         hana::make_map(p<1, 1>(), p<2, 2>()),
70         hana::make_map(p<1, 9>(), p<2, 2>()))
71     ));
72     BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::equal(
73         hana::make_map(p<1, 1>(), p<2, 2>()),
74         hana::make_map(p<1, 1>(), p<9, 2>()))
75     ));
76     BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::equal(
77         hana::make_map(p<1, 1>(), p<2, 2>()),
78         hana::make_map(p<1, 1>(), p<2, 9>()))
79     ));
80     BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::equal(
81         hana::make_map(p<1, 1>(), p<2, 2>()),
82         hana::make_map(p<1, 1>(), p<2, 2>(), p<3, 3>()))
83     ));
84 
85     // operators
86     BOOST_HANA_CONSTANT_CHECK(
87         hana::make_map(p<2, 2>(), p<1, 1>())
88             ==
89         hana::make_map(p<1, 1>(), p<2, 2>())
90     );
91 
92     BOOST_HANA_CONSTANT_CHECK(
93         hana::make_map(p<1, 1>())
94             !=
95         hana::make_map(p<1, 1>(), p<2, 2>())
96     );
97 }
98