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/erase_key.hpp>
8 #include <boost/hana/set.hpp>
9 
10 #include <laws/base.hpp>
11 namespace hana = boost::hana;
12 using hana::test::ct_eq;
13 
14 
15 struct undefined { };
16 
17 
main()18 int main() {
19     BOOST_HANA_CONSTANT_CHECK(hana::equal(
20         hana::erase_key(hana::make_set(), undefined{}),
21         hana::make_set()
22     ));
23 
24     BOOST_HANA_CONSTANT_CHECK(hana::equal(
25         hana::erase_key(hana::make_set(ct_eq<0>{}), ct_eq<0>{}),
26         hana::make_set()
27     ));
28     BOOST_HANA_CONSTANT_CHECK(hana::equal(
29         hana::erase_key(hana::make_set(ct_eq<0>{}), ct_eq<99>{}),
30         hana::make_set(ct_eq<0>{})
31     ));
32 
33     BOOST_HANA_CONSTANT_CHECK(hana::equal(
34         hana::erase_key(hana::make_set(ct_eq<0>{}, ct_eq<1>{}), ct_eq<0>{}),
35         hana::make_set(ct_eq<1>{})
36     ));
37     BOOST_HANA_CONSTANT_CHECK(hana::equal(
38         hana::erase_key(hana::make_set(ct_eq<0>{}, ct_eq<1>{}), ct_eq<1>{}),
39         hana::make_set(ct_eq<0>{})
40     ));
41     BOOST_HANA_CONSTANT_CHECK(hana::equal(
42         hana::erase_key(hana::make_set(ct_eq<0>{}, ct_eq<1>{}), ct_eq<99>{}),
43         hana::make_set(ct_eq<0>{}, ct_eq<1>{})
44     ));
45 
46     BOOST_HANA_CONSTANT_CHECK(hana::equal(
47         hana::erase_key(hana::make_set(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{}), ct_eq<0>{}),
48         hana::make_set(ct_eq<1>{}, ct_eq<2>{})
49     ));
50     BOOST_HANA_CONSTANT_CHECK(hana::equal(
51         hana::erase_key(hana::make_set(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{}), ct_eq<1>{}),
52         hana::make_set(ct_eq<0>{}, ct_eq<2>{})
53     ));
54     BOOST_HANA_CONSTANT_CHECK(hana::equal(
55         hana::erase_key(hana::make_set(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{}), ct_eq<2>{}),
56         hana::make_set(ct_eq<0>{}, ct_eq<1>{})
57     ));
58     BOOST_HANA_CONSTANT_CHECK(hana::equal(
59         hana::erase_key(hana::make_set(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{}), ct_eq<99>{}),
60         hana::make_set(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{})
61     ));
62 }
63