tst_QSpan: port to QTEST_THROW_ON_FAIL
Dogfooding the new QtTest 6.8 feature, and greatly simplifiying the source code. Change-Id: I0731d7291048e6bbed19666d1b6672e5cccaf27a Reviewed-by: Ahmad Samir <a.samirh78@gmail.com> (cherry picked from commit 157fcdf5afbe4e6b421713947ccdb4ee35116ee4) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
parent
9a86dba130
commit
ada5f8b646
@ -47,7 +47,9 @@ add_subdirectory(qset)
|
|||||||
add_subdirectory(qsharedpointer)
|
add_subdirectory(qsharedpointer)
|
||||||
add_subdirectory(qsize)
|
add_subdirectory(qsize)
|
||||||
add_subdirectory(qsizef)
|
add_subdirectory(qsizef)
|
||||||
|
if (NOT WASM) # QTBUG-121822
|
||||||
add_subdirectory(qspan)
|
add_subdirectory(qspan)
|
||||||
|
endif()
|
||||||
add_subdirectory(qstl)
|
add_subdirectory(qstl)
|
||||||
add_subdirectory(quniquehandle)
|
add_subdirectory(quniquehandle)
|
||||||
add_subdirectory(qvarlengtharray)
|
add_subdirectory(qvarlengtharray)
|
||||||
|
@ -10,4 +10,8 @@ endif()
|
|||||||
qt_internal_add_test(tst_qspan
|
qt_internal_add_test(tst_qspan
|
||||||
SOURCES
|
SOURCES
|
||||||
tst_qspan.cpp
|
tst_qspan.cpp
|
||||||
|
NO_BATCH # QTBUG-121815
|
||||||
|
DEFINES
|
||||||
|
QTEST_THROW_ON_FAIL
|
||||||
|
QTEST_THROW_ON_SKIP
|
||||||
)
|
)
|
||||||
|
@ -6,6 +6,10 @@
|
|||||||
#include <QList>
|
#include <QList>
|
||||||
#include <QTest>
|
#include <QTest>
|
||||||
|
|
||||||
|
#ifndef QTEST_THROW_ON_FAIL
|
||||||
|
# error This test requires QTEST_THROW_ON_FAIL being active.
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <array>
|
#include <array>
|
||||||
#ifdef __cpp_lib_span
|
#ifdef __cpp_lib_span
|
||||||
@ -144,9 +148,6 @@ private:
|
|||||||
template <typename T>
|
template <typename T>
|
||||||
const void *as_const_void(T *p) noexcept { return static_cast<const void *>(p); }
|
const void *as_const_void(T *p) noexcept { return static_cast<const void *>(p); }
|
||||||
|
|
||||||
#define RETURN_IF_FAILED() \
|
|
||||||
do { if (QTest::currentTestFailed()) return; } while (false)
|
|
||||||
|
|
||||||
void tst_QSpan::onlyZeroExtentSpansHaveDefaultCtors() const
|
void tst_QSpan::onlyZeroExtentSpansHaveDefaultCtors() const
|
||||||
{
|
{
|
||||||
static_assert(std::is_nothrow_default_constructible_v<QSpan<int, 0>>);
|
static_assert(std::is_nothrow_default_constructible_v<QSpan<int, 0>>);
|
||||||
@ -156,19 +157,15 @@ void tst_QSpan::onlyZeroExtentSpansHaveDefaultCtors() const
|
|||||||
|
|
||||||
QSpan<int, 0> si;
|
QSpan<int, 0> si;
|
||||||
check_null_span(si);
|
check_null_span(si);
|
||||||
RETURN_IF_FAILED();
|
|
||||||
|
|
||||||
QSpan<const int, 0> sci;
|
QSpan<const int, 0> sci;
|
||||||
check_null_span(sci);
|
check_null_span(sci);
|
||||||
RETURN_IF_FAILED();
|
|
||||||
|
|
||||||
QSpan<int> sdi;
|
QSpan<int> sdi;
|
||||||
check_null_span(sdi);
|
check_null_span(sdi);
|
||||||
RETURN_IF_FAILED();
|
|
||||||
|
|
||||||
QSpan<const int> sdci;
|
QSpan<const int> sdci;
|
||||||
check_null_span(sdci);
|
check_null_span(sdci);
|
||||||
RETURN_IF_FAILED();
|
|
||||||
|
|
||||||
static_assert(!std::is_default_constructible_v<QSpan<int, 1>>);
|
static_assert(!std::is_default_constructible_v<QSpan<int, 1>>);
|
||||||
static_assert(!std::is_default_constructible_v<QSpan<const int, 42>>);
|
static_assert(!std::is_default_constructible_v<QSpan<const int, 42>>);
|
||||||
@ -180,22 +177,18 @@ void tst_QSpan::zeroExtentSpansMaintainADataPointer() const
|
|||||||
QSpan<int, 0> si{&i, 0};
|
QSpan<int, 0> si{&i, 0};
|
||||||
QCOMPARE(si.data(), &i);
|
QCOMPARE(si.data(), &i);
|
||||||
check_empty_span_incl_subspans(si);
|
check_empty_span_incl_subspans(si);
|
||||||
RETURN_IF_FAILED();
|
|
||||||
|
|
||||||
QSpan<const int, 0> sci{&i, 0};
|
QSpan<const int, 0> sci{&i, 0};
|
||||||
QCOMPARE(sci.data(), &i);
|
QCOMPARE(sci.data(), &i);
|
||||||
check_empty_span_incl_subspans(sci);
|
check_empty_span_incl_subspans(sci);
|
||||||
RETURN_IF_FAILED();
|
|
||||||
|
|
||||||
QSpan<int, 0> sdi{&i, 0};
|
QSpan<int, 0> sdi{&i, 0};
|
||||||
QCOMPARE(sdi.data(), &i);
|
QCOMPARE(sdi.data(), &i);
|
||||||
check_empty_span_incl_subspans(sdi);
|
check_empty_span_incl_subspans(sdi);
|
||||||
RETURN_IF_FAILED();
|
|
||||||
|
|
||||||
QSpan<const int, 0> sdci{&i, 0};
|
QSpan<const int, 0> sdci{&i, 0};
|
||||||
QCOMPARE(sdci.data(), &i);
|
QCOMPARE(sdci.data(), &i);
|
||||||
check_empty_span_incl_subspans(sdci);
|
check_empty_span_incl_subspans(sdci);
|
||||||
RETURN_IF_FAILED();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T, std::size_t N>
|
template <typename T, std::size_t N>
|
||||||
@ -233,18 +226,14 @@ void tst_QSpan::check_nonempty_span(QSpan<T, N> s, qsizetype expectedSize) const
|
|||||||
// don't run into Mandates: Offset >= Extent
|
// don't run into Mandates: Offset >= Extent
|
||||||
if constexpr (N > 0) { // incl. N == std::dynamic_extent
|
if constexpr (N > 0) { // incl. N == std::dynamic_extent
|
||||||
check_empty_span_incl_subspans(s.template subspan<1>());
|
check_empty_span_incl_subspans(s.template subspan<1>());
|
||||||
RETURN_IF_FAILED();
|
|
||||||
}
|
}
|
||||||
check_empty_span_incl_subspans(s.subspan(1));
|
check_empty_span_incl_subspans(s.subspan(1));
|
||||||
RETURN_IF_FAILED();
|
|
||||||
} else {
|
} else {
|
||||||
// don't run into Mandates: Offset >= Extent
|
// don't run into Mandates: Offset >= Extent
|
||||||
if constexpr (N > 1) { // incl. N == std::dynamic_extent
|
if constexpr (N > 1) { // incl. N == std::dynamic_extent
|
||||||
check_nonempty_span(s.template subspan<1>(), expectedSize - 1);
|
check_nonempty_span(s.template subspan<1>(), expectedSize - 1);
|
||||||
RETURN_IF_FAILED();
|
|
||||||
}
|
}
|
||||||
check_nonempty_span(s.subspan(1), expectedSize - 1);
|
check_nonempty_span(s.subspan(1), expectedSize - 1);
|
||||||
RETURN_IF_FAILED();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -266,55 +255,46 @@ template <typename T, std::size_t N>
|
|||||||
void tst_QSpan::check_empty_span_incl_subspans(QSpan<T, N> s) const
|
void tst_QSpan::check_empty_span_incl_subspans(QSpan<T, N> s) const
|
||||||
{
|
{
|
||||||
check_empty_span(s);
|
check_empty_span(s);
|
||||||
RETURN_IF_FAILED();
|
|
||||||
|
|
||||||
{
|
{
|
||||||
const auto fi = s.template first<0>();
|
const auto fi = s.template first<0>();
|
||||||
check_empty_span(fi);
|
check_empty_span(fi);
|
||||||
RETURN_IF_FAILED();
|
|
||||||
QCOMPARE_EQ(fi.data(), s.data());
|
QCOMPARE_EQ(fi.data(), s.data());
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
const auto la = s.template last<0>();
|
const auto la = s.template last<0>();
|
||||||
check_empty_span(la);
|
check_empty_span(la);
|
||||||
RETURN_IF_FAILED();
|
|
||||||
QCOMPARE_EQ(la.data(), s.data());
|
QCOMPARE_EQ(la.data(), s.data());
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
const auto ss = s.template subspan<0>();
|
const auto ss = s.template subspan<0>();
|
||||||
check_empty_span(ss);
|
check_empty_span(ss);
|
||||||
RETURN_IF_FAILED();
|
|
||||||
QCOMPARE_EQ(ss.data(), s.data());
|
QCOMPARE_EQ(ss.data(), s.data());
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
const auto ss = s.template subspan<0, 0>();
|
const auto ss = s.template subspan<0, 0>();
|
||||||
check_empty_span(ss);
|
check_empty_span(ss);
|
||||||
RETURN_IF_FAILED();
|
|
||||||
QCOMPARE_EQ(ss.data(), s.data());
|
QCOMPARE_EQ(ss.data(), s.data());
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
const auto fi = s.first(0);
|
const auto fi = s.first(0);
|
||||||
check_empty_span(fi);
|
check_empty_span(fi);
|
||||||
RETURN_IF_FAILED();
|
|
||||||
QCOMPARE_EQ(fi.data(), s.data());
|
QCOMPARE_EQ(fi.data(), s.data());
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
const auto la = s.last(0);
|
const auto la = s.last(0);
|
||||||
check_empty_span(la);
|
check_empty_span(la);
|
||||||
RETURN_IF_FAILED();
|
|
||||||
QCOMPARE_EQ(la.data(), s.data());
|
QCOMPARE_EQ(la.data(), s.data());
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
const auto ss = s.subspan(0);
|
const auto ss = s.subspan(0);
|
||||||
check_empty_span(ss);
|
check_empty_span(ss);
|
||||||
RETURN_IF_FAILED();
|
|
||||||
QCOMPARE_EQ(ss.data(), s.data());
|
QCOMPARE_EQ(ss.data(), s.data());
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
const auto ss = s.subspan(0, 0);
|
const auto ss = s.subspan(0, 0);
|
||||||
check_empty_span(ss);
|
check_empty_span(ss);
|
||||||
RETURN_IF_FAILED();
|
|
||||||
QCOMPARE_EQ(ss.data(), s.data());
|
QCOMPARE_EQ(ss.data(), s.data());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -347,7 +327,6 @@ void tst_QSpan::from_container_impl(C &&c) const
|
|||||||
QCOMPARE_EQ(si.data(), c_data);
|
QCOMPARE_EQ(si.data(), c_data);
|
||||||
|
|
||||||
check_nonempty_span(si, c_size);
|
check_nonempty_span(si, c_size);
|
||||||
RETURN_IF_FAILED();
|
|
||||||
|
|
||||||
auto bi = as_bytes(si);
|
auto bi = as_bytes(si);
|
||||||
static_assert(std::is_same_v<decltype(bi), QSpan<const std::byte, ExpectedBytesExtent>>);
|
static_assert(std::is_same_v<decltype(bi), QSpan<const std::byte, ExpectedBytesExtent>>);
|
||||||
@ -369,7 +348,6 @@ void tst_QSpan::from_container_impl(C &&c) const
|
|||||||
QCOMPARE_EQ(sci.data(), c_data);
|
QCOMPARE_EQ(sci.data(), c_data);
|
||||||
|
|
||||||
check_nonempty_span(sci, c_size);
|
check_nonempty_span(sci, c_size);
|
||||||
RETURN_IF_FAILED();
|
|
||||||
|
|
||||||
auto bci = as_bytes(sci);
|
auto bci = as_bytes(sci);
|
||||||
static_assert(std::is_same_v<decltype(bci), QSpan<const std::byte>>);
|
static_assert(std::is_same_v<decltype(bci), QSpan<const std::byte>>);
|
||||||
@ -385,7 +363,6 @@ void tst_QSpan::from_container_impl(C &&c) const
|
|||||||
QCOMPARE_EQ(sci.data(), c_data);
|
QCOMPARE_EQ(sci.data(), c_data);
|
||||||
|
|
||||||
check_nonempty_span(sci, c_size);
|
check_nonempty_span(sci, c_size);
|
||||||
RETURN_IF_FAILED();
|
|
||||||
|
|
||||||
auto bci = as_bytes(sci);
|
auto bci = as_bytes(sci);
|
||||||
static_assert(std::is_same_v<decltype(bci), QSpan<const std::byte, ExpectedBytesExtent>>);
|
static_assert(std::is_same_v<decltype(bci), QSpan<const std::byte, ExpectedBytesExtent>>);
|
||||||
@ -426,7 +403,6 @@ void tst_QSpan::fromStdInitializerList() const
|
|||||||
QCOMPARE_EQ(sci.data(), il.begin());
|
QCOMPARE_EQ(sci.data(), il.begin());
|
||||||
|
|
||||||
check_nonempty_span(sci, 4);
|
check_nonempty_span(sci, 4);
|
||||||
RETURN_IF_FAILED();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void tst_QSpan::fromZeroSizeStdArray() const
|
void tst_QSpan::fromZeroSizeStdArray() const
|
||||||
@ -475,7 +451,5 @@ void tst_QSpan::fromInitList() const
|
|||||||
l2({4, 5, 6});
|
l2({4, 5, 6});
|
||||||
}
|
}
|
||||||
|
|
||||||
#undef RETURN_IF_FAILED
|
|
||||||
|
|
||||||
QTEST_APPLESS_MAIN(tst_QSpan);
|
QTEST_APPLESS_MAIN(tst_QSpan);
|
||||||
#include "tst_qspan.moc"
|
#include "tst_qspan.moc"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user