diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2017-05-17 20:23:06 +0000 |
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2017-05-17 20:23:06 +0000 |
| commit | 318f9824bdefe5bdd518730a92469f8fd0e61ff6 (patch) | |
| tree | 5cf995c3ab4cbc06e5061d8213f17c35ae19ff50 /test/std | |
| parent | 7582e3938bb9fb3e4664efdfb2313df29f27b70b (diff) | |
Notes
Diffstat (limited to 'test/std')
6 files changed, 128 insertions, 5 deletions
diff --git a/test/std/iterators/iterator.primitives/iterator.operations/advance.pass.cpp b/test/std/iterators/iterator.primitives/iterator.operations/advance.pass.cpp index e395da299dc7b..e5bd5603b8e38 100644 --- a/test/std/iterators/iterator.primitives/iterator.operations/advance.pass.cpp +++ b/test/std/iterators/iterator.primitives/iterator.operations/advance.pass.cpp @@ -9,14 +9,16 @@ // <iterator> +// All of these became constexpr in C++17 +// // template <InputIterator Iter> -// void advance(Iter& i, Iter::difference_type n); +// constexpr void advance(Iter& i, Iter::difference_type n); // // template <BidirectionalIterator Iter> -// void advance(Iter& i, Iter::difference_type n); +// constexpr void advance(Iter& i, Iter::difference_type n); // // template <RandomAccessIterator Iter> -// void advance(Iter& i, Iter::difference_type n); +// constexpr void advance(Iter& i, Iter::difference_type n); #include <iterator> #include <cassert> @@ -31,8 +33,19 @@ test(It i, typename std::iterator_traits<It>::difference_type n, It x) assert(i == x); } +#if TEST_STD_VER > 14 +template <class It> +constexpr bool +constepxr_test(It i, typename std::iterator_traits<It>::difference_type n, It x) +{ + std::advance(i, n); + return i == x; +} +#endif + int main() { + { 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)); @@ -42,4 +55,18 @@ int main() test(random_access_iterator<const char*>(s+5), -5, random_access_iterator<const char*>(s)); test(s+5, 5, s+10); test(s+5, -5, s); + } +#if TEST_STD_VER > 14 + { + constexpr const char* s = "1234567890"; + static_assert( constepxr_test(input_iterator<const char*>(s), 10, input_iterator<const char*>(s+10)), "" ); + static_assert( constepxr_test(forward_iterator<const char*>(s), 10, forward_iterator<const char*>(s+10)), "" ); + static_assert( constepxr_test(bidirectional_iterator<const char*>(s+5), 5, bidirectional_iterator<const char*>(s+10)), "" ); + static_assert( constepxr_test(bidirectional_iterator<const char*>(s+5), -5, bidirectional_iterator<const char*>(s)), "" ); + static_assert( constepxr_test(random_access_iterator<const char*>(s+5), 5, random_access_iterator<const char*>(s+10)), "" ); + static_assert( constepxr_test(random_access_iterator<const char*>(s+5), -5, random_access_iterator<const char*>(s)), "" ); + static_assert( constepxr_test(s+5, 5, s+10), "" ); + static_assert( constepxr_test(s+5, -5, s), "" ); + } +#endif } diff --git a/test/std/iterators/iterator.primitives/iterator.operations/distance.pass.cpp b/test/std/iterators/iterator.primitives/iterator.operations/distance.pass.cpp index 7fef635838c31..2f16fcb38236f 100644 --- a/test/std/iterators/iterator.primitives/iterator.operations/distance.pass.cpp +++ b/test/std/iterators/iterator.primitives/iterator.operations/distance.pass.cpp @@ -29,12 +29,33 @@ test(It first, It last, typename std::iterator_traits<It>::difference_type x) assert(std::distance(first, last) == x); } +#if TEST_STD_VER > 14 +template <class It> +constexpr bool +constexpr_test(It first, It last, typename std::iterator_traits<It>::difference_type x) +{ + return std::distance(first, last) == x; +} +#endif + int main() { + { const char* s = "1234567890"; test(input_iterator<const char*>(s), input_iterator<const char*>(s+10), 10); test(forward_iterator<const char*>(s), forward_iterator<const char*>(s+10), 10); test(bidirectional_iterator<const char*>(s), bidirectional_iterator<const char*>(s+10), 10); test(random_access_iterator<const char*>(s), random_access_iterator<const char*>(s+10), 10); test(s, s+10, 10); + } +#if TEST_STD_VER > 14 + { + constexpr const char* s = "1234567890"; + static_assert( constexpr_test(input_iterator<const char*>(s), input_iterator<const char*>(s+10), 10), ""); + static_assert( constexpr_test(forward_iterator<const char*>(s), forward_iterator<const char*>(s+10), 10), ""); + static_assert( constexpr_test(bidirectional_iterator<const char*>(s), bidirectional_iterator<const char*>(s+10), 10), ""); + static_assert( constexpr_test(random_access_iterator<const char*>(s), random_access_iterator<const char*>(s+10), 10), ""); + static_assert( constexpr_test(s, s+10, 10), ""); + } +#endif } diff --git a/test/std/iterators/iterator.primitives/iterator.operations/next.pass.cpp b/test/std/iterators/iterator.primitives/iterator.operations/next.pass.cpp index 0952588b0cb1d..e257b3eaaf31b 100644 --- a/test/std/iterators/iterator.primitives/iterator.operations/next.pass.cpp +++ b/test/std/iterators/iterator.primitives/iterator.operations/next.pass.cpp @@ -33,8 +33,25 @@ test(It i, It x) assert(std::next(i) == x); } +#if TEST_STD_VER > 14 +template <class It> +constexpr bool +constexpr_test(It i, typename std::iterator_traits<It>::difference_type n, It x) +{ + return std::next(i, n) == x; +} + +template <class It> +constexpr bool +constexpr_test(It i, It x) +{ + return std::next(i) == x; +} +#endif + int main() { + { 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)); @@ -47,4 +64,21 @@ int main() test(bidirectional_iterator<const char*>(s), bidirectional_iterator<const char*>(s+1)); test(random_access_iterator<const char*>(s), random_access_iterator<const char*>(s+1)); test(s, s+1); + } +#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(s, 10, s+10), "" ); + + static_assert( constexpr_test(input_iterator<const char*>(s), input_iterator<const char*>(s+1)), "" ); + static_assert( constexpr_test(forward_iterator<const char*>(s), forward_iterator<const char*>(s+1)), "" ); + static_assert( constexpr_test(bidirectional_iterator<const char*>(s), bidirectional_iterator<const char*>(s+1)), "" ); + static_assert( constexpr_test(random_access_iterator<const char*>(s), random_access_iterator<const char*>(s+1)), "" ); + static_assert( constexpr_test(s, s+1), "" ); + } +#endif } diff --git a/test/std/iterators/iterator.primitives/iterator.operations/prev.pass.cpp b/test/std/iterators/iterator.primitives/iterator.operations/prev.pass.cpp index 0641706c928bb..465cda1c47e42 100644 --- a/test/std/iterators/iterator.primitives/iterator.operations/prev.pass.cpp +++ b/test/std/iterators/iterator.primitives/iterator.operations/prev.pass.cpp @@ -31,8 +31,25 @@ test(It i, It x) assert(std::prev(i) == x); } +#if TEST_STD_VER > 14 +template <class It> +constexpr bool +constexpr_test(It i, typename std::iterator_traits<It>::difference_type n, It x) +{ + return std::prev(i, n) == x; +} + +template <class It> +constexpr bool +constexpr_test(It i, It x) +{ + return std::prev(i) == x; +} +#endif + int main() { + { 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)); @@ -41,4 +58,18 @@ int main() test(bidirectional_iterator<const char*>(s+1), bidirectional_iterator<const char*>(s)); test(random_access_iterator<const char*>(s+1), random_access_iterator<const char*>(s)); test(s+1, s); + } +#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(s+10, 10, s), "" ); + + static_assert( constexpr_test(bidirectional_iterator<const char*>(s+1), bidirectional_iterator<const char*>(s)), "" ); + static_assert( constexpr_test(random_access_iterator<const char*>(s+1), random_access_iterator<const char*>(s)), "" ); + static_assert( constexpr_test(s+1, s), "" ); + } +#endif + } diff --git a/test/std/utilities/optional/optional.object/optional.object.ctor/copy.pass.cpp b/test/std/utilities/optional/optional.object/optional.object.ctor/copy.pass.cpp index 5906d4edd1197..76c1fb82b866b 100644 --- a/test/std/utilities/optional/optional.object/optional.object.ctor/copy.pass.cpp +++ b/test/std/utilities/optional/optional.object/optional.object.ctor/copy.pass.cpp @@ -10,7 +10,7 @@ // UNSUPPORTED: c++98, c++03, c++11, c++14 // <optional> -// optional(const optional<T>& rhs); +// constexpr optional(const optional<T>& rhs); #include <optional> #include <type_traits> @@ -152,4 +152,9 @@ int main() { test_reference_extension(); } + { + constexpr std::optional<int> o1{4}; + constexpr std::optional<int> o2 = o1; + static_assert( *o2 == 4, "" ); + } } diff --git a/test/std/utilities/optional/optional.object/optional.object.ctor/move.pass.cpp b/test/std/utilities/optional/optional.object/optional.object.ctor/move.pass.cpp index 9f23e9b4381be..09aaa0561b51a 100644 --- a/test/std/utilities/optional/optional.object/optional.object.ctor/move.pass.cpp +++ b/test/std/utilities/optional/optional.object/optional.object.ctor/move.pass.cpp @@ -18,7 +18,7 @@ // <optional> -// optional(optional<T>&& rhs); +// constexpr optional(optional<T>&& rhs); #include <optional> #include <type_traits> @@ -206,4 +206,9 @@ int main() { test_reference_extension(); } + { + constexpr std::optional<int> o1{4}; + constexpr std::optional<int> o2 = std::move(o1); + static_assert( *o2 == 4, "" ); + } } |
