Add tests for CompactStorage

They're too trivial for their own QTestLib-based approach, but we
don't want them in the header, either, reducing the compile times for
all users, so put them into an otherwise empty .cpp file.

Change-Id: Iae7fc4d4a29a0648b91752040854288e02da7045
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
Marc Mutz 2023-05-08 12:01:43 +02:00
parent b6ff86e556
commit cd39a469a9
2 changed files with 48 additions and 1 deletions

View File

@ -281,7 +281,7 @@ qt_internal_add_module(Core
tools/qduplicatetracker_p.h
tools/qflatmap_p.h
tools/qfreelist.cpp tools/qfreelist_p.h
tools/qfunctionaltools_impl.h
tools/qfunctionaltools_impl.cpp tools/qfunctionaltools_impl.h
tools/qhashfunctions.h
tools/qiterator.h
tools/qline.cpp tools/qline.h

View File

@ -0,0 +1,47 @@
// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#include <QtCore/qfunctionaltools_impl.h>
// Remove this file once we have tests that implicitly test all aspects of
// CompactStorage
QT_BEGIN_NAMESPACE
namespace QtPrivate {
#define FOR_EACH_CVREF(op) \
op(&) \
op(const &) \
op(&&) \
op(const &&) \
/* end */
namespace _testing {
struct empty {};
struct final final {};
static_assert(std::is_same_v<CompactStorage<empty>,
detail::StorageEmptyBaseClassOptimization<empty>>);
static_assert(std::is_same_v<CompactStorage<final>,
detail::StorageByValue<final>>);
static_assert(std::is_same_v<CompactStorage<int>,
detail::StorageByValue<int>>);
#define CHECK1(Obj, cvref) \
static_assert(std::is_same_v<decltype(std::declval<CompactStorage< Obj > cvref>().object()), \
Obj cvref>);
#define CHECK(cvref) \
CHECK1(empty, cvref) \
CHECK1(final, cvref) \
CHECK1(int, cvref) \
/* end */
FOR_EACH_CVREF(CHECK)
#undef CHECK
#undef CHECK1
} // namespace _testing
} // namespace QtPrivate
#undef FOR_EACH_CVREF
QT_END_NAMESPACE