r = max({x, add(mul(y, z), integer(3))}); v.init({x, y, z}, *r); d = v.call({4.0, 1.0, 2.5}); REQUIRE(::fabs(d - 5.5) < 1e-12); r = min({pow(x, y), add(mul(y, z), integer(3))}); v.init({x, y, z}, *r); d = v.call({4.0, 2.0, 2.5}); REQUIRE(::fabs(d - 8.0) < 1e-12); // Evaluating to double when there are complex doubles raise an exception CHECK_THROWS_AS( v.init({x}, *add(complex_double(std::complex<double>(1, 2)), x)), std::runtime_error); // Undefined symbols raise an exception CHECK_THROWS_AS(v.init({x}, *r), std::runtime_error); } TEST_CASE("Evaluate to std::complex<double>", "[lambda_complex_double]") { RCP<const Basic> x, y, z, r; std::complex<double> d; x = symbol("x"); y = symbol("y"); z = symbol("z"); r = add(x,
r = max({x, add(mul(y, z), integer(3))}); v.init({x, y, z}, *r); d = v.call({4.0, 1.0, 2.5}); REQUIRE(::fabs(d - 5.5) < 1e-12); r = min({pow(x, y), add(mul(y, z), integer(3))}); v.init({x, y, z}, *r); d = v.call({4.0, 2.0, 2.5}); REQUIRE(::fabs(d - 8.0) < 1e-12); // Evaluating to double when there are complex doubles raise an exception CHECK_THROWS_AS( v.init({x}, *add(complex_double(std::complex<double>(1, 2)), x)), NotImplementedError); // Undefined symbols raise an exception CHECK_THROWS_AS(v.init({x}, *r), SymEngineException); } TEST_CASE("Evaluate to std::complex<double>", "[lambda_complex_double]") { RCP<const Basic> x, y, z, r; std::complex<double> d; x = symbol("x"); y = symbol("y"); z = symbol("z"); r = add(x,