Added comparison operators.

This commit is contained in:
Neil MacIntosh 2016-05-29 14:05:09 -07:00
parent 25ff7eca1f
commit d63c9803da
2 changed files with 30 additions and 18 deletions

View File

@ -481,26 +481,30 @@ private:
}; };
#if 0 // TODO
// [span.comparison], span comparison operators // [span.comparison], span comparison operators
template <class ElementType, ptrdiff_t Extent> template <class ElementType, ptrdiff_t Extent>
constexpr bool operator==(const span<ElementType, Extent>& l, const span<ElementType, Extent>& r) const noexcept; constexpr bool operator==(const span<ElementType, Extent>& l, const span<ElementType, Extent>& r) noexcept
{ return std::equal(l.begin(), l.end(), r.begin(), r.end()); }
template <class ElementType, ptrdiff_t Extent> template <class ElementType, ptrdiff_t Extent>
constexpr bool operator!=(const span<ElementType, Extent>& l, const span<ElementType, Extent>& r) const noexcept; constexpr bool operator!=(const span<ElementType, Extent>& l, const span<ElementType, Extent>& r) noexcept
{ return !(l == r); }
template <class ElementType, ptrdiff_t Extent> template <class ElementType, ptrdiff_t Extent>
constexpr bool operator<(const span<ElementType, Extent>& l, const span<ElementType, Extent>& r) const noexcept; constexpr bool operator<(const span<ElementType, Extent>& l, const span<ElementType, Extent>& r) noexcept
{ return std::lexicographical_compare(l.begin(), l.end(), r.begin(), r.end()); }
template <class ElementType, ptrdiff_t Extent> template <class ElementType, ptrdiff_t Extent>
constexpr bool operator<=(const span<ElementType, Extent>& l, const span<ElementType, Extent>& r) const noexcept; constexpr bool operator<=(const span<ElementType, Extent>& l, const span<ElementType, Extent>& r) noexcept
{ return !(l > r); }
template <class ElementType, ptrdiff_t Extent> template <class ElementType, ptrdiff_t Extent>
constexpr bool operator>(const span<ElementType, Extent>& l, const span<ElementType, Extent>& r) const noexcept; constexpr bool operator>(const span<ElementType, Extent>& l, const span<ElementType, Extent>& r) noexcept
{ return r < l; }
template <class ElementType, ptrdiff_t Extent> template <class ElementType, ptrdiff_t Extent>
constexpr bool operator>=(const span<ElementType, Extent>& l, const span<ElementType, Extent>& r) const noexcept; constexpr bool operator>=(const span<ElementType, Extent>& l, const span<ElementType, Extent>& r) noexcept
#endif { return !(l < r); }
#if 0 // TODO #if 0 // TODO

View File

@ -801,23 +801,30 @@ SUITE(span_tests)
} }
} }
#if 0
TEST(comparison_operators) TEST(comparison_operators)
{ {
{ {
int arr[10][2]; span<int> s1 = nullptr;
auto s1 = as_span(arr); span<int> s2 = nullptr;
span<const int, dynamic_range, 2> s2 = s1;
CHECK(s1 == s2); CHECK(s1 == s2);
CHECK(!(s1 != s2));
span<int, 20> s3 = as_span(s1, dim<>(20)); CHECK(!(s1 < s2));
CHECK(s3 == s2 && s3 == s1); CHECK(s1 <= s2);
CHECK(!(s1 > s2));
CHECK(s1 >= s2);
CHECK(s2 == s1);
CHECK(!(s2 != s1));
CHECK(!(s2 < s1));
CHECK(s2 <= s1);
CHECK(!(s2 > s1));
CHECK(s2 >= s1);
} }
{ {
auto s1 = nullptr; int arr[] = {2, 1};
auto s2 = nullptr; span<int> s1 = arr;
span<int> s2 = arr;
CHECK(s1 == s2); CHECK(s1 == s2);
CHECK(!(s1 != s2)); CHECK(!(s1 != s2));
CHECK(!(s1 < s2)); CHECK(!(s1 < s2));
@ -914,6 +921,7 @@ SUITE(span_tests)
} }
} }
#if 0
TEST(fixed_size_conversions) TEST(fixed_size_conversions)
{ {
int arr[] = {1, 2, 3, 4}; int arr[] = {1, 2, 3, 4};