blob: da1066aef0142321de7321d4d1177580fda4ef3d [file] [log] [blame]
#include <systemc>
using namespace sc_core;
using namespace sc_dt;
using std::cout;
using std::endl;
// 9) sc_object registered and named
struct i_f: virtual sc_interface
{
};
struct Chan: i_f, sc_object
{
Chan() {}
Chan(const char* _n): sc_object(_n) {}
};
SC_MODULE(M)
{
SC_CTOR(M)
{
SC_THREAD(T);
}
void T()
{
}
};
struct Top: sc_module
{
M *m;
Top(sc_module_name)
{
m = new M("m");
}
};
void check_form_of_suffix(std::string s)
{
std::string charset = "0123456789";
while (!s.empty())
{
sc_assert(s[0] == '_');
s = s.substr(1);
sc_assert(!s.empty());
do
{
sc_assert(charset.find(s[0]) < charset.size());
s = s.substr(1);
} while (!s.empty() && (s[0] != '_'));
}
}
int sc_main(int argc, char* argv[])
{
cout << "Should be silent..." << endl;
sc_report_handler::set_actions(SC_WARNING, SC_DO_NOTHING);
Chan ch1(""); // object
std::string s1 = std::string(ch1.name());
sc_assert(s1.substr(0,6) == "object");
check_form_of_suffix(s1.substr(6));
Chan ch2; // object_0
const std::string s2 = std::string(ch2.name());
sc_assert(s2.substr(0,6) == "object");
check_form_of_suffix(s2.substr(6));
sc_assert(s2 != s1);
Chan ch3(s2.c_str()); // object_0_0 or object_1
std::string s3 = std::string(ch3.name());
sc_assert(s3.substr(0,6) == "object");
check_form_of_suffix(s3.substr(6));
sc_assert(s3 != s1);
sc_assert(s3 != s2);
Chan ch4("object_2");
std::string s4 = std::string(ch4.name());
sc_assert(s4.substr(0,6) == "object");
check_form_of_suffix(s4.substr(6));
sc_assert(s4 != s1);
sc_assert(s4 != s2);
sc_assert(s4 != s3);
Chan ch5;
std::string s5 = std::string(ch5.name());
sc_assert(s5.substr(0,6) == "object");
check_form_of_suffix(s5.substr(6));
sc_assert(s5 != s1);
sc_assert(s5 != s2);
sc_assert(s5 != s3);
sc_assert(s5 != s4);
Chan ch6("");
std::string s6 = std::string(ch6.name());
sc_assert(s6.substr(0,6) == "object");
check_form_of_suffix(s6.substr(6));
sc_assert(s6 != s1);
sc_assert(s6 != s2);
sc_assert(s6 != s3);
sc_assert(s6 != s4);
sc_assert(s6 != s5);
sc_signal<int> sig7("signal_0");
std::string s7 = std::string(sig7.name());
sc_assert(s7 == "signal_0");
sc_assert(s7 != s1);
sc_assert(s7 != s2);
sc_assert(s7 != s3);
sc_assert(s7 != s4);
sc_assert(s7 != s5);
sc_assert(s7 != s6);
sc_signal<int> sig8;
std::string s8 = std::string(sig8.name());
sc_assert(s8.substr(0,6) == "signal");
sc_assert(s8.size() > 6);
check_form_of_suffix(s8.substr(6));
sc_assert(s8 != s1);
sc_assert(s8 != s2);
sc_assert(s8 != s3);
sc_assert(s8 != s4);
sc_assert(s8 != s5);
sc_assert(s8 != s6);
sc_assert(s8 != s7);
std::vector<sc_object*> children = sc_get_top_level_objects();
sc_assert (children.size() == 8);
Top top("top");
sc_start();
cout << endl << "Success" << endl;
return 0;
}