/* SPDX-License-Identifier: GPL-2.0-or-later */ /* * Copyright (C) 2020, Google Inc. * * Span tests */ /* * Include first to ensure the header is self-contained, as there's no span.cpp * in libcamera. */ #include #include #include #include #include "test.h" using namespace std; using namespace libcamera; class SpanTest : public Test { protected: int run() { int i[4]{ 1, 2, 3, 4 }; std::array a{ 1, 2, 3, 4 }; const std::array ca{ 1, 2, 3, 4 }; std::vector v{ 1, 2, 3, 4 }; const std::vector cv{ 1, 2, 3, 4 }; /* * Compile-test construction and usage of spans with static * extent. Commented-out tests are expected not to compile, or * to generate undefined behaviour. */ Span{}; /* Span{}; */ Span{ &i[0], 4 }; Span{ &i[0], &i[3] }; Span{ i }; /* Span{ i }; */ /* Span{ i }; */ Span{ a }; Span{ a }; /* Span{ a }; */ /* Span{ a }; */ Span{ ca }; /* Span{ ca }; */ /* Span{ ca }; */ /* Span{ ca }; */ Span{ v }; Span{ v }; /* Span{ v }; */ Span{ v }; /* Span{ v }; */ /* Span{ v }; */ Span staticSpan{ i }; Span{ staticSpan }; Span{ staticSpan }; /* Span{ staticSpan }; */ staticSpan = Span{ v }; if (*staticSpan.begin() != 1) { std::cout << "Span::begin() failed" << std::endl; return TestFail; } if (*staticSpan.cbegin() != 1) { std::cout << "Span::cbegin() failed" << std::endl; return TestFail; } staticSpan.end(); staticSpan.cend(); if (*staticSpan.rbegin() != 4) { std::cout << "Span::rbegin() failed" << std::endl; return TestFail; } if (*staticSpan.crbegin() != 4) { std::cout << "Span::crbegin() failed" << std::endl; return TestFail; } staticSpan.rend(); staticSpan.crend(); staticSpan.front(); staticSpan.back(); staticSpan[0]; staticSpan.data(); staticSpan.size(); staticSpan.size_bytes(); staticSpan.empty(); staticSpan.first<2>(); staticSpan.first(2); /* staticSpan.first<6>(); */ /* staticSpan.first(6); */ staticSpan.last<2>(); staticSpan.last(2); /* staticSpan.last<6>(); */ /* staticSpan.last(6); */ staticSpan.subspan<1>(); staticSpan.subspan<1, 2>(); staticSpan.subspan(1); staticSpan.subspan(1, 2); /* staticSpan.subspan(2, 4); */ /* * Compile-test construction and usage of spans with dynamic * extent. Commented-out tests are expected not to compile, or * to generate undefined behaviour. */ Span{}; Span{ &i[0], 4 }; Span{ &i[0], &i[3] }; Span{ i }; /* Span{ i }; */ Span{ a }; Span{ a }; /* Span{ a }; */ Span{ ca }; /* Span{ca}; */ /* Span{ca}; */ Span{ v }; Span{ v }; /* Span{ v }; */ Span{ cv }; /* Span{ cv }; */ /* Span{ cv }; */ Span dynamicSpan{ i }; Span{ dynamicSpan }; Span{ dynamicSpan }; dynamicSpan = Span{ a }; if (*dynamicSpan.begin() != 1) { std::cout << "Span::begin() failed" << std::endl; return TestFail; } if (*dynamicSpan.cbegin() != 1) { std::cout << "Span::cbegin() failed" << std::endl; return TestFail; } dynamicSpan.end(); dynamicSpan.cend(); if (*dynamicSpan.rbegin() != 4) { std::cout << "Span::rbegin() failed" << std::endl; return TestFail; } if (*dynamicSpan.crbegin() != 4) { std::cout << "Span::crbegin() failed" << std::endl; return TestFail; } dynamicSpan.rend(); dynamicSpan.crend(); dynamicSpan.front(); dynamicSpan.back(); dynamicSpan[0]; dynamicSpan.data(); dynamicSpan.size(); dynamicSpan.size_bytes(); dynamicSpan.empty(); dynamicSpan.first<2>(); dynamicSpan.first(2); /* dynamicSpan.first<6>(); */ /* dynamicSpan.first(6); */ dynamicSpan.last<2>(); dynamicSpan.last(2); /* dynamicSpan.last<6>(); */ /* dynamicSpan.last(6); */ dynamicSpan.subspan<1>(); dynamicSpan.subspan<1, 2>(); dynamicSpan.subspan(1); dynamicSpan.subspan(1, 2); /* dynamicSpan.subspan(2, 4); */ return TestPass; } }; TEST_REGISTER(SpanTest)