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