2
0
mirror of https://github.com/boostorg/icl.git synced 2026-01-19 04:12:13 +00:00

Fixed issues 20 and 25. The empty interval is unordered wrt. non emtpy ones and does not intersect

This commit is contained in:
Joachim Faulhaber
2023-05-19 19:42:27 +02:00
parent e6c06ddee1
commit beae763e57
4 changed files with 43 additions and 8 deletions

View File

@@ -909,11 +909,9 @@ template<class Type>
typename boost::enable_if<is_interval<Type>, bool>::type
operator < (const Type& left, const Type& right)
{
if(icl::is_empty(left))
return !icl::is_empty(right);
else
return lower_less(left,right)
|| (lower_equal(left,right) && upper_less(left,right));
return (!icl::is_empty(left) && !icl::is_empty(right))
&& ( lower_less(left,right)
|| (lower_equal(left,right) && upper_less(left,right)) );
}
template<class Type>
@@ -923,6 +921,27 @@ operator > (const Type& left, const Type& right)
return right < left;
}
//- operator <= ----------------------------------------------------------------
template<class Type>
inline typename boost::enable_if<is_interval<Type>, bool>::type
operator <= (const Type& left, const Type& right)
{
if(icl::is_empty(left) || icl::is_empty(right))
return false;
return !(left > right);
}
template<class Type>
inline typename boost::enable_if<is_interval<Type>, bool>::type
operator >= (const Type& left, const Type& right)
{
if(icl::is_empty(left) || icl::is_empty(right))
return false;
return !(left < right);
}
//------------------------------------------------------------------------------

View File

@@ -902,7 +902,7 @@ typename enable_if<mpl::and_< is_interval_container<Type>
bool>::type
intersects(const Type& left, const CoType& right)
{
return icl::find(left, right) != left.end();
return !is_empty(right) && icl::find(left, right) != left.end();
}

View File

@@ -234,3 +234,18 @@ BOOST_AUTO_TEST_CASE(test_ticket_12926)
BOOST_CHECK_EQUAL(a.size(), 200);
}
BOOST_AUTO_TEST_CASE(github_25_intersects_for_empty_interval_throws)
{
typedef boost::icl::interval_set<int> ItvSet;
typedef ItvSet::interval_type Itv;
ItvSet itv_set(Itv::right_open(2,7));
BOOST_CHECK_EQUAL(false, intersects(itv_set, Itv::right_open(3,3)));
ItvSet mt_set;
BOOST_CHECK_EQUAL(false, intersects(mt_set, Itv::right_open(3,3)));
BOOST_CHECK_EQUAL(false, intersects(mt_set, Itv::right_open(3,5)));
mt_set.insert(Itv::right_open(0,0));
ItvSet mt_set2; //
BOOST_CHECK_EQUAL(mt_set, mt_set2);
BOOST_CHECK_EQUAL(false, intersects(mt_set, Itv::right_open(-1,-1)));
}

View File

@@ -126,8 +126,9 @@ void interval_less_4_integral_types()
BOOST_CHECK_EQUAL(icl::interval<T>::open(v2,v3) < icl::interval<T>::right_open(v7,v7), false);
BOOST_CHECK_EQUAL(icl::interval<T>::left_open(v3,v3) < icl::interval<T>::closed(v7,v3), false);
BOOST_CHECK_EQUAL(IntervalT() < IntervalT(v3,v4), true);
BOOST_CHECK_EQUAL(icl::interval<T>::open(v2,v3) < icl::interval<T>::right_open(v7,v8), true);
BOOST_CHECK_EQUAL(IntervalT() < IntervalT(v3,v4), false);
BOOST_CHECK_EQUAL(icl::interval<T>::open(v2,v3) < icl::interval<T>::right_open(v7,v8), false);
BOOST_CHECK_NE (icl::interval<T>::open(v2,v3), icl::interval<T>::right_open(v7,v8));
//I: (I)nside = closed bound
//C: left open bound