1/*-----------------------------------------------------------------------------+
2Copyright (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#ifndef BOOST_ICL_TEST_ICL_INTERVAL_HPP_JOFA_100930
9#define BOOST_ICL_TEST_ICL_INTERVAL_HPP_JOFA_100930
10
11// NOTE: ordered_types is the largest class of types that is admissable as
12// domain parameters for intervals and interval containers.
13// bicremental_types is a smaller class of types used for testing instead of
14// ordered types, because they can be generated in a simple
15// way using the functions of test_value_maker.hpp.
16
17template <class IntervalT>
18void interval_ctor_4_ordered_types()
19{
20 typedef typename domain_type_of<interval_traits<IntervalT> >::type T;
21 typedef typename icl::size_type_of<T>::type SizeT;
22 T t_0 = icl::identity_element<T>::value();
23 T t_1 = icl::unit_element<T>::value();
24 SizeT s_0 = icl::identity_element<SizeT>::value();
25 SizeT s_1 = icl::unit_element<SizeT>::value();
26
27 // Default ctor and emptieness
28 BOOST_CHECK_EQUAL( icl::is_empty(IntervalT()), true );
29 BOOST_CHECK_EQUAL( icl::cardinality(IntervalT()), s_0 );
30 BOOST_CHECK_EQUAL( icl::size(IntervalT()), s_0 );
31
32 BOOST_CHECK_EQUAL( IntervalT(), IntervalT() );
33 BOOST_CHECK_EQUAL( IntervalT(), IntervalT(IntervalT().lower(), IntervalT().upper()) );
34 BOOST_CHECK_EQUAL( IntervalT(), IntervalT(icl::lower(IntervalT()), icl::upper(IntervalT())) );
35
36 BOOST_CHECK_EQUAL(icl::cardinality(IntervalT(t_0, t_1)) >= s_1, true);
37 BOOST_CHECK_EQUAL(( icl::contains(IntervalT(t_0, t_1), t_0)
38 || icl::contains(IntervalT(t_0, t_1), t_1)), true);
39
40 BOOST_CHECK_EQUAL(IntervalT(t_0, t_1).lower(), t_0);
41 BOOST_CHECK_EQUAL(IntervalT(t_0, t_1).upper(), t_1);
42 BOOST_CHECK_EQUAL(lower(icl::construct<IntervalT>(t_0, t_1)), t_0);
43 BOOST_CHECK_EQUAL(upper(icl::construct<IntervalT>(t_0, t_1)), t_1);
44}
45
46
47template <class IntervalT>
48void singelizable_interval_4_ordered_types()
49{
50 // Singleton ctor and singleness
51 // LAW: !is_asymmetric_continuous(IntervalT) => size(singleton(x))==1
52 // LAW: This law applies to all discrete and to dynamic continuous intervals
53 // LAW: No singletons can be constructed for static continuous right_open and left_open intervals
54 typedef typename domain_type_of<interval_traits<IntervalT> >::type T;
55 typedef typename icl::size_type_of<T>::type SizeT;
56 T t_0 = icl::identity_element<T>::value();
57 T t_1 = icl::unit_element<T>::value();
58 SizeT s_1 = icl::unit_element<SizeT>::value();
59
60 BOOST_CHECK( is_singelizable<IntervalT>::value );
61
62 BOOST_CHECK_EQUAL( icl::cardinality(icl::singleton<IntervalT>(t_0)), s_1 );
63 BOOST_CHECK_EQUAL( icl::size(icl::singleton<IntervalT>(t_0)), s_1 );
64 BOOST_CHECK_EQUAL( icl::cardinality(icl::singleton<IntervalT>(t_1)), s_1 );
65 BOOST_CHECK_EQUAL( icl::size(icl::singleton<IntervalT>(t_1)), s_1 );
66
67 BOOST_CHECK_EQUAL( icl::contains(icl::singleton<IntervalT>(t_0), t_0), true );
68 BOOST_CHECK_EQUAL( icl::contains(icl::singleton<IntervalT>(t_1), t_1), true );
69}
70
71template <class IntervalT>
72void singelizable_interval_4_bicremental_types()
73{
74 typedef typename domain_type_of<interval_traits<IntervalT> >::type T;
75 typedef typename icl::size_type_of<T>::type SizeT;
76 //T t_0 = icl::identity_element<T>::value();
77 SizeT s_1 = icl::unit_element<SizeT>::value();
78
79 BOOST_CHECK( is_singelizable<IntervalT>::value );
80
81 BOOST_CHECK_EQUAL( icl::cardinality(IntervalT(MK_v(3))), s_1 );
82 BOOST_CHECK_EQUAL( icl::size(IntervalT(MK_v(4))), s_1 );
83 BOOST_CHECK_EQUAL( icl::singleton<IntervalT>(MK_v(2)), icl::singleton<IntervalT>(MK_v(2)) );
84 BOOST_CHECK_EQUAL( icl::contains(IntervalT(MK_v(1)), MK_v(1)), true );
85}
86
87template <class IntervalT>
88void coverable_asymmetric_interval_4_bicremental_types()
89{
90 typedef typename domain_type_of<interval_traits<IntervalT> >::type T;
91 //CL typedef typename icl::size_type_of<T>::type SizeT;
92 typedef typename icl::difference_type_of<T>::type DiffT;
93 //T t_0 = icl::identity_element<T>::value();
94 //SizeT s_1 = icl::unit_element<SizeT>::value();
95 DiffT d_1 = icl::unit_element<DiffT>::value();
96
97 //JODO BOOST_CHECK( is_incremental_coverable<IntervalT>::value );
98 BOOST_CHECK( has_difference<T>::value );
99
100 BOOST_CHECK_EQUAL( icl::contains(icl::detail::unit_trail<IntervalT>(MK_v(4)), MK_v(4)), true );
101 BOOST_CHECK_EQUAL( icl::length (icl::detail::unit_trail<IntervalT>(MK_v(3))), d_1 );
102 BOOST_CHECK ( icl::touches (icl::detail::unit_trail<IntervalT>(MK_v(2)), icl::detail::unit_trail<IntervalT>(MK_v(3))) );
103}
104
105
106
107#endif // BOOST_ICL_TEST_ICL_INTERVAL_HPP_JOFA_100930
108

source code of boost/libs/icl/test/test_icl_interval.hpp