aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorNeil MacIntosh <neilmac@microsoft.com>2016-08-08 12:06:47 -0700
committerNeil MacIntosh <neilmac@microsoft.com>2016-08-08 12:06:47 -0700
commit82389aa630a28ec520b115b9bcb770a5ae495860 (patch)
tree87a232f46e2196dc8057a9942e1feb547325a4d5 /tests
parent9ab3a2ac3960145c309e3935851ee5e4337c93ee (diff)
downloadplatform_external_Microsoft-GSL-82389aa630a28ec520b115b9bcb770a5ae495860.tar.gz
platform_external_Microsoft-GSL-82389aa630a28ec520b115b9bcb770a5ae495860.tar.bz2
platform_external_Microsoft-GSL-82389aa630a28ec520b115b9bcb770a5ae495860.zip
Fixed up iterator implementation to allow conversion from iterator to
const_iterator.
Diffstat (limited to 'tests')
-rw-r--r--tests/span_tests.cpp98
1 files changed, 80 insertions, 18 deletions
diff --git a/tests/span_tests.cpp b/tests/span_tests.cpp
index 8c9829d..4058463 100644
--- a/tests/span_tests.cpp
+++ b/tests/span_tests.cpp
@@ -787,20 +787,90 @@ SUITE(span_tests)
}
}
- TEST(iterator)
+ TEST(iterator_default_init)
{
span<int>::iterator it1;
span<int>::iterator it2;
CHECK(it1 == it2);
}
- TEST(const_iterator)
+ TEST(const_iterator_default_init)
{
span<int>::const_iterator it1;
span<int>::const_iterator it2;
CHECK(it1 == it2);
}
+ TEST(iterator_conversions)
+ {
+ span<int>::iterator badIt;
+ span<int>::const_iterator badConstIt;
+ CHECK(badIt == badConstIt);
+
+ int a[] = { 1, 2, 3, 4 };
+ span<int> s = a;
+
+ auto it = s.begin();
+ auto cit = s.cbegin();
+
+ CHECK(it == cit);
+ CHECK(cit == it);
+
+ span<int>::const_iterator cit2 = it;
+ CHECK(cit2 == cit);
+
+ span<int>::const_iterator cit3 = it + 4;
+ CHECK(cit3 == s.cend());
+ }
+
+ TEST(iterator_comparisons)
+ {
+ int a[] = { 1, 2, 3, 4 };
+ {
+ span<int> s = a;
+ span<int>::iterator it = s.begin();
+ auto it2 = it + 1;
+ span<int>::const_iterator cit = s.cbegin();
+ auto cit2 = s.cbegin();
+
+ CHECK(it == cit);
+ CHECK(cit == it);
+ CHECK(it == it);
+ CHECK(cit == cit);
+ CHECK(cit == s.begin());
+ CHECK(s.begin() == cit);
+ CHECK(s.cbegin() == cit);
+ CHECK(it == s.begin());
+ CHECK(s.begin() == it);
+
+ CHECK(it != it2);
+ CHECK(it2 != it);
+ CHECK(it != s.end());
+ CHECK(it2 != s.end());
+ CHECK(s.end() != it);
+ CHECK(it2 != cit);
+ CHECK(cit != it2);
+
+ CHECK(it < it2);
+ CHECK(it <= it2);
+ CHECK(it2 <= s.end());
+ CHECK(it < s.end());
+ CHECK(it <= cit);
+ CHECK(cit <= it);
+ CHECK(cit < it2);
+ CHECK(cit <= it2);
+ CHECK(cit < s.end());
+ CHECK(cit <= s.end());
+
+ CHECK(it2 > it);
+ CHECK(it2 >= it);
+ CHECK(s.end() > it2);
+ CHECK(s.end() >= it2);
+ CHECK(it2 > cit);
+ CHECK(it2 >= cit);
+ }
+ }
+
TEST(begin_end)
{
{
@@ -867,25 +937,21 @@ SUITE(span_tests)
++it;
CHECK(it - first == 1);
CHECK(*it == 2);
- *it = 22;
- CHECK(*it == 22);
CHECK(beyond - it == 3);
+ int last = 0;
it = first;
CHECK(it == first);
while (it != s.cend())
{
- *it = 5;
+ CHECK(*it == last + 1);
+
+ last = *it;
++it;
}
CHECK(it == beyond);
CHECK(it - beyond == 0);
-
- for (auto& n : s)
- {
- CHECK(n == 5);
- }
}
}
@@ -955,25 +1021,21 @@ SUITE(span_tests)
++it;
CHECK(it - first == 1);
CHECK(*it == 3);
- *it = 22;
- CHECK(*it == 22);
CHECK(beyond - it == 3);
it = first;
CHECK(it == first);
+ int last = 5;
while (it != s.crend())
{
- *it = 5;
+ CHECK(*it == last - 1);
+ last = *it;
+
++it;
}
CHECK(it == beyond);
CHECK(it - beyond == 0);
-
- for (auto& n : s)
- {
- CHECK(n == 5);
- }
}
}