Skip to content
Snippets Groups Projects
Commit 21ffbc6d authored by Stéphane Del Pino's avatar Stéphane Del Pino
Browse files

Add abs: Z -> N for commodity

parent 8aa6bccf
Branches
Tags
1 merge request!145git subrepo clone git@gitlab.com:OlMon/org-themes.git packages/org-themes
...@@ -16,3 +16,4 @@ GTAGS ...@@ -16,3 +16,4 @@ GTAGS
/doc/lisp/elpa/ /doc/lisp/elpa/
/doc/*.png /doc/*.png
/doc/*.gnu /doc/*.gnu
/doc/filename.txt
...@@ -2,6 +2,9 @@ ...@@ -2,6 +2,9 @@
#include <language/utils/BuiltinFunctionEmbedder.hpp> #include <language/utils/BuiltinFunctionEmbedder.hpp>
#include <cmath>
#include <cstdlib>
MathModule::MathModule() MathModule::MathModule()
{ {
this->_addBuiltinFunction("sqrt", std::make_shared<BuiltinFunctionEmbedder<double(double)>>( this->_addBuiltinFunction("sqrt", std::make_shared<BuiltinFunctionEmbedder<double(double)>>(
...@@ -10,6 +13,9 @@ MathModule::MathModule() ...@@ -10,6 +13,9 @@ MathModule::MathModule()
this->_addBuiltinFunction("abs", std::make_shared<BuiltinFunctionEmbedder<double(double)>>( this->_addBuiltinFunction("abs", std::make_shared<BuiltinFunctionEmbedder<double(double)>>(
[](double x) -> double { return std::abs(x); })); [](double x) -> double { return std::abs(x); }));
this->_addBuiltinFunction("abs", std::make_shared<BuiltinFunctionEmbedder<uint64_t(int64_t)>>(
[](int64_t x) -> uint64_t { return std::abs(x); }));
this->_addBuiltinFunction("sin", std::make_shared<BuiltinFunctionEmbedder<double(double)>>( this->_addBuiltinFunction("sin", std::make_shared<BuiltinFunctionEmbedder<double(double)>>(
[](double x) -> double { return std::sin(x); })); [](double x) -> double { return std::sin(x); }));
......
...@@ -91,6 +91,15 @@ let x:R, x = sqrt(4); ...@@ -91,6 +91,15 @@ let x:R, x = sqrt(4);
CHECK_BUILTIN_FUNCTION_EVALUATION_RESULT(data, "x", double{std::sqrt(4l)}); CHECK_BUILTIN_FUNCTION_EVALUATION_RESULT(data, "x", double{std::sqrt(4l)});
} }
{ // abs
tested_function_set.insert("abs:Z");
std::string_view data = R"(
import math;
let z:Z, z = abs(-3);
)";
CHECK_BUILTIN_FUNCTION_EVALUATION_RESULT(data, "z", int64_t{std::abs(-3)});
}
{ // abs { // abs
tested_function_set.insert("abs:R"); tested_function_set.insert("abs:R");
std::string_view data = R"( std::string_view data = R"(
......
...@@ -13,9 +13,30 @@ TEST_CASE("MathModule", "[language]") ...@@ -13,9 +13,30 @@ TEST_CASE("MathModule", "[language]")
MathModule math_module; MathModule math_module;
const auto& name_builtin_function = math_module.getNameBuiltinFunctionMap(); const auto& name_builtin_function = math_module.getNameBuiltinFunctionMap();
REQUIRE(name_builtin_function.size() == 29); REQUIRE(name_builtin_function.size() == 30);
SECTION("double -> double") SECTION("Z -> N")
{
SECTION("abs:Z")
{
auto i_function = name_builtin_function.find("abs:Z");
REQUIRE(i_function != name_builtin_function.end());
IBuiltinFunctionEmbedder& function_embedder = *i_function->second;
int64_t arg = -3;
DataVariant arg_variant = arg;
DataVariant result_variant = function_embedder.apply({arg_variant});
uint64_t result = std::abs(arg);
REQUIRE(std::get<decltype(result)>(result_variant) == Catch::Approx(result));
}
}
SECTION("R -> R")
{ {
double arg = 0.7; double arg = 0.7;
...@@ -33,7 +54,7 @@ TEST_CASE("MathModule", "[language]") ...@@ -33,7 +54,7 @@ TEST_CASE("MathModule", "[language]")
REQUIRE(std::get<decltype(result)>(result_variant) == Catch::Approx(result)); REQUIRE(std::get<decltype(result)>(result_variant) == Catch::Approx(result));
} }
SECTION("abs") SECTION("abs:R")
{ {
auto i_function = name_builtin_function.find("abs:R"); auto i_function = name_builtin_function.find("abs:R");
REQUIRE(i_function != name_builtin_function.end()); REQUIRE(i_function != name_builtin_function.end());
...@@ -48,7 +69,7 @@ TEST_CASE("MathModule", "[language]") ...@@ -48,7 +69,7 @@ TEST_CASE("MathModule", "[language]")
} }
{ {
arg = -3; arg = double{-3};
DataVariant arg_variant = arg; DataVariant arg_variant = arg;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment