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:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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)));
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user