8 #include <catch2/catch_test_macros.hpp>
18 using namespace nmodl;
19 using namespace visitor;
20 using namespace test_utils;
30 std::map<std::string, std::string> rval;
34 SymtabVisitor().visit_program(*ast);
35 PerfVisitor().visit_program(*ast);
36 LocalToAssignedVisitor().visit_program(*ast);
37 SymtabVisitor().visit_program(*ast);
41 SCENARIO(
"LOCAL to ASSIGNED variable transformer",
"[visitor][localtoassigned]") {
42 GIVEN(
"mod file with LOCAL variables that are written") {
43 std::string input_nmodl = R
"(
60 auto symtab = ast->get_symbol_table();
62 THEN(
"LOCAL variables that are written are turned to ASSIGNED") {
64 auto vars = symtab->get_variables_with_properties(NmodlType::assigned_definition);
65 REQUIRE(vars.size() == 2);
68 auto x = symtab->lookup(
"x");
69 REQUIRE(x !=
nullptr);
70 REQUIRE(x->has_any_property(NmodlType::assigned_definition) ==
true);
71 REQUIRE(x->has_any_property(NmodlType::local_var) ==
false);
73 auto z = symtab->lookup(
"z");
74 REQUIRE(z !=
nullptr);
75 REQUIRE(z->has_any_property(NmodlType::assigned_definition) ==
true);
76 REQUIRE(z->has_any_property(NmodlType::local_var) ==
false);
79 THEN(
"LOCAL variables that are read only remain LOCAL") {
80 auto vars = symtab->get_variables_with_properties(NmodlType::local_var);
81 REQUIRE(vars.size() == 1);