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(qsize)
|
||||
add_subdirectory(qsizef)
|
||||
if (NOT WASM) # QTBUG-121822
|
||||
add_subdirectory(qspan)
|
||||
endif()
|
||||
add_subdirectory(qstl)
|
||||
add_subdirectory(quniquehandle)
|
||||
add_subdirectory(qvarlengtharray)
|
||||
|
@ -10,4 +10,8 @@ endif()
|
||||
qt_internal_add_test(tst_qspan
|
||||
SOURCES
|
||||
tst_qspan.cpp
|
||||
NO_BATCH # QTBUG-121815
|
||||
DEFINES
|
||||
QTEST_THROW_ON_FAIL
|
||||
QTEST_THROW_ON_SKIP
|
||||
)
|
||||
|
@ -6,6 +6,10 @@
|
||||
#include <QList>
|
||||
#include <QTest>
|
||||
|
||||
#ifndef QTEST_THROW_ON_FAIL
|
||||
# error This test requires QTEST_THROW_ON_FAIL being active.
|
||||
#endif
|
||||
|
||||
#include <algorithm>
|
||||
#include <array>
|
||||
#ifdef __cpp_lib_span
|
||||
@ -144,9 +148,6 @@ private:
|
||||
template <typename T>
|
||||
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
|
||||
{
|
||||
static_assert(std::is_nothrow_default_constructible_v<QSpan<int, 0>>);
|
||||
@ -156,19 +157,15 @@ void tst_QSpan::onlyZeroExtentSpansHaveDefaultCtors() const
|
||||
|
||||
QSpan<int, 0> si;
|
||||
check_null_span(si);
|
||||
RETURN_IF_FAILED();
|
||||
|
||||
QSpan<const int, 0> sci;
|
||||
check_null_span(sci);
|
||||
RETURN_IF_FAILED();
|
||||
|
||||
QSpan<int> sdi;
|
||||
check_null_span(sdi);
|
||||
RETURN_IF_FAILED();
|
||||
|
||||
QSpan<const int> 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<const int, 42>>);
|
||||
@ -180,22 +177,18 @@ void tst_QSpan::zeroExtentSpansMaintainADataPointer() const
|
||||
QSpan<int, 0> si{&i, 0};
|
||||
QCOMPARE(si.data(), &i);
|
||||
check_empty_span_incl_subspans(si);
|
||||
RETURN_IF_FAILED();
|
||||
|
||||
QSpan<const int, 0> sci{&i, 0};
|
||||
QCOMPARE(sci.data(), &i);
|
||||
check_empty_span_incl_subspans(sci);
|
||||
RETURN_IF_FAILED();
|
||||
|
||||
QSpan<int, 0> sdi{&i, 0};
|
||||
QCOMPARE(sdi.data(), &i);
|
||||
check_empty_span_incl_subspans(sdi);
|
||||
RETURN_IF_FAILED();
|
||||
|
||||
QSpan<const int, 0> sdci{&i, 0};
|
||||
QCOMPARE(sdci.data(), &i);
|
||||
check_empty_span_incl_subspans(sdci);
|
||||
RETURN_IF_FAILED();
|
||||
}
|
||||
|
||||
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
|
||||
if constexpr (N > 0) { // incl. N == std::dynamic_extent
|
||||
check_empty_span_incl_subspans(s.template subspan<1>());
|
||||
RETURN_IF_FAILED();
|
||||
}
|
||||
check_empty_span_incl_subspans(s.subspan(1));
|
||||
RETURN_IF_FAILED();
|
||||
} else {
|
||||
// don't run into Mandates: Offset >= Extent
|
||||
if constexpr (N > 1) { // incl. N == std::dynamic_extent
|
||||
check_nonempty_span(s.template subspan<1>(), expectedSize - 1);
|
||||
RETURN_IF_FAILED();
|
||||
}
|
||||
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
|
||||
{
|
||||
check_empty_span(s);
|
||||
RETURN_IF_FAILED();
|
||||
|
||||
{
|
||||
const auto fi = s.template first<0>();
|
||||
check_empty_span(fi);
|
||||
RETURN_IF_FAILED();
|
||||
QCOMPARE_EQ(fi.data(), s.data());
|
||||
}
|
||||
{
|
||||
const auto la = s.template last<0>();
|
||||
check_empty_span(la);
|
||||
RETURN_IF_FAILED();
|
||||
QCOMPARE_EQ(la.data(), s.data());
|
||||
}
|
||||
{
|
||||
const auto ss = s.template subspan<0>();
|
||||
check_empty_span(ss);
|
||||
RETURN_IF_FAILED();
|
||||
QCOMPARE_EQ(ss.data(), s.data());
|
||||
}
|
||||
{
|
||||
const auto ss = s.template subspan<0, 0>();
|
||||
check_empty_span(ss);
|
||||
RETURN_IF_FAILED();
|
||||
QCOMPARE_EQ(ss.data(), s.data());
|
||||
}
|
||||
|
||||
{
|
||||
const auto fi = s.first(0);
|
||||
check_empty_span(fi);
|
||||
RETURN_IF_FAILED();
|
||||
QCOMPARE_EQ(fi.data(), s.data());
|
||||
}
|
||||
{
|
||||
const auto la = s.last(0);
|
||||
check_empty_span(la);
|
||||
RETURN_IF_FAILED();
|
||||
QCOMPARE_EQ(la.data(), s.data());
|
||||
}
|
||||
{
|
||||
const auto ss = s.subspan(0);
|
||||
check_empty_span(ss);
|
||||
RETURN_IF_FAILED();
|
||||
QCOMPARE_EQ(ss.data(), s.data());
|
||||
}
|
||||
{
|
||||
const auto ss = s.subspan(0, 0);
|
||||
check_empty_span(ss);
|
||||
RETURN_IF_FAILED();
|
||||
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);
|
||||
|
||||
check_nonempty_span(si, c_size);
|
||||
RETURN_IF_FAILED();
|
||||
|
||||
auto bi = as_bytes(si);
|
||||
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);
|
||||
|
||||
check_nonempty_span(sci, c_size);
|
||||
RETURN_IF_FAILED();
|
||||
|
||||
auto bci = as_bytes(sci);
|
||||
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);
|
||||
|
||||
check_nonempty_span(sci, c_size);
|
||||
RETURN_IF_FAILED();
|
||||
|
||||
auto bci = as_bytes(sci);
|
||||
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());
|
||||
|
||||
check_nonempty_span(sci, 4);
|
||||
RETURN_IF_FAILED();
|
||||
}
|
||||
|
||||
void tst_QSpan::fromZeroSizeStdArray() const
|
||||
@ -475,7 +451,5 @@ void tst_QSpan::fromInitList() const
|
||||
l2({4, 5, 6});
|
||||
}
|
||||
|
||||
#undef RETURN_IF_FAILED
|
||||
|
||||
QTEST_APPLESS_MAIN(tst_QSpan);
|
||||
#include "tst_qspan.moc"
|
||||
|
Loading…
x
Reference in New Issue
Block a user