diff --git a/bin/test_symengine_unix.sh b/bin/test_symengine_unix.sh index 8009048b4a..ed72b50f0a 100644 --- a/bin/test_symengine_unix.sh +++ b/bin/test_symengine_unix.sh @@ -13,6 +13,9 @@ if [[ "$(uname)" == "Linux" ]]; then fi if [[ "$TEST_CLANG_FORMAT" == "yes" ]]; then + export conda_pkgs="clang-tools=11" + source bin/install_travis.sh + ln -sf $CONDA_PREFIX/bin/clang-format $CONDA_PREFIX/bin/clang-format-11 source bin/travis_clang_format.sh elif [[ "$CONDA_ENV_FILE" == *"matchpycpp"* ]]; then source bin/install_travis.sh diff --git a/symengine/mul.cpp b/symengine/mul.cpp index 32cb399214..5a3241d8dd 100644 --- a/symengine/mul.cpp +++ b/symengine/mul.cpp @@ -296,6 +296,17 @@ void Mul::dict_add_term_new(const Ptr> &coef, d.erase(it); m->power_num(outArg(*coef), d, exp_); } + } else if (eq(*it->first, *E)) { + RCP p = rcp_static_cast(it->second); + if (not p->is_exact()) { + // Evaluate E**0.2, but not E**2 + RCP exp_ = p->get_eval().exp(*p); + if (is_a_Number(*exp_)) { + imulnum(outArg(*coef), + rcp_static_cast(exp_)); + d.erase(it); + } + } } } } diff --git a/symengine/tests/basic/test_arit.cpp b/symengine/tests/basic/test_arit.cpp index 74fe877e14..07dd90b0db 100644 --- a/symengine/tests/basic/test_arit.cpp +++ b/symengine/tests/basic/test_arit.cpp @@ -293,6 +293,12 @@ TEST_CASE("Mul: arit", "[arit]") real_double(0.2)}); REQUIRE(std::abs(down_cast(*r2).i - 0.03) < 1e-12); + r1 = real_double(0.1); + r2 = div(exp(add(x, r1)), exp(x)); + REQUIRE(is_a(*r2)); + REQUIRE(std::abs(down_cast(*r2).i - 1.10517091807565) + < 1e-10); + // Real * 0 = 0 * Real = 0 r1 = real_double(0.0); r2 = integer(0); diff --git a/symengine/tests/basic/test_infinity.cpp b/symengine/tests/basic/test_infinity.cpp index a3cf1ed024..fecdee9042 100644 --- a/symengine/tests/basic/test_infinity.cpp +++ b/symengine/tests/basic/test_infinity.cpp @@ -8,9 +8,11 @@ #include #include #include +#include #include #include +using SymEngine::add; using SymEngine::Basic; using SymEngine::Complex; using SymEngine::complex_double; @@ -329,6 +331,10 @@ TEST_CASE("Powers to Infinity", "[Infinity]") CHECK_THROWS_AS(integer(10)->pow(*c), SymEngineException &); CHECK_THROWS_AS(integer(-3)->pow(*c), SymEngineException &); CHECK_THROWS_AS(cx->pow(*c), NotImplementedError &); + + RCP x = symbol("x"); + RCP r = exp(add(c, x)); + CHECK_THROWS_AS(div(r, exp(x)), DomainError &); } TEST_CASE("Evaluate Class of Infinity", "[Infinity]")