Skip to content
Snippets Groups Projects
Select Git revision
  • b3933a071ef5bc1c60441d7767b2b0393b37a54c
  • develop default protected
  • feature/variational-hydro
  • origin/stage/bouguettaia
  • feature/gmsh-reader
  • feature/reconstruction
  • save_clemence
  • feature/kinetic-schemes
  • feature/local-dt-fsi
  • feature/composite-scheme-sources
  • feature/composite-scheme-other-fluxes
  • feature/serraille
  • feature/composite-scheme
  • hyperplastic
  • feature/polynomials
  • feature/gks
  • feature/implicit-solver-o2
  • feature/coupling_module
  • feature/implicit-solver
  • feature/merge-local-dt-fsi
  • master protected
  • v0.5.0 protected
  • v0.4.1 protected
  • v0.4.0 protected
  • v0.3.0 protected
  • v0.2.0 protected
  • v0.1.0 protected
  • Kidder
  • v0.0.4 protected
  • v0.0.3 protected
  • v0.0.2 protected
  • v0 protected
  • v0.0.1 protected
33 results

Table.hpp

Blame
  • 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));
        }
      }
    }