test206.cpp revision 12855:588919e0e4aa
1#define SC_INCLUDE_DYNAMIC_PROCESSES 2 3#include <systemc> 4#include <cstring> 5using namespace sc_core; 6using namespace sc_dt; 7using std::cout; 8using std::endl; 9 10// 6) sc_get_current_process_handle 11 12SC_MODULE(M) 13{ 14 SC_CTOR(M) 15 { 16 sc_process_handle h; 17 sc_assert (!h.valid()); 18 h = sc_get_current_process_handle(); 19 sc_assert (!h.valid()); 20 SC_THREAD(T); 21 h = sc_get_current_process_handle(); 22 sc_assert (h.valid()); 23 sc_assert (strcmp(h.name(),"top.m.T") == 0); 24 sc_assert (h.proc_kind()==SC_THREAD_PROC_); 25 sc_assert (h.dynamic()==false); 26 sc_assert (h.terminated()==false); 27 sc_assert (h.get_process_object() != 0); 28 sc_assert (h.get_parent_object() == this); 29 30 sc_spawn(sc_bind(&M::proc, this), "static_proc"); 31 h = sc_get_current_process_handle(); 32 sc_assert (h.valid()); 33 sc_assert (strcmp(h.name(),"top.m.static_proc") == 0); 34 sc_assert (h.proc_kind()==SC_THREAD_PROC_); 35 sc_assert (h.dynamic()==false); 36 sc_assert (h.terminated()==false); 37 sc_assert (h.get_process_object() != 0); 38 sc_assert (h.get_parent_object() == this); 39 } 40 sc_object* obj; 41 void T() 42 { 43 sc_process_handle h; 44 sc_assert (!h.valid()); 45 h = sc_get_current_process_handle(); 46 sc_assert (h.valid()); 47 sc_assert (strcmp(h.name(),"top.m.T") == 0); 48 sc_assert (h.proc_kind()==SC_THREAD_PROC_); 49 sc_assert (h.dynamic()==false); 50 sc_assert (h.terminated()==false); 51 sc_assert (h.get_process_object() != 0); 52 sc_assert (h.get_parent_object() == this); 53 54 obj = h.get_process_object(); 55 sc_spawn_options opt; 56 opt.spawn_method(); 57 sc_spawn(sc_bind(&M::proc, this), "dynamic_proc", &opt); 58 wait(1, SC_NS); 59 } 60 void proc() 61 { 62 sc_process_handle h = sc_get_current_process_handle(); 63 sc_assert (h.valid()); 64 if (h.dynamic()) 65 { 66 sc_assert (strcmp(h.name(),"top.m.T.dynamic_proc") == 0); 67 sc_assert (h.proc_kind()==SC_METHOD_PROC_); 68 sc_assert (h.get_parent_object() == obj); 69 } 70 else 71 { 72 sc_assert (strcmp(h.name(),"top.m.static_proc") == 0); 73 sc_assert (h.proc_kind()==SC_THREAD_PROC_); 74 sc_assert (h.get_parent_object() == this); 75 } 76 sc_assert (h.terminated()==false); 77 sc_assert (h.get_process_object() != 0); 78 } 79}; 80 81struct Top: sc_module 82{ 83 M *m; 84 Top(sc_module_name) 85 { 86 m = new M("m"); 87 } 88}; 89 90int sc_main(int argc, char* argv[]) 91{ 92 cout << "Should be silent..." << endl; 93 sc_process_handle h; 94 sc_assert (!h.valid()); 95 h = sc_get_current_process_handle(); 96 sc_assert (!h.valid()); 97 98 Top top("top"); 99 sc_start(); 100 101 cout << endl << "Success" << endl; 102 return 0; 103} 104