/*-----------------------------------------------------------------------------+ Copyright (c) 2008-2009: Joachim Faulhaber +------------------------------------------------------------------------------+ Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENCE.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +-----------------------------------------------------------------------------*/ #define BOOST_TEST_MODULE icl::test_doc_code unit test #include #include #include #include #include #include #include "../unit_test_unwarned.hpp" // interval instance types #include "../test_type_lists.hpp" #include "../test_value_maker.hpp" #include #define BOOST_ICL_USE_STATIC_BOUNDED_INTERVALS #define BOOST_ICL_DISCRETE_STATIC_INTERVAL_DEFAULT right_open_interval #define BOOST_ICL_DISCRETE_STATIC_INTERVAL_BORDERS 2 //0=() 1=(] 2=[) 3=[] #include #include #include #include "../test_laws.hpp" using namespace std; using namespace boost; using namespace unit_test; using namespace boost::icl; BOOST_AUTO_TEST_CASE(test_intervals_4_changed_lib_defaults) { #if defined(BOOST_ICL_USE_STATIC_BOUNDED_INTERVALS) && !defined(BOOST_ICL_DISCRETE_STATIC_INTERVAL_DEFAULT) BOOST_CHECK( (boost::is_same::type, right_open_interval >::value) ); BOOST_CHECK( (boost::is_same::type, right_open_interval >::value) ); BOOST_CHECK_EQUAL( icl::interval::open(0,2), icl::construct >(1,2) ); BOOST_CHECK_EQUAL( icl::interval::left_open(0,1), icl::construct >(1,2) ); BOOST_CHECK_EQUAL( icl::interval::right_open(1,2), icl::construct >(1,2) ); BOOST_CHECK_EQUAL( icl::interval::closed(1,1), icl::construct >(1,2) ); BOOST_CHECK_EQUAL( icl::interval::right_open(1.0,2.0), icl::construct >(1.0,2.0) ); //The next yields compiletime error: STATIC_ASSERTION_FAILURE //BOOST_CHECK_EQUAL( icl::interval::left_open(1.0,2.0), icl::construct >(1.0,2.0) ); #endif #if defined(BOOST_ICL_USE_STATIC_BOUNDED_INTERVALS) && defined(BOOST_ICL_DISCRETE_STATIC_INTERVAL_DEFAULT) # if defined(BOOST_ICL_DISCRETE_STATIC_INTERVAL_BORDERS) && (BOOST_ICL_DISCRETE_STATIC_INTERVAL_BORDERS == 0) cout << "discrete_interval == open_interval\n"; BOOST_CHECK( (boost::is_same::type, open_interval >::value) ); BOOST_CHECK_EQUAL( icl::interval::open(0,2), icl::construct >(0,2) ); BOOST_CHECK_EQUAL( icl::interval::left_open(0,1), icl::construct >(0,2) ); BOOST_CHECK_EQUAL( icl::interval::right_open(1,2), icl::construct >(0,2) ); BOOST_CHECK_EQUAL( icl::interval::closed(1,1), icl::construct >(0,2) ); # elif defined(BOOST_ICL_DISCRETE_STATIC_INTERVAL_BORDERS) && (BOOST_ICL_DISCRETE_STATIC_INTERVAL_BORDERS == 1) cout << "discrete_interval == left_open_interval\n"; BOOST_CHECK( (boost::is_same::type, left_open_interval >::value) ); BOOST_CHECK_EQUAL( icl::interval::open(0,2), icl::construct >(0,1) ); BOOST_CHECK_EQUAL( icl::interval::left_open(0,1), icl::construct >(0,1) ); BOOST_CHECK_EQUAL( icl::interval::right_open(1,2), icl::construct >(0,1) ); BOOST_CHECK_EQUAL( icl::interval::closed(1,1), icl::construct >(0,1) ); # elif defined(BOOST_ICL_DISCRETE_STATIC_INTERVAL_BORDERS) && (BOOST_ICL_DISCRETE_STATIC_INTERVAL_BORDERS == 2) cout << "discrete_interval == right_open_interval\n"; BOOST_CHECK( (boost::is_same::type, right_open_interval >::value) ); BOOST_CHECK_EQUAL( icl::interval::open(0,2), icl::construct >(1,2) ); BOOST_CHECK_EQUAL( icl::interval::left_open(0,1), icl::construct >(1,2) ); BOOST_CHECK_EQUAL( icl::interval::right_open(1,2), icl::construct >(1,2) ); BOOST_CHECK_EQUAL( icl::interval::closed(1,1), icl::construct >(1,2) ); # elif defined(BOOST_ICL_DISCRETE_STATIC_INTERVAL_BORDERS) && (BOOST_ICL_DISCRETE_STATIC_INTERVAL_BORDERS == 3) cout << "discrete_interval == closed_interval\n"; BOOST_CHECK( (boost::is_same::type, closed_interval >::value) ); BOOST_CHECK_EQUAL( icl::interval::open(0,2), icl::construct >(1,1) ); BOOST_CHECK_EQUAL( icl::interval::left_open(0,1), icl::construct >(1,1) ); BOOST_CHECK_EQUAL( icl::interval::right_open(1,2), icl::construct >(1,1) ); BOOST_CHECK_EQUAL( icl::interval::closed(1,1), icl::construct >(1,1) ); # else cout << "#else part, INTERVAL_BORDERS not in {0,1,2,3}\n"; #endif //defined(BOOST_ICL_USE_STATIC_BOUNDED_INTERVALS) && defined(BOOST_ICL_DISCRETE_STATIC_INTERVAL_DEFAULT) #else BOOST_CHECK( (boost::is_same::type, discrete_interval >::value) ); BOOST_CHECK( (boost::is_same::type, continuous_interval >::value) ); #endif }