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