test209.cpp revision 12855:588919e0e4aa
1#include <systemc> 2using namespace sc_core; 3using namespace sc_dt; 4using std::cout; 5using std::endl; 6 7// 9) sc_object registered and named 8 9struct i_f: virtual sc_interface 10{ 11}; 12 13struct Chan: i_f, sc_object 14{ 15 Chan() {} 16 Chan(const char* _n): sc_object(_n) {} 17}; 18 19SC_MODULE(M) 20{ 21 SC_CTOR(M) 22 { 23 SC_THREAD(T); 24 } 25 void T() 26 { 27 } 28}; 29 30struct Top: sc_module 31{ 32 M *m; 33 Top(sc_module_name) 34 { 35 m = new M("m"); 36 } 37}; 38 39void check_form_of_suffix(std::string s) 40{ 41 std::string charset = "0123456789"; 42 while (!s.empty()) 43 { 44 sc_assert(s[0] == '_'); 45 s = s.substr(1); 46 sc_assert(!s.empty()); 47 do 48 { 49 sc_assert(charset.find(s[0]) < charset.size()); 50 s = s.substr(1); 51 } while (!s.empty() && (s[0] != '_')); 52 } 53} 54 55int sc_main(int argc, char* argv[]) 56{ 57 cout << "Should be silent..." << endl; 58 sc_report_handler::set_actions(SC_WARNING, SC_DO_NOTHING); 59 60 Chan ch1(""); // object 61 std::string s1 = std::string(ch1.name()); 62 sc_assert(s1.substr(0,6) == "object"); 63 check_form_of_suffix(s1.substr(6)); 64 65 Chan ch2; // object_0 66 const std::string s2 = std::string(ch2.name()); 67 sc_assert(s2.substr(0,6) == "object"); 68 check_form_of_suffix(s2.substr(6)); 69 sc_assert(s2 != s1); 70 71 Chan ch3(s2.c_str()); // object_0_0 or object_1 72 std::string s3 = std::string(ch3.name()); 73 sc_assert(s3.substr(0,6) == "object"); 74 check_form_of_suffix(s3.substr(6)); 75 sc_assert(s3 != s1); 76 sc_assert(s3 != s2); 77 78 Chan ch4("object_2"); 79 std::string s4 = std::string(ch4.name()); 80 sc_assert(s4.substr(0,6) == "object"); 81 check_form_of_suffix(s4.substr(6)); 82 sc_assert(s4 != s1); 83 sc_assert(s4 != s2); 84 sc_assert(s4 != s3); 85 86 Chan ch5; 87 std::string s5 = std::string(ch5.name()); 88 sc_assert(s5.substr(0,6) == "object"); 89 check_form_of_suffix(s5.substr(6)); 90 sc_assert(s5 != s1); 91 sc_assert(s5 != s2); 92 sc_assert(s5 != s3); 93 sc_assert(s5 != s4); 94 95 Chan ch6(""); 96 std::string s6 = std::string(ch6.name()); 97 sc_assert(s6.substr(0,6) == "object"); 98 check_form_of_suffix(s6.substr(6)); 99 sc_assert(s6 != s1); 100 sc_assert(s6 != s2); 101 sc_assert(s6 != s3); 102 sc_assert(s6 != s4); 103 sc_assert(s6 != s5); 104 105 sc_signal<int> sig7("signal_0"); 106 std::string s7 = std::string(sig7.name()); 107 sc_assert(s7 == "signal_0"); 108 sc_assert(s7 != s1); 109 sc_assert(s7 != s2); 110 sc_assert(s7 != s3); 111 sc_assert(s7 != s4); 112 sc_assert(s7 != s5); 113 sc_assert(s7 != s6); 114 115 sc_signal<int> sig8; 116 std::string s8 = std::string(sig8.name()); 117 sc_assert(s8.substr(0,6) == "signal"); 118 sc_assert(s8.size() > 6); 119 check_form_of_suffix(s8.substr(6)); 120 sc_assert(s8 != s1); 121 sc_assert(s8 != s2); 122 sc_assert(s8 != s3); 123 sc_assert(s8 != s4); 124 sc_assert(s8 != s5); 125 sc_assert(s8 != s6); 126 sc_assert(s8 != s7); 127 128 std::vector<sc_object*> children = sc_get_top_level_objects(); 129 sc_assert (children.size() == 8); 130 131 Top top("top"); 132 sc_start(); 133 134 cout << endl << "Success" << endl; 135 return 0; 136} 137