test203b.cpp revision 12855:588919e0e4aa
1#define SC_INCLUDE_DYNAMIC_PROCESSES 2 3#include <systemc> 4using namespace sc_core; 5using namespace sc_dt; 6using std::cout; 7using std::endl; 8 9// 3) terminated_event() 10 11SC_MODULE(M) 12{ 13 SC_CTOR(M) 14 { 15 SC_THREAD(T); 16 } 17 18 void T() 19 { 20 sc_process_handle h1 = sc_spawn(sc_bind(&M::proc, this, 2)); 21 sc_process_handle h2 = sc_spawn(sc_bind(&M::proc, this, 3)); 22 sc_process_handle h3 = sc_spawn(sc_bind(&M::proc, this, 1)); 23 sc_assert(sc_time_stamp() == sc_time(0, SC_NS)); 24 wait(h1.terminated_event() & h2.terminated_event() & h3.terminated_event()); 25 sc_assert(sc_time_stamp() == sc_time(3, SC_NS)); 26 if (h1.valid()) sc_assert (h1.terminated()); 27 if (h2.valid()) sc_assert (h2.terminated()); 28 if (h3.valid()) sc_assert (h3.terminated()); 29 30 h1 = sc_spawn(sc_bind(&M::proc, this, 10)); 31 h2 = sc_spawn(sc_bind(&M::proc, this, 30)); 32 h3 = sc_spawn(sc_bind(&M::proc, this, 20)); 33 sc_assert(sc_time_stamp() == sc_time(3, SC_NS)); 34 wait(h1.terminated_event() | h2.terminated_event() | h3.terminated_event()); 35 sc_assert(sc_time_stamp() == sc_time(13, SC_NS)); 36 sc_assert(h2.valid()); 37 sc_assert( !h2.terminated() ); 38 sc_assert(h3.valid()); 39 sc_assert( !h3.terminated() ); 40 41 wait(h2.terminated_event() & h3.terminated_event()); 42 sc_assert(sc_time_stamp() == sc_time(33, SC_NS)); 43 } 44 void proc(int delay) 45 { 46 wait(delay * sc_time(1, SC_NS)); 47 } 48}; 49 50SC_MODULE(Top) 51{ 52 M *m; 53 SC_CTOR(Top) 54 { 55 m = new M("m"); 56 } 57}; 58 59int sc_main(int argc, char* argv[]) 60{ 61 cout << "Should be silent..." << endl; 62 63 Top top("top"); 64 sc_start(); 65 66 cout << endl << "Success" << endl; 67 return 0; 68} 69