From: Louis Dionne Date: Mon, 10 Feb 2020 12:47:27 +0000 (+0100) Subject: [libc++][span] Add failing tests for span::first and span::last X-Git-Tag: 2020.06-alpha~123^2~2464 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=f2af4f8a45dbd0d1de950a64f1b4fbf618c70657;p=platform%2Fupstream%2Fllvm.git [libc++][span] Add failing tests for span::first and span::last Both methods have compile time constraints that we should test against. Patch by Michael Schellenberger Costa Differential Revision: https://reviews.llvm.org/D71999 --- diff --git a/libcxx/test/std/containers/views/span.sub/first.fail.cpp b/libcxx/test/std/containers/views/span.sub/first.fail.cpp new file mode 100644 index 000000000000..5bced0c9f3a2 --- /dev/null +++ b/libcxx/test/std/containers/views/span.sub/first.fail.cpp @@ -0,0 +1,40 @@ +// -*- C++ -*- +//===------------------------------ span ---------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===---------------------------------------------------------------------===// +// UNSUPPORTED: c++98, c++03, c++11, c++14, c++17 + +// + +// template +// constexpr span first() const; +// +// constexpr span first(size_type count) const; +// +// Requires: Count <= size(). + +#include + +#include "test_macros.h" + +constexpr int carr[] = {1, 2, 3, 4}; + +int main(int, char**) { + std::span sp(carr); + + // Count too large + { + [[maybe_unused]] auto s1 = sp.first<5>(); // expected-error-re@span:* {{static_assert failed{{( due to requirement '.*')?}} "Count out of range in span::first()"}} + } + + // Count numeric_limits + { + [[maybe_unused]] auto s1 = sp.first(); // expected-error-re@span:* {{static_assert failed{{( due to requirement '.*')?}} "Count out of range in span::first()"}} + } + + return 0; +} diff --git a/libcxx/test/std/containers/views/span.sub/first.pass.cpp b/libcxx/test/std/containers/views/span.sub/first.pass.cpp index f2e77b597b28..0e0dd7278a29 100644 --- a/libcxx/test/std/containers/views/span.sub/first.pass.cpp +++ b/libcxx/test/std/containers/views/span.sub/first.pass.cpp @@ -15,7 +15,7 @@ // // constexpr span first(size_type count) const; // -// Requires: 0 <= Count && Count <= size(). +// Requires: Count <= size(). #include diff --git a/libcxx/test/std/containers/views/span.sub/last.fail.cpp b/libcxx/test/std/containers/views/span.sub/last.fail.cpp new file mode 100644 index 000000000000..634068967dd2 --- /dev/null +++ b/libcxx/test/std/containers/views/span.sub/last.fail.cpp @@ -0,0 +1,40 @@ +// -*- C++ -*- +//===------------------------------ span ---------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===---------------------------------------------------------------------===// +// UNSUPPORTED: c++98, c++03, c++11, c++14, c++17 + +// + +// template +// constexpr span last() const; +// +// constexpr span last(size_type count) const; +// +// Requires: Count <= size(). + +#include + +#include "test_macros.h" + +constexpr int carr[] = {1, 2, 3, 4}; + +int main(int, char**) { + std::span sp(carr); + + // Count too large + { + [[maybe_unused]] auto s1 = sp.last<5>(); // expected-error-re@span:* {{static_assert failed{{( due to requirement '.*')?}} "Count out of range in span::last()"}} + } + + // Count numeric_limits + { + [[maybe_unused]] auto s1 = sp.last(); // expected-error-re@span:* {{static_assert failed{{( due to requirement '.*')?}} "Count out of range in span::last()"}} + } + + return 0; +} diff --git a/libcxx/test/std/containers/views/span.sub/last.pass.cpp b/libcxx/test/std/containers/views/span.sub/last.pass.cpp index 6e0fb3c1d60e..2c4837901280 100644 --- a/libcxx/test/std/containers/views/span.sub/last.pass.cpp +++ b/libcxx/test/std/containers/views/span.sub/last.pass.cpp @@ -15,7 +15,7 @@ // // constexpr span last(size_type count) const; // -// Requires: 0 <= Count && Count <= size(). +// Requires: Count <= size(). #include