"src/language/modules/ModuleRepository.cpp" did not exist on "62b80fe4e7d3a728a59ce7f58483d477642349d9"
Select Git revision
ModuleRepository.hpp
test_MathModule.cpp 10.36 KiB
#include <catch2/catch.hpp>
#include <BuiltinFunctionEmbedder.hpp>
#include <EmbedderTable.hpp>
#include <MathModule.hpp>
TEST_CASE("MathModule", "[language]")
{
rang::setControlMode(rang::control::Off);
MathModule math_module;
const auto& name_builtin_function = math_module.getNameBuiltinFunctionMap();
REQUIRE(name_builtin_function.size() == 22);
SECTION("double -> double")
{
double arg = 0.7;
DataVariant arg_variant = arg;
SECTION("sqrt")
{
auto i_function = name_builtin_function.find("sqrt");
REQUIRE(i_function != name_builtin_function.end());
IBuiltinFunctionEmbedder& function_embedder = *i_function->second;
DataVariant result_variant = function_embedder.apply({arg_variant});
auto result = std::sqrt(arg);
REQUIRE(std::get<decltype(result)>(result_variant) == Approx(result));
}
SECTION("abs")
{
auto i_function = name_builtin_function.find("abs");
REQUIRE(i_function != name_builtin_function.end());
IBuiltinFunctionEmbedder& function_embedder = *i_function->second;
{
DataVariant result_variant = function_embedder.apply({arg_variant});
auto result = std::abs(arg);
REQUIRE(std::get<decltype(result)>(result_variant) == Approx(result));
}
{
arg = -3;
DataVariant arg_variant = arg;
DataVariant result_variant = function_embedder.apply({arg_variant});
auto result = std::abs(arg);
REQUIRE(std::get<decltype(result)>(result_variant) == Approx(result));
}
}
SECTION("sin")
{
auto i_function = name_builtin_function.find("sin");
REQUIRE(i_function != name_builtin_function.end());
IBuiltinFunctionEmbedder& function_embedder = *i_function->second;
DataVariant result_variant = function_embedder.apply({arg_variant});
auto result = std::sin(arg);
REQUIRE(std::get<decltype(result)>(result_variant) == Approx(result));
}
SECTION("cos")
{
auto i_function = name_builtin_function.find("cos");
REQUIRE(i_function != name_builtin_function.end());
IBuiltinFunctionEmbedder& function_embedder = *i_function->second;
DataVariant result_variant = function_embedder.apply({arg_variant});
auto result = std::cos(arg);
REQUIRE(std::get<decltype(result)>(result_variant) == Approx(result));
}
SECTION("tan")
{
auto i_function = name_builtin_function.find("tan");
REQUIRE(i_function != name_builtin_function.end());
IBuiltinFunctionEmbedder& function_embedder = *i_function->second;
DataVariant result_variant = function_embedder.apply({arg_variant});
auto result = std::tan(arg);
REQUIRE(std::get<decltype(result)>(result_variant) == Approx(result));
}
SECTION("asin")
{
auto i_function = name_builtin_function.find("asin");
REQUIRE(i_function != name_builtin_function.end());
IBuiltinFunctionEmbedder& function_embedder = *i_function->second;
DataVariant result_variant = function_embedder.apply({arg_variant});
auto result = std::asin(arg);
REQUIRE(std::get<decltype(result)>(result_variant) == Approx(result));
}
SECTION("acos")
{
auto i_function = name_builtin_function.find("acos");
REQUIRE(i_function != name_builtin_function.end());
IBuiltinFunctionEmbedder& function_embedder = *i_function->second;
DataVariant result_variant = function_embedder.apply({arg_variant});
auto result = std::acos(arg);
REQUIRE(std::get<decltype(result)>(result_variant) == Approx(result));
}
SECTION("atan")
{
auto i_function = name_builtin_function.find("atan");
REQUIRE(i_function != name_builtin_function.end());
IBuiltinFunctionEmbedder& function_embedder = *i_function->second;
DataVariant result_variant = function_embedder.apply({arg_variant});
auto result = std::atan(arg);
REQUIRE(std::get<decltype(result)>(result_variant) == Approx(result));
}
SECTION("sinh")
{
arg = 1.3;
arg_variant = arg;
auto i_function = name_builtin_function.find("sinh");
REQUIRE(i_function != name_builtin_function.end());
IBuiltinFunctionEmbedder& function_embedder = *i_function->second;
DataVariant result_variant = function_embedder.apply({arg_variant});
auto result = std::sinh(arg);
REQUIRE(std::get<decltype(result)>(result_variant) == Approx(result));
}
SECTION("cosh")
{
auto i_function = name_builtin_function.find("cosh");
REQUIRE(i_function != name_builtin_function.end());
IBuiltinFunctionEmbedder& function_embedder = *i_function->second;
DataVariant result_variant = function_embedder.apply({arg_variant});
auto result = std::cosh(arg);
REQUIRE(std::get<decltype(result)>(result_variant) == Approx(result));
}
SECTION("tanh")
{
auto i_function = name_builtin_function.find("tanh");
REQUIRE(i_function != name_builtin_function.end());
IBuiltinFunctionEmbedder& function_embedder = *i_function->second;
DataVariant result_variant = function_embedder.apply({arg_variant});
auto result = std::tanh(arg);
REQUIRE(std::get<decltype(result)>(result_variant) == Approx(result));
}
SECTION("asinh")
{
auto i_function = name_builtin_function.find("asinh");
REQUIRE(i_function != name_builtin_function.end());
IBuiltinFunctionEmbedder& function_embedder = *i_function->second;
DataVariant result_variant = function_embedder.apply({arg_variant});
auto result = std::asinh(arg);
REQUIRE(std::get<decltype(result)>(result_variant) == Approx(result));
}
SECTION("acosh")
{
arg = 10;
arg_variant = arg;
auto i_function = name_builtin_function.find("acosh");
REQUIRE(i_function != name_builtin_function.end());
IBuiltinFunctionEmbedder& function_embedder = *i_function->second;
DataVariant result_variant = function_embedder.apply({arg_variant});
auto result = std::acosh(arg);
REQUIRE(std::get<decltype(result)>(result_variant) == Approx(result));
}
SECTION("atanh")
{
auto i_function = name_builtin_function.find("atanh");
REQUIRE(i_function != name_builtin_function.end());
IBuiltinFunctionEmbedder& function_embedder = *i_function->second;
DataVariant result_variant = function_embedder.apply({arg_variant});
auto result = std::atanh(arg);
REQUIRE(std::get<decltype(result)>(result_variant) == Approx(result));
}
SECTION("exp")
{
auto i_function = name_builtin_function.find("exp");
REQUIRE(i_function != name_builtin_function.end());
IBuiltinFunctionEmbedder& function_embedder = *i_function->second;
DataVariant result_variant = function_embedder.apply({arg_variant});
auto result = std::exp(arg);
REQUIRE(std::get<decltype(result)>(result_variant) == Approx(result));
}
SECTION("log")
{
auto i_function = name_builtin_function.find("log");
REQUIRE(i_function != name_builtin_function.end());
IBuiltinFunctionEmbedder& function_embedder = *i_function->second;
DataVariant result_variant = function_embedder.apply({arg_variant});
auto result = std::log(arg);
REQUIRE(std::get<decltype(result)>(result_variant) == Approx(result));
}
}
SECTION("double -> int64_t")
{
double arg = 1.3;
DataVariant arg_variant = arg;
SECTION("ceil")
{
auto i_function = name_builtin_function.find("ceil");
REQUIRE(i_function != name_builtin_function.end());
IBuiltinFunctionEmbedder& function_embedder = *i_function->second;
DataVariant result_variant = function_embedder.apply({arg_variant});
int64_t result = std::ceil(arg);
REQUIRE(std::get<decltype(result)>(result_variant) == result);
}
SECTION("floor")
{
auto i_function = name_builtin_function.find("floor");
REQUIRE(i_function != name_builtin_function.end());
IBuiltinFunctionEmbedder& function_embedder = *i_function->second;
DataVariant result_variant = function_embedder.apply({arg_variant});
int64_t result = std::floor(arg);
REQUIRE(std::get<decltype(result)>(result_variant) == result);
}
SECTION("trunc")
{
auto i_function = name_builtin_function.find("trunc");
REQUIRE(i_function != name_builtin_function.end());
IBuiltinFunctionEmbedder& function_embedder = *i_function->second;
DataVariant result_variant = function_embedder.apply({arg_variant});
int64_t result = std::trunc(arg);
REQUIRE(std::get<decltype(result)>(result_variant) == result);
}
SECTION("round")
{
auto i_function = name_builtin_function.find("round");
REQUIRE(i_function != name_builtin_function.end());
IBuiltinFunctionEmbedder& function_embedder = *i_function->second;
DataVariant result_variant = function_embedder.apply({arg_variant});
int64_t result = std::lround(arg);
REQUIRE(std::get<decltype(result)>(result_variant) == result);
}
}
SECTION("(double, double) -> double")
{
double arg0 = 3;
double arg1 = 2;
DataVariant arg0_variant = arg0;
DataVariant arg1_variant = arg1;
SECTION("atan2")
{
auto i_function = name_builtin_function.find("atan2");
REQUIRE(i_function != name_builtin_function.end());
IBuiltinFunctionEmbedder& function_embedder = *i_function->second;
DataVariant result_variant = function_embedder.apply({arg0_variant, arg1_variant});
auto result = std::atan2(arg0, arg1);
REQUIRE(std::get<decltype(result)>(result_variant) == result);
}
SECTION("pow")
{
auto i_function = name_builtin_function.find("pow");
REQUIRE(i_function != name_builtin_function.end());
IBuiltinFunctionEmbedder& function_embedder = *i_function->second;
DataVariant result_variant = function_embedder.apply({arg0_variant, arg1_variant});
auto result = std::pow(arg0, arg1);
REQUIRE(std::get<decltype(result)>(result_variant) == Approx(result));
}
}
}