#include #include #include using namespace kpn; static int free_func(int a, float b) { return a; } static void sink_func(int a) {} static std::tuple multi_func(int a) { return {a, 1.f}; } TEST_CASE("arity of free function", "[traits]") { STATIC_REQUIRE(arity_v == 2); } TEST_CASE("return type of free function", "[traits]") { STATIC_REQUIRE(std::is_same_v, int>); } TEST_CASE("normalised return: single value", "[traits]") { STATIC_REQUIRE(std::is_same_v, std::tuple>); } TEST_CASE("normalised return: void", "[traits]") { STATIC_REQUIRE(std::is_same_v, std::tuple<>>); } TEST_CASE("normalised return: tuple passthrough", "[traits]") { using T = std::tuple; STATIC_REQUIRE(std::is_same_v, T>); } TEST_CASE("output_count: single return", "[traits]") { STATIC_REQUIRE(output_count_v == 1); } TEST_CASE("output_count: void return", "[traits]") { STATIC_REQUIRE(output_count_v == 0); } TEST_CASE("output_count: tuple return", "[traits]") { STATIC_REQUIRE(output_count_v == 2); }