From 8ed3a790d30a24c11e6e070ad8b06471038d9400 Mon Sep 17 00:00:00 2001 From: Seth Bromberger Date: Tue, 16 Dec 2025 13:25:05 -0800 Subject: [PATCH 1/7] fix tests --- .gitignore | 1 + CMakeLists.txt | 2 +- test/TestBag/insert.cpp | 3 --- test/TestBag/remove_if.cpp | 6 +++--- test/TestGraph/CMakeLists.txt | 2 +- test/TestSet/remove_if.cpp | 6 +++--- 6 files changed, 9 insertions(+), 11 deletions(-) diff --git a/.gitignore b/.gitignore index a886cab..62db49e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ .DS_Store /.cache /**/build +/**/build.* /.idea/ CMakeDoxyfile.in CMakeDoxygenDefaults.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index c7121fe..d059c16 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -100,7 +100,7 @@ FetchContent_MakeAvailable(Boost) FetchContent_Declare(jsonlogic GIT_REPOSITORY https://github.com/LLNL/jsonlogic.git - GIT_TAG master + GIT_TAG v0.2.0 SOURCE_SUBDIR cpp ) # set(jsonlogic_INCLUDE_DIR ${jsonlogic_SOURCE_DIR}/cpp/include/jsonlogic) diff --git a/test/TestBag/insert.cpp b/test/TestBag/insert.cpp index ee6921c..031a978 100644 --- a/test/TestBag/insert.cpp +++ b/test/TestBag/insert.cpp @@ -5,9 +5,6 @@ #include "clippy/clippy.hpp" #include -#include - -namespace boostjsn = boost::json; static const std::string class_name = "ClippyBag"; static const std::string method_name = "insert"; diff --git a/test/TestBag/remove_if.cpp b/test/TestBag/remove_if.cpp index 62b172c..a917285 100644 --- a/test/TestBag/remove_if.cpp +++ b/test/TestBag/remove_if.cpp @@ -3,10 +3,8 @@ // // SPDX-License-Identifier: MIT -#include #include #include -#include #include #include // #include @@ -35,7 +33,9 @@ int main(int argc, char **argv) { auto apply_jl = [&expression](int value) { boostjsn::object data; data["value"] = value; - jsonlogic::any_expr res = jsonlogic::apply(expression["rule"], data); + auto jl_rule_val = expression["rule"]; + auto jlrule = jsonlogic::create_logic(jl_rule_val); + auto res = jlrule.apply(jsonlogic::json_accessor(data)); return jsonlogic::unpack_value(res); }; diff --git a/test/TestGraph/CMakeLists.txt b/test/TestGraph/CMakeLists.txt index edfaff4..9f4ebd9 100644 --- a/test/TestGraph/CMakeLists.txt +++ b/test/TestGraph/CMakeLists.txt @@ -2,7 +2,7 @@ add_test(TestGraph __init__) add_test(TestGraph __str__) # add_test(TestGraph assign) # add_test(TestGraph dump) -add_test(TestGraph dump2) +# add_test(TestGraph dump2) add_test(TestGraph add_edge) add_test(TestGraph add_node) add_test(TestGraph nv) diff --git a/test/TestSet/remove_if.cpp b/test/TestSet/remove_if.cpp index 28b69ea..34b1286 100644 --- a/test/TestSet/remove_if.cpp +++ b/test/TestSet/remove_if.cpp @@ -3,10 +3,8 @@ // // SPDX-License-Identifier: MIT -#include #include #include -#include #include #include @@ -33,7 +31,9 @@ int main(int argc, char **argv) { auto apply_jl = [&expression](int value) { boostjsn::object data; data["value"] = value; - jsonlogic::any_expr res = jsonlogic::apply(expression["rule"], data); + auto jl_rule_val = expression["rule"]; + auto jlrule = jsonlogic::create_logic(jl_rule_val); + auto res = jlrule.apply(jsonlogic::json_accessor(data)); return jsonlogic::unpack_value(res); }; From 08a2b1103e17b5c45faf5f8306a9bc07a2d7493a Mon Sep 17 00:00:00 2001 From: Seth Bromberger Date: Tue, 16 Dec 2025 14:23:04 -0800 Subject: [PATCH 2/7] fix tests --- test/TestGraph/CMakeLists.txt | 5 +- test/TestGraph/where.cpp | 115 ++++++++++++---------------------- 2 files changed, 44 insertions(+), 76 deletions(-) diff --git a/test/TestGraph/CMakeLists.txt b/test/TestGraph/CMakeLists.txt index 9f4ebd9..c083d02 100644 --- a/test/TestGraph/CMakeLists.txt +++ b/test/TestGraph/CMakeLists.txt @@ -1,8 +1,11 @@ +set(CMAKE_BUILD_TYPE Debug) + + add_test(TestGraph __init__) add_test(TestGraph __str__) # add_test(TestGraph assign) # add_test(TestGraph dump) -# add_test(TestGraph dump2) +add_test(TestGraph dump2) add_test(TestGraph add_edge) add_test(TestGraph add_node) add_test(TestGraph nv) diff --git a/test/TestGraph/where.cpp b/test/TestGraph/where.cpp index d42a13e..a7636b6 100644 --- a/test/TestGraph/where.cpp +++ b/test/TestGraph/where.cpp @@ -8,60 +8,67 @@ #include #include "clippy/selector.hpp" +#include "jsonlogic/logic.hpp" #include "testgraph.hpp" template auto parse_where_expression(M& mvmap_, boost::json::object& expression, boost::json::object& submission_data) { - std::cerr << " parse_where_expression: expression: " << expression - << std::endl; + // std::cerr << " parse_where_expression: expression: " << expression + // << std::endl; boost::json::object exp2(expression); + std::shared_ptr jlrule = + std::make_shared( + jsonlogic::create_logic(exp2["rule"])); + // std::cerr << "past create_logic\n"; + auto vars = jlrule->variable_names(); // boost::json::object submission_data{}; - std::vector vars; - jsonlogic::any_expr expression_rule_; + // jsonlogic::any_expr expression_rule_; // we use expression_rule_ (and expression_rule; see below) in order to avoid // having to recompute this every time we call the lambda. - std::tie(expression_rule_, vars, std::ignore) = - jsonlogic::create_logic(exp2["rule"]); + // std::tie(expression_rule_, vars, std::ignore) = + // jsonlogic::create_logic(exp2["rule"]); // this works around a deficiency in C++ compilers where // unique pointers moved into a lambda cannot be moved into // an std::function. - jsonlogic::expr* rawexpr = expression_rule_.release(); - std::shared_ptr expression_rule{rawexpr}; + // jsonlogic::expr* rawexpr = expression_rule_.release(); + // std::shared_ptr expression_rule{rawexpr}; + // std::shared_ptr jlshared{&jlrule}; - std::cerr << "parse_where: # of vars: " << vars.size() << std::endl; - for (const auto& var : vars) { - std::cerr << " apply_jl var dump: var: " << var << std::endl; - } + // std::cerr << "parse_where: # of vars: " << vars.size() << std::endl; + // for (const auto& var : vars) { + // std::cerr << " apply_jl var dump: var: " << var << std::endl; + // } - auto apply_jl = [&expression, vars, expression_rule, &mvmap_, + auto apply_jl = [&expression, jlrule, &mvmap_, &submission_data](mvmap::locator loc) mutable { - std::cerr << " apply_jl: # of vars: " << vars.size() << std::endl; + auto vars = jlrule->variable_names(); + // std::cerr << " apply_jl: # of vars: " << vars.size() << std::endl; for (const auto& var : vars) { - std::cerr << " apply_jl: var: " << var << std::endl; + // std::cerr << " apply_jl: var: " << var << std::endl; auto var_sel = selector(std::string(var)); - std::cerr << " apply_jl: var_sel = " << var_sel << std::endl; + // std::cerr << " apply_jl: var_sel = " << var_sel << std::endl; // if (!var_sel.headeq("node")) { // std::cerr << "selector is not a node selector; skipping." << // std::endl; continue; // } auto var_tail = var_sel.tail().value(); std::string var_str = std::string(var_sel); - std::cerr << " apply_jl: var: " << var_sel << std::endl; + // std::cerr << " apply_jl: var: " << var_sel << std::endl; if (mvmap_.has_series(var_tail)) { - std::cerr << " apply_jl: has series: " << var_sel << std::endl; + // std::cerr << " apply_jl: has series: " << var_sel << std::endl; auto val = mvmap_.get_as_variant(var_tail, loc); if (val.has_value()) { - std::cerr << " apply_jl: val has value" << std::endl; + // std::cerr << " apply_jl: val has value" << std::endl; std::visit( [&submission_data, &loc, &var_str](auto&& v) { submission_data[var_str] = boost::json::value(v); - std::cerr << " apply_jl: submission_data[" << var_str - << "] = " << v << " at loc " << loc << "." - << std::endl; + // std::cerr << " apply_jl: submission_data[" << var_str + // << "] = " << v << " at loc " << loc << "." + // << std::endl; }, *val); } else { @@ -72,11 +79,12 @@ auto parse_where_expression(M& mvmap_, boost::json::object& expression, std::cerr << " apply_jl: no series for " << var_sel << std::endl; } } - std::cerr << " apply_jl: submission_data: " << submission_data - << std::endl; - jsonlogic::any_expr res = jsonlogic::apply( - *expression_rule, jsonlogic::data_accessor(submission_data)); - std::cerr << " apply_jl: res: " << res << std::endl; + // std::cerr << " apply_jl: submission_data: " << submission_data + // << std::endl; + auto res = jlrule->apply(jsonlogic::json_accessor(submission_data)); + // jsonlogic::apply( + // *expression_rule, jsonlogic::data_accessor(submission_data)); + // std::cerr << " apply_jl: res: " << res << std::endl; return jsonlogic::unpack_value(res); }; @@ -88,59 +96,16 @@ std::vector where_nodes(const testgraph::testgraph& g, std::vector filtered_results; // boost::json::object exp2(expression); - std::cerr << " where: expression: " << expression << std::endl; - // auto [_a /*unused*/, vars, _b /*unused*/] = - // jsonlogic::translateNode(exp2["rule"]); - - // auto nodemap = g.nodemap(); - // boost::json::object submission_data{}; - // auto apply_jl = [&expression, &vars, &nodemap, - // &submission_data](testgraph::node_t key) { - // for (const auto& var : vars) { - // auto var_sel = selector(std::string(var)); - // if (!var_sel.headeq("node")) { - // std::cerr << "selector is not a node selector; skipping." << - // std::endl; continue; - // } - // auto var_tail = var_sel.tail().value(); - // std::string var_str = std::string(var_sel); - // std::cerr << " apply_jl: var: " << var_sel << std::endl; - // if (nodemap.has_series(var_tail)) { - // std::cerr << " apply_jl: has series: " << var_sel << std::endl; - // auto val = nodemap.get_as_variant(var_tail, key); - // if (val.has_value()) { - // std::cerr << " apply_jl: val has value" << std::endl; - // std::visit( - // [&submission_data, &key, &var_str](auto&& v) { - // submission_data[var_str] = boost::json::value(v); - // std::cerr << " apply_jl: submission_data[" << var_str - // << "] = " << v << " at key " << key << "." - // << std::endl; - // }, - // val.value()); - // } else { - // std::cerr << " apply_jl: no value for " << var_sel << std::endl; - // submission_data[var_str] = boost::json::value(); - // } - // } else { - // std::cerr << " apply_jl: no series for " << var_sel << std::endl; - // } - // } - - // jsonlogic::any_expr res = - // jsonlogic::apply(expression["rule"], submission_data); - // std::cerr << " apply_jl: res: " << res << std::endl; - // return jsonlogic::unpack_value(res); - // }; + // std::cerr << " where: expression: " << expression << std::endl; auto nodemap = g.nodemap(); boost::json::object submission_data; auto apply_jl = parse_where_expression(nodemap, expression, submission_data); - nodemap.for_all([&filtered_results, &apply_jl, &nodemap, &expression]( - const auto& key, const auto& loc) { - std::cerr << " where for_all key: " << key << std::endl; + nodemap.for_all([&filtered_results, &apply_jl, &nodemap, + &expression](const auto &key, const auto &loc) { + // std::cerr << " where for_all key: " << key << std::endl; if (apply_jl(loc)) { - std::cerr << " where: applied!" << std::endl; + // std::cerr << " where: applied!" << std::endl; filtered_results.push_back(key); } }); From 1fd621232099f76f3c2765d348e3b1bc043094c4 Mon Sep 17 00:00:00 2001 From: Seth Bromberger Date: Tue, 16 Dec 2025 14:57:47 -0800 Subject: [PATCH 3/7] fixes tests --- .github/workflows/pr.yml | 2 +- test/TestBag/remove_if.cpp | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 1564894..c21b7ce 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -47,7 +47,7 @@ jobs: # git clone https://github.com/LLNL/clippy-cpp --branch $GITHUB_HEAD_REF $TMPDIR mkdir -p build - cd build && cmake -DBOOST_ROOT=$BOOST_ROOT .. && make && cd .. + cd build && cmake -DMODERN_CMAKE_BUILD_TESTING=ON -DBUILD_TESTING=ON -DBOOST_ROOT=$BOOST_ROOT .. && make && cd .. ls -l build/test BACKEND=$PWD/build/test echo "BACKEND=$BACKEND" >> $GITHUB_ENV diff --git a/test/TestBag/remove_if.cpp b/test/TestBag/remove_if.cpp index 5fcce5d..9bcb6ab 100644 --- a/test/TestBag/remove_if.cpp +++ b/test/TestBag/remove_if.cpp @@ -35,8 +35,6 @@ int main(int argc, char **argv) { auto apply_jl = [&jlrule](int value) { boostjsn::object data; data["value"] = value; - auto jl_rule_val = expression["rule"]; - auto jlrule = jsonlogic::create_logic(jl_rule_val); auto res = jlrule.apply(jsonlogic::json_accessor(data)); return jsonlogic::unpack_value(res); }; From cf0f8cc7d0252aac50fa789c4eefca276236b834 Mon Sep 17 00:00:00 2001 From: Seth Bromberger Date: Tue, 16 Dec 2025 15:00:23 -0800 Subject: [PATCH 4/7] update clippy-cpp required version --- test/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/requirements.txt b/test/requirements.txt index bcb9aac..e13a1ff 100644 --- a/test/requirements.txt +++ b/test/requirements.txt @@ -1,2 +1,2 @@ -llnl-clippy >= 0.4 +llnl-clippy >= 0.4.2 pytest>=7,<8 \ No newline at end of file From ab9599e7e0d45000528b8bd7adf310eaebf24f12 Mon Sep 17 00:00:00 2001 From: Seth Bromberger Date: Tue, 16 Dec 2025 15:16:11 -0800 Subject: [PATCH 5/7] workflow fix --- .github/workflows/pr.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index c21b7ce..7234256 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -54,7 +54,8 @@ jobs: - name: Run Python test framework env: - CLIPPY_BACKEND_PATH: ${{ env.BACKEND }} + CLIPPY_BACKEND_PATH: $PWD/build/test + # CLIPPY_BACKEND_PATH: ${{ env.BACKEND }} run: | - echo "backend = $BACKEND" + echo "backend = $CLIPPY_BACKEND_PATH" pytest . From 1e21792a72bd322548e616227ee3abd9381c2339 Mon Sep 17 00:00:00 2001 From: Seth Bromberger Date: Tue, 16 Dec 2025 15:28:35 -0800 Subject: [PATCH 6/7] workflow fix --- .github/workflows/pr.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 7234256..35bbb64 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -54,7 +54,7 @@ jobs: - name: Run Python test framework env: - CLIPPY_BACKEND_PATH: $PWD/build/test + CLIPPY_BACKEND_PATH: ${{ github.workspace }}/build/test # CLIPPY_BACKEND_PATH: ${{ env.BACKEND }} run: | echo "backend = $CLIPPY_BACKEND_PATH" From 6fd18281c2712b4669a4608d08daa64d96461634 Mon Sep 17 00:00:00 2001 From: Seth Bromberger Date: Tue, 16 Dec 2025 15:45:42 -0800 Subject: [PATCH 7/7] temporarily switch branches --- .github/workflows/pr.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 35bbb64..402129b 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -16,7 +16,8 @@ jobs: - name: Install dependencies run: | python -m pip install --upgrade pip - python -m pip install pytest git+https://github.com/llnl/clippy@master + # python -m pip install pytest git+https://github.com/llnl/clippy@master + python -m pip install pytest git+https://github.com/llnl/clippy@sbromberger/stream-stderr - name: Install Boost