diff options
author | Marshall Clow <mclow.lists@gmail.com> | 2019-03-22 22:32:20 +0000 |
---|---|---|
committer | Marshall Clow <mclow.lists@gmail.com> | 2019-03-22 22:32:20 +0000 |
commit | e1cd11d80f5929e916de861f83d672ab72e29046 (patch) | |
tree | 98a5d19f4081728c1fd8281778216a14497d5ef3 /libcxx/test/std/iterators | |
parent | 80ff58e37c96df05bd1811083267c9c53ef1b85f (diff) | |
download | bcm5719-llvm-e1cd11d80f5929e916de861f83d672ab72e29046.tar.gz bcm5719-llvm-e1cd11d80f5929e916de861f83d672ab72e29046.zip |
Fix a minor bug with std::next and prev not and negative numbers. In particular, std::prev cannot require Bidirectional Iterators, because you might 'go back' -1 places, which goes forward. Thanks to Ville and Jonathan for the bug report.
llvm-svn: 356818
Diffstat (limited to 'libcxx/test/std/iterators')
-rw-r--r-- | libcxx/test/std/iterators/iterator.primitives/iterator.operations/next.pass.cpp | 20 | ||||
-rw-r--r-- | libcxx/test/std/iterators/iterator.primitives/iterator.operations/prev.pass.cpp | 16 |
2 files changed, 23 insertions, 13 deletions
diff --git a/libcxx/test/std/iterators/iterator.primitives/iterator.operations/next.pass.cpp b/libcxx/test/std/iterators/iterator.primitives/iterator.operations/next.pass.cpp index 87f79fbd32b..26ec32cab29 100644 --- a/libcxx/test/std/iterators/iterator.primitives/iterator.operations/next.pass.cpp +++ b/libcxx/test/std/iterators/iterator.primitives/iterator.operations/next.pass.cpp @@ -55,10 +55,12 @@ int main(int, char**) { { const char* s = "1234567890"; - test(input_iterator<const char*>(s), 10, input_iterator<const char*>(s+10)); - test(forward_iterator<const char*>(s), 10, forward_iterator<const char*>(s+10)); - test(bidirectional_iterator<const char*>(s), 10, bidirectional_iterator<const char*>(s+10)); - test(random_access_iterator<const char*>(s), 10, random_access_iterator<const char*>(s+10)); + test(input_iterator<const char*>(s), 10, input_iterator<const char*>(s+10)); + test(forward_iterator<const char*>(s), 10, forward_iterator<const char*>(s+10)); + test(bidirectional_iterator<const char*>(s), 10, bidirectional_iterator<const char*>(s+10)); + test(bidirectional_iterator<const char*>(s+10), -10, bidirectional_iterator<const char*>(s)); + test(random_access_iterator<const char*>(s), 10, random_access_iterator<const char*>(s+10)); + test(random_access_iterator<const char*>(s+10), -10, random_access_iterator<const char*>(s)); test(s, 10, s+10); test(input_iterator<const char*>(s), input_iterator<const char*>(s+1)); @@ -70,10 +72,12 @@ int main(int, char**) #if TEST_STD_VER > 14 { constexpr const char* s = "1234567890"; - static_assert( constexpr_test(input_iterator<const char*>(s), 10, input_iterator<const char*>(s+10)), "" ); - static_assert( constexpr_test(forward_iterator<const char*>(s), 10, forward_iterator<const char*>(s+10)), "" ); - static_assert( constexpr_test(bidirectional_iterator<const char*>(s), 10, bidirectional_iterator<const char*>(s+10)), "" ); - static_assert( constexpr_test(random_access_iterator<const char*>(s), 10, random_access_iterator<const char*>(s+10)), "" ); + static_assert( constexpr_test(input_iterator<const char*>(s), 10, input_iterator<const char*>(s+10)), "" ); + static_assert( constexpr_test(forward_iterator<const char*>(s), 10, forward_iterator<const char*>(s+10)), "" ); + static_assert( constexpr_test(bidirectional_iterator<const char*>(s), 10, bidirectional_iterator<const char*>(s+10)), "" ); + static_assert( constexpr_test(bidirectional_iterator<const char*>(s+10), -10, bidirectional_iterator<const char*>(s)), "" ); + static_assert( constexpr_test(random_access_iterator<const char*>(s), 10, random_access_iterator<const char*>(s+10)), "" ); + static_assert( constexpr_test(random_access_iterator<const char*>(s+10), -10, random_access_iterator<const char*>(s)), "" ); static_assert( constexpr_test(s, 10, s+10), "" ); static_assert( constexpr_test(input_iterator<const char*>(s), input_iterator<const char*>(s+1)), "" ); diff --git a/libcxx/test/std/iterators/iterator.primitives/iterator.operations/prev.pass.cpp b/libcxx/test/std/iterators/iterator.primitives/iterator.operations/prev.pass.cpp index 2ee0444ce14..8faaf3d05f0 100644 --- a/libcxx/test/std/iterators/iterator.primitives/iterator.operations/prev.pass.cpp +++ b/libcxx/test/std/iterators/iterator.primitives/iterator.operations/prev.pass.cpp @@ -8,7 +8,7 @@ // <iterator> -// template <BidirectionalIterator Iter> +// template <InputIterator Iter> // Iter prev(Iter x, Iter::difference_type n = 1); #include <iterator> @@ -53,8 +53,11 @@ int main(int, char**) { { const char* s = "1234567890"; - test(bidirectional_iterator<const char*>(s+10), 10, bidirectional_iterator<const char*>(s)); - test(random_access_iterator<const char*>(s+10), 10, random_access_iterator<const char*>(s)); + test(forward_iterator <const char*>(s), -10, forward_iterator <const char*>(s+10)); + test(bidirectional_iterator<const char*>(s+10), 10, bidirectional_iterator<const char*>(s)); + test(bidirectional_iterator<const char*>(s), -10, bidirectional_iterator<const char*>(s+10)); + test(random_access_iterator<const char*>(s+10), 10, random_access_iterator<const char*>(s)); + test(random_access_iterator<const char*>(s), -10, random_access_iterator<const char*>(s+10)); test(s+10, 10, s); test(bidirectional_iterator<const char*>(s+1), bidirectional_iterator<const char*>(s)); @@ -64,8 +67,11 @@ int main(int, char**) #if TEST_STD_VER > 14 { constexpr const char* s = "1234567890"; - static_assert( constexpr_test(bidirectional_iterator<const char*>(s+10), 10, bidirectional_iterator<const char*>(s)), "" ); - static_assert( constexpr_test(random_access_iterator<const char*>(s+10), 10, random_access_iterator<const char*>(s)), "" ); + static_assert( constexpr_test(forward_iterator <const char*>(s), -10, forward_iterator <const char*>(s+10)), "" ); + static_assert( constexpr_test(bidirectional_iterator<const char*>(s+10), 10, bidirectional_iterator<const char*>(s)), "" ); + static_assert( constexpr_test(forward_iterator <const char*>(s), -10, forward_iterator <const char*>(s+10)), "" ); + static_assert( constexpr_test(random_access_iterator<const char*>(s+10), 10, random_access_iterator<const char*>(s)), "" ); + static_assert( constexpr_test(forward_iterator <const char*>(s), -10, forward_iterator <const char*>(s+10)), "" ); static_assert( constexpr_test(s+10, 10, s), "" ); static_assert( constexpr_test(bidirectional_iterator<const char*>(s+1), bidirectional_iterator<const char*>(s)), "" ); |