void interval_set_element_iter_4_discrete_types() { typedef IntervalSet<T> IntervalSetT; typedef typename IntervalSetT::interval_type IntervalT; typedef std::vector<T> VectorT; IntervalSetT set_a; set_a.add(I_I(1,3)).add(I_I(6,7)); VectorT vec(5), cev(5); vec[0]=MK_v(1);vec[1]=MK_v(2);vec[2]=MK_v(3);vec[3]=MK_v(6);vec[4]=MK_v(7); cev[0]=MK_v(7);cev[1]=MK_v(6);cev[2]=MK_v(3);cev[3]=MK_v(2);cev[4]=MK_v(1); VectorT dest; std::copy(elements_begin(set_a), elements_end(set_a), std::back_inserter(dest)); BOOST_CHECK_EQUAL( vec == dest, true ); dest.clear(); std::copy(elements_rbegin(set_a), elements_rend(set_a), std::back_inserter(dest)); BOOST_CHECK_EQUAL( cev == dest, true ); dest.clear(); std::reverse_copy(elements_begin(set_a), elements_end(set_a), std::back_inserter(dest)); BOOST_CHECK_EQUAL( cev == dest, true ); dest.clear(); std::reverse_copy(elements_rbegin(set_a), elements_rend(set_a), std::back_inserter(dest)); BOOST_CHECK_EQUAL( vec == dest, true ); }
void interval_set_infix_plus_overload_4_bicremental_types() { typedef IntervalSet<T> IntervalSetT; typedef typename IntervalSetT::interval_type IntervalT; IntervalT itv = I_D(3,5); IntervalSetT set_a, set_b; set_a.add(C_D(1,3)).add(I_D(8,9)).add(I_I(6,11)); set_b.add(I_D(0,9)).add(I_I(3,6)).add(I_D(5,7)); BOOST_CHECK_EQUAL(set_a + set_b, set_b + set_a); // This checks all cases of is_interval_set_derivative<T> BOOST_CHECK_EQUAL(set_a + itv, itv + set_a); BOOST_CHECK_EQUAL(set_b + MK_v(4), MK_v(4) + set_b); }
void interval_set_range_4_discrete_types() { typedef IntervalSet<T> IntervalSetT; typedef typename IntervalSetT::interval_type IntervalT; typedef typename IntervalSetT::key_type KeyT; IntervalT between = I_D(3,5); IntervalSetT set_a; set_a.add(C_D(1,3)).add(I_I(6,11)); // (1 3) [6 11] BOOST_CHECK_EQUAL( icl::first(set_a), icl::first(*(set_a.begin())) ); BOOST_CHECK_EQUAL( icl::first(set_a), MK_v(2) ); BOOST_CHECK_EQUAL( icl::last(set_a), icl::last(*(set_a.rbegin())) ); BOOST_CHECK_EQUAL( icl::last(set_a), MK_v(11) ); }
void interval_bitset_find_4_integral_types() { typedef IntervalSet<T> IntervalSetT; typedef typename IntervalSetT::interval_type IntervalT; typedef typename IntervalSetT::bitset_type BitsT; IntervalT itv = I_D(3,5); IntervalSetT set_a; set_a.add(C_D(1,3)).add(I_I(6,11)); typename IntervalSetT::const_iterator found = set_a.find(MK_v(6)); BOOST_CHECK( (found->second).contains(6) ); found = set_a.find(MK_v(5)); BOOST_CHECK( found == set_a.end() ); set_a.add(MK_v(64)); found = set_a.find(MK_v(64)); BOOST_CHECK( (found->second).contains(0) ); set_a.add(MK_v(65)); found = set_a.find(MK_v(65)); BOOST_CHECK( (found->second).contains(1) ); found = set_a.find(MK_v(66)); BOOST_CHECK( found == set_a.end() ); }
void interval_set_mixed_contains_4_bicremental_types() { typedef interval_set<T> IntervalSetT; typedef typename IntervalSetT::interval_type IntervalT; split_interval_set<T> split_set; split_set.add(I_D(0,4)).add(I_D(4,8)); BOOST_CHECK_EQUAL( icl::contains(split_set, MK_v(4)), true ); BOOST_CHECK_EQUAL( icl::contains(split_set, C_D(2,5)), true ); interval_set<T> join_set_gap4(split_set.erase(MK_v(4))); BOOST_CHECK_EQUAL( icl::contains(join_set_gap4, MK_v(4)), false ); BOOST_CHECK_EQUAL( icl::contains(join_set_gap4, C_D(2,5)), false ); BOOST_CHECK_EQUAL( icl::contains(split_set, split_set), true ); BOOST_CHECK_EQUAL( icl::contains(split_set, join_set_gap4), true ); }
void interval_set_intersects_4_bicremental_types() { typedef IntervalSet<T> IntervalSetT; typedef typename IntervalSetT::interval_type IntervalT; typedef typename IntervalSetT::key_type KeyT; IntervalT between = I_D(3,5); IntervalSetT set_a; set_a.add(C_D(1,3)).add(I_I(6,11)); // (1 3) [6 11] BOOST_CHECK( icl::intersects(set_a, MK_v(2)) ); BOOST_CHECK( icl::intersects(set_a, MK_v(11)) ); BOOST_CHECK( icl::disjoint(set_a, MK_v(3)) ); BOOST_CHECK( icl::disjoint(set_a, MK_v(5)) ); BOOST_CHECK( icl::intersects(set_a, C_D(1,3)) ); BOOST_CHECK( icl::intersects(set_a, I_D(8,10)) ); BOOST_CHECK( icl::disjoint(set_a, between) ); BOOST_CHECK( icl::disjoint(set_a, I_I(0,1)) ); IntervalSetT to_12 = IntervalSetT(I_D(0, 13)); IntervalSetT complement_a = to_12 - set_a; BOOST_CHECK( icl::disjoint(set_a, complement_a) ); BOOST_CHECK( icl::intersects(to_12, set_a) ); BOOST_CHECK_EQUAL( icl::lower(set_a), icl::lower(*(set_a.begin())) ); BOOST_CHECK_EQUAL( icl::lower(set_a), MK_v(1) ); BOOST_CHECK_EQUAL( icl::upper(set_a), icl::upper(*(set_a.rbegin())) ); BOOST_CHECK_EQUAL( icl::upper(set_a), MK_v(11) ); }
void singelizable_interval_4_bicremental_types() { typedef typename domain_type_of<interval_traits<IntervalT> >::type T; typedef typename icl::size_type_of<T>::type SizeT; //T t_0 = icl::identity_element<T>::value(); SizeT s_1 = icl::unit_element<SizeT>::value(); BOOST_CHECK( is_singelizable<IntervalT>::value ); BOOST_CHECK_EQUAL( icl::cardinality(IntervalT(MK_v(3))), s_1 ); BOOST_CHECK_EQUAL( icl::size(IntervalT(MK_v(4))), s_1 ); BOOST_CHECK_EQUAL( icl::singleton<IntervalT>(MK_v(2)), icl::singleton<IntervalT>(MK_v(2)) ); BOOST_CHECK_EQUAL( icl::contains(IntervalT(MK_v(1)), MK_v(1)), true ); }
void interval_set_find_4_bicremental_types() { typedef IntervalSet<T> IntervalSetT; typedef typename IntervalSetT::interval_type IntervalT; typedef typename IntervalSetT::const_iterator c_iterator; IntervalT itv = I_D(3,5); IntervalSetT set_a; set_a.add(C_D(1,3)).add(I_I(6,11)); typename IntervalSetT::const_iterator found = set_a.find(MK_v(6)); BOOST_CHECK_EQUAL( *found, I_I(6,11) ); found = set_a.find(MK_v(5)); BOOST_CHECK_EQUAL( found == set_a.end(), true ); c_iterator found1 = set_a.find(MK_v(6)); c_iterator found2 = icl::find(set_a, MK_v(6)); BOOST_CHECK ( found1 == found2 ); BOOST_CHECK_EQUAL( *found1, *found2 ); BOOST_CHECK_EQUAL( *found1, I_I(6,11) ); found1 = set_a.find(MK_v(5)); BOOST_CHECK_EQUAL( found1 == set_a.end(), true ); //LAW map c; key k: k in dom(c) => contains(c, *find(c, k)) BOOST_CHECK( icl::contains(set_a, *icl::find(set_a, MK_v(2))) ); BOOST_CHECK( icl::contains(set_a, *set_a.find(MK_v(11))) ); BOOST_CHECK( icl::contains(set_a, MK_v(2)) ); BOOST_CHECK( icl::contains(set_a, MK_v(10)) ); BOOST_CHECK( !icl::contains(set_a, MK_v(1)) ); BOOST_CHECK( !icl::contains(set_a, MK_v(3)) ); BOOST_CHECK( icl::intersects(set_a, MK_v(2)) ); BOOST_CHECK( icl::intersects(set_a, MK_v(10)) ); BOOST_CHECK( !icl::intersects(set_a, MK_v(1)) ); BOOST_CHECK( !icl::intersects(set_a, MK_v(3)) ); }
void discrete_interval_ctor__dis_4_dyn_v_sta() // discrete && (dynamic or static) { BOOST_CHECK_EQUAL( IntervalT(MK_v(3)), IntervalT(MK_v(3)) ); BOOST_CHECK_EQUAL( icl::contains(IntervalT(MK_v(1)), MK_v(1)), true ); }