lumiera_documentation/tests/lib/meta/tuple-diagnostics.hpp
Ichthyostega 3caa5cfb03 Tests: reorganise test folders
This resolves a long-standing issue:
we could not use proper include paths for test-helper code that was defined alongside the tests.

Since some test-helper code must now be relocated into the »Vault«-Layer,
I took the opportunity to finally resolve this annoyance. The solution is two-fold
 * introduce a dedicated test-support library
 * remove the quirks that were necessary to support some plain-C tests
Together, this allows to raise the include-directory by one level,
and then to adjust all folder names so that they match the namespace
2026-03-07 00:56:19 +01:00

86 lines
2.3 KiB
C++
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
TUPLE-DIAGNOSTICS - helper for diagnostics of type tuples
Copyright (C)
2009, Hermann Vosseler <Ichthyostega@web.de>
  **Lumiera** is free software; you can redistribute it and/or modify it
  under the terms of the GNU General Public License as published by the
  Free Software Foundation; either version 2 of the License, or (at your
  option) any later version. See the file COPYING for further details.
* *****************************************************************/
/** @file tuple-diagnostics.hpp
** an extension to typelist-diagnostics.hpp, allowing to dump the \em contents of a Tuple datatype.
** With the help of our [generic string converter](\ref util::toString), and the BuildTupleAccessor
** defined within tuple-helper.hpp, we're able to show the type and contents of any data record
** based on std::tuple. For unit-testing, special formatting is provided for the Num<int>
** test types, which makes typelist and tuples of these types a good candidate for tests.
**
** @see TupleHelper_test
** @see FunctionClosure_test
** @see TypelistManip_test
**
*/
#ifndef LIB_META_TUPLE_DIAGNOSTICS_H
#define LIB_META_TUPLE_DIAGNOSTICS_H
#include "lib/meta/typelist-diagnostics.hpp"
#include "lib/meta/tuple-helper.hpp"
#include "lib/format-string.hpp"
#include "lib/format-obj.hpp"
#include <string>
using std::string;
namespace util {
template<int i>
struct StringConv<lib::meta::Num<i>>
{
static std::string
invoke (lib::meta::Num<i> num) noexcept
{
static util::_Fmt constElm("(%i)");
static util::_Fmt changedElm("{%i}");
return string( (num.o_==i? constElm:changedElm) % int(num.o_));
}
};
}
namespace lib {
namespace meta {
namespace test {
/* ===== printing Tuple types and contents ===== */
template<tuple_like TUP>
inline string
renderSeq() ///< @note specialisation of type-sequence printer for tuple-like
{
using TypeList = RebindTupleTypes<TUP>::List;
using DumpPrinter = InstantiateChained<TypeList, Printer, NullP>;
return "TUPLE"
+ DumpPrinter::show();
}
// see the macros DISPLAY and DUMPVAL defined in typelist-diagnostics.hpp
}}} // namespace lib::meta::test
#endif /*LIB_META_TUPLE_DIAGNOSTICS_H*/