#pragma once
#include "../pp.h"
#include <catch2/catch_test_macros.hpp>
#define TEST_PREFIX(prefix, tag) \
static inline std::string _test_prefix () { return prefix; } \
static inline std::string _test_tag () { return tag; }
template <class...Args> static inline std::string _test_prefix (Args...) { return {}; }
template <class...Args> static inline std::string _test_tag (Args...) { return {}; }
#define TEST(...) PANDA_PP_VFUNC(TEST_IMPL, __VA_ARGS__)
#define TEST_IMPL1(name) TEST_CASE(_test_prefix() + name, _test_tag())
#define TEST_IMPL2(name, tag) TEST_CASE(_test_prefix() + name, _test_tag() + tag)
#define TEST_MYTAG(name, tag) TEST_CASE(_test_prefix() + name, tag)
#define TEST_HIDDEN(name) TEST_MYTAG(name, "[.]")