#ifndef SC_INCLUDE_DYNAMIC_PROCESSES #define SC_INCLUDE_DYNAMIC_PROCESSES #include #endif #include #include #include #include #include using namespace sc_core; struct top : public sc_core::sc_module { top() : top("top") {} top(sc_module_name const& nm) : sc_core::sc_module(nm) {} scc::cci_param_restricted param1{"param1", 1, scc::min_max_restriction(0, 10), "This is parameter 1"}; scc::cci_param_restricted param2{"param2", 1, scc::min_max_excl_restriction(0, 10), "This is parameter 3"}; scc::cci_param_restricted param3{"param3", 1, scc::min_restriction(0), "This is parameter 2"}; scc::cci_param_restricted param4{"param4", 1, scc::min_excl_restriction(0), "This is parameter 4"}; scc::cci_param_restricted param5{"param5", 4, scc::discrete_restriction({1, 2, 4, 8, 16}), "This is parameter 5"}; }; factory::add tb; TEST_CASE("simple cci_param_restricted min_max test", "[SCC][cci_param_restricted]") { sc_report_handler::set_actions(SC_ERROR, SC_LOG | SC_CACHE_REPORT | SC_DISPLAY | SC_DO_NOTHING); auto& dut = factory::get(); auto run1 = sc_spawn([&dut]() { sc_core::wait(1_ns); for(auto i : {0, 5, 10, -1, 11}) { dut.param1.set_value(i); sc_core::wait(1_ns); } }); sc_start(10_ns); REQUIRE(run1.terminated()); REQUIRE(sc_report_handler::get_count(SC_ERROR) == 2); REQUIRE(sc_report_handler::get_count(SC_WARNING) == 0); sc_report_handler::initialize(); auto run2 = sc_spawn([&dut]() { sc_core::wait(1_ns); for(auto i : {0, 5, 10, -1, 11}) { dut.param2.set_value(i); sc_core::wait(1_ns); } }); sc_start(10_ns); REQUIRE(run2.terminated()); REQUIRE(sc_report_handler::get_count(SC_ERROR) == 4); REQUIRE(sc_report_handler::get_count(SC_WARNING) == 0); sc_report_handler::initialize(); } TEST_CASE("simple cci_param_restricted min test", "[SCC][cci_param_restricted]") { sc_report_handler::set_actions(SC_ERROR, SC_LOG | SC_CACHE_REPORT | SC_DISPLAY | SC_DO_NOTHING); auto& dut = factory::get(); auto run1 = sc_spawn([&dut]() { sc_core::wait(1_ns); for(auto i : {0, 5, -1}) { dut.param3.set_value(i); sc_core::wait(1_ns); } }); sc_start(10_ns); REQUIRE(run1.terminated()); REQUIRE(sc_report_handler::get_count(SC_ERROR) == 1); REQUIRE(sc_report_handler::get_count(SC_WARNING) == 0); sc_report_handler::initialize(); auto run2 = sc_spawn([&dut]() { sc_core::wait(1_ns); for(auto i : {0, 5, -1}) { dut.param4.set_value(i); sc_core::wait(1_ns); } }); sc_start(10_ns); REQUIRE(run2.terminated()); REQUIRE(sc_report_handler::get_count(SC_ERROR) == 2); REQUIRE(sc_report_handler::get_count(SC_WARNING) == 0); sc_report_handler::initialize(); }