#include "catch.hpp" #include #include #include #include #include template struct NumericTest { static void test(lua_State* state) { const I max_value = std::numeric_limits::max(); const I min_value = std::numeric_limits::lowest(); const I avg_value = (max_value + min_value) / 2; // Largest value REQUIRE(luwra::Value::push(state, max_value) == 1); REQUIRE(luwra::Value::read(state, -1) == max_value); lua_pop(state, 1); // Lowest value REQUIRE(luwra::Value::push(state, min_value) == 1); REQUIRE(luwra::Value::read(state, -1) == min_value); lua_pop(state, 1); // Average value REQUIRE(luwra::Value::push(state, avg_value) == 1); REQUIRE(luwra::Value::read(state, -1) == avg_value); lua_pop(state, 1); } }; struct TautologyTest { static void test(lua_State*) {} }; template using SelectNumericTest = typename std::conditional< luwra::internal::NumericContainedValueBase::qualifies, NumericTest, TautologyTest >::type; TEST_CASE("Test Value specialization for numeric C types", "types_numeric") { lua_State* state = luaL_newstate(); // Integer-based types SelectNumericTest::test(state); SelectNumericTest::test(state); SelectNumericTest::test(state); SelectNumericTest::test(state); SelectNumericTest::test(state); SelectNumericTest::test(state); SelectNumericTest::test(state); SelectNumericTest::test(state); // Number-based types SelectNumericTest::test(state); SelectNumericTest::test(state); SelectNumericTest::test(state); lua_close(state); }