1 /*-----------------------------------------------------------------------------+
2 Copyright (c) 2008-2009: Joachim Faulhaber
3 +------------------------------------------------------------------------------+
4    Distributed under the Boost Software License, Version 1.0.
5       (See accompanying file LICENCE.txt or copy at
6            http://www.boost.org/LICENSE_1_0.txt)
7 +-----------------------------------------------------------------------------*/
8 #define BOOST_TEST_MODULE icl::interval_map_infix_mixed unit test
9 #include <libs/icl/test/disable_test_warnings.hpp>
10 #include <string>
11 #include <boost/mpl/list.hpp>
12 #include "../unit_test_unwarned.hpp"
13 
14 
15 // interval instance types
16 #include "../test_type_lists.hpp"
17 #include "../test_value_maker.hpp"
18 
19 #include <boost/icl/interval_set.hpp>
20 #include <boost/icl/separate_interval_set.hpp>
21 #include <boost/icl/split_interval_set.hpp>
22 #include <boost/icl/interval_map.hpp>
23 #include <boost/icl/split_interval_map.hpp>
24 
25 using namespace std;
26 using namespace boost;
27 using namespace unit_test;
28 using namespace boost::icl;
29 
30 
BOOST_AUTO_TEST_CASE_TEMPLATE(test_icl_interval_map_mixed_infix_plus_overload_4_bicremental_types,T,bicremental_types)31 BOOST_AUTO_TEST_CASE_TEMPLATE(test_icl_interval_map_mixed_infix_plus_overload_4_bicremental_types, T, bicremental_types)
32 {
33     typedef int U;
34     typedef interval_map<T,U>  IntervalMapT;
35     interval_map<T,U>          join_a;
36     split_interval_map<T,U>    split_a;
37 
38     join_a .add(CDv(1,3,1)).add(IDv(8,9,1)).add(IIv(6,11,3));
39     split_a.add(IDv(0,9,2)).add(IIv(3,6,1)).add(IDv(5,7,1));
40 
41     BOOST_CHECK_EQUAL(split_a + join_a, join_a + split_a);
42 }
43 
BOOST_AUTO_TEST_CASE_TEMPLATE(test_icl_interval_map_mixed_infix_pipe_overload_4_bicremental_types,T,bicremental_types)44 BOOST_AUTO_TEST_CASE_TEMPLATE(test_icl_interval_map_mixed_infix_pipe_overload_4_bicremental_types, T, bicremental_types)
45 {
46     typedef int U;
47     typedef interval_map<T,U>  IntervalMapT;
48     interval_map<T,U>          join_a;
49     split_interval_map<T,U>    split_a;
50 
51     join_a .add(CDv(1,3,1)).add(IDv(8,9,1)).add(IIv(6,11,3));
52     split_a.add(IDv(0,9,2)).add(IIv(3,6,1)).add(IDv(5,7,1));
53 
54     BOOST_CHECK_EQUAL(split_a | join_a, join_a | split_a);
55 }
56 
BOOST_AUTO_TEST_CASE_TEMPLATE(test_icl_interval_map_mixed_infix_minus_overload_4_bicremental_types,T,bicremental_types)57 BOOST_AUTO_TEST_CASE_TEMPLATE(test_icl_interval_map_mixed_infix_minus_overload_4_bicremental_types, T, bicremental_types)
58 {
59     typedef int U;
60     typedef interval_map<T,U>  IntervalMapT;
61     interval_map<T,U>          join_a, join_b;
62     split_interval_map<T,U>    split_a, split_b;
63 
64     join_a .add(CDv(1,3,1)).add(IDv(8,9,1)).add(IIv(6,11,3));
65     split_a.add(IDv(0,9,2)).add(IIv(3,6,1)).add(IDv(5,7,1));
66 
67     join_b .add(CDv(1,3,1)).add(IIv(6,11,3));
68     split_b.add(IDv(0,9,2)).add(IIv(3,6,1));
69 
70     BOOST_CHECK_EQUAL(split_a - join_a, (split_b = split_a) -= join_a);
71     BOOST_CHECK_EQUAL(split_a - join_a, split_b);
72 
73     BOOST_CHECK_EQUAL(join_a - split_a, (join_b = join_a) -= split_a);
74     BOOST_CHECK_EQUAL(join_a - split_a, join_b);
75 }
76 
BOOST_AUTO_TEST_CASE_TEMPLATE(test_icl_interval_map_mixed_infix_et_overload_4_bicremental_types,T,bicremental_types)77 BOOST_AUTO_TEST_CASE_TEMPLATE(test_icl_interval_map_mixed_infix_et_overload_4_bicremental_types, T, bicremental_types)
78 {
79     typedef int U;
80     typedef interval_map<T,U>  IntervalMapT;
81     interval_map<T,U>          join_a, join_b;
82     split_interval_map<T,U>    split_a, split_b;
83 
84     join_a .add(CDv(1,3,1)).add(IDv(8,9,1)).add(IIv(6,11,3));
85     split_a.add(IDv(0,9,2)).add(IIv(3,6,1)).add(IDv(5,7,1));
86 
87     BOOST_CHECK_EQUAL(split_a & join_a, join_a & split_a);
88     BOOST_CHECK_EQUAL(split_a & join_a, (split_b = split_a) &= join_a);
89     BOOST_CHECK_EQUAL(split_a & join_a, split_b);
90 
91     BOOST_CHECK_EQUAL(join_a & split_a, (split_b = split_a) &= join_a);
92     BOOST_CHECK_EQUAL(join_a & split_a, split_b);
93 }
94 
95