/////////////////////////////////////////////////////////////////////////////// // // Copyright (c) 2015 Microsoft Corporation. All rights reserved. // // This code is licensed under the MIT License (MIT). // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. // /////////////////////////////////////////////////////////////////////////////// #include // for AssertionHandler, StringRef, TEST_CASE #include // for static_bounds, static_bounds_dynamic_range_t #include // for ptrdiff_t, size_t namespace gsl { struct fail_fast; } // namespace gsl using namespace std; using namespace gsl; namespace { void use(std::ptrdiff_t&) {} } TEST_CASE("basic_bounds") { for (auto point : static_bounds{2}) { for (decltype(point)::size_type j = 0; j < static_cast(decltype(point)::rank); j++) { use(j); use(point[static_cast(j)]); } } } TEST_CASE("bounds_basic") { static_bounds<3, 4, 5> b; const auto a = b.slice(); (void) a; static_bounds<4, dynamic_range, 2> x{4}; x.slice().slice(); } TEST_CASE("arrayview_iterator") { static_bounds<4, dynamic_range, 2> bounds{3}; const auto itr = bounds.begin(); (void) itr; #ifdef CONFIRM_COMPILATION_ERRORS multi_span av(nullptr, bounds); auto itr2 = av.cbegin(); for (auto& v : av) { v = 4; } fill(av.begin(), av.end(), 0); #endif } TEST_CASE("bounds_convertible") { static_bounds<7, 4, 2> b1; static_bounds<7, dynamic_range, 2> b2 = b1; (void) b2; #ifdef CONFIRM_COMPILATION_ERRORS static_bounds<7, dynamic_range, 1> b4 = b2; #endif static_bounds b3 = b1; static_bounds<7, 4, 2> b4 = b3; (void) b4; static_bounds b11; static_bounds b5; static_bounds<34> b6; b5 = static_bounds<20>(); CHECK_THROWS_AS(b6 = b5, fail_fast); b5 = static_bounds<34>(); b6 = b5; CHECK(b5 == b6); CHECK(b5.size() == b6.size()); }