test206.cpp revision 12855:588919e0e4aa
12292SN/A#define SC_INCLUDE_DYNAMIC_PROCESSES
28707Sandreas.hansson@arm.com
38707Sandreas.hansson@arm.com#include <systemc>
48707Sandreas.hansson@arm.com#include <cstring>
58707Sandreas.hansson@arm.comusing namespace sc_core;
68707Sandreas.hansson@arm.comusing namespace sc_dt;
78707Sandreas.hansson@arm.comusing std::cout;
88707Sandreas.hansson@arm.comusing std::endl;
98707Sandreas.hansson@arm.com
108707Sandreas.hansson@arm.com// 6) sc_get_current_process_handle
118707Sandreas.hansson@arm.com
128707Sandreas.hansson@arm.comSC_MODULE(M)
138707Sandreas.hansson@arm.com{
142727Sktlim@umich.edu  SC_CTOR(M)
152292SN/A  {
162292SN/A    sc_process_handle h;
172292SN/A    sc_assert (!h.valid());
182292SN/A    h = sc_get_current_process_handle();
192292SN/A    sc_assert (!h.valid());
202292SN/A    SC_THREAD(T);
212292SN/A    h = sc_get_current_process_handle();
222292SN/A    sc_assert (h.valid());
232292SN/A    sc_assert (strcmp(h.name(),"top.m.T") == 0);
242292SN/A    sc_assert (h.proc_kind()==SC_THREAD_PROC_);
252292SN/A    sc_assert (h.dynamic()==false);
262292SN/A    sc_assert (h.terminated()==false);
272292SN/A    sc_assert (h.get_process_object() != 0);
282292SN/A    sc_assert (h.get_parent_object() == this);
292292SN/A
302292SN/A    sc_spawn(sc_bind(&M::proc, this), "static_proc");
312292SN/A    h = sc_get_current_process_handle();
322292SN/A    sc_assert (h.valid());
332292SN/A    sc_assert (strcmp(h.name(),"top.m.static_proc") == 0);
342292SN/A    sc_assert (h.proc_kind()==SC_THREAD_PROC_);
352292SN/A    sc_assert (h.dynamic()==false);
362292SN/A    sc_assert (h.terminated()==false);
372292SN/A    sc_assert (h.get_process_object() != 0);
382292SN/A    sc_assert (h.get_parent_object() == this);
392689Sktlim@umich.edu  }
402689Sktlim@umich.edu  sc_object* obj;
412292SN/A  void T()
422292SN/A  {
432329SN/A    sc_process_handle h;
442980Sgblack@eecs.umich.edu    sc_assert (!h.valid());
452329SN/A    h = sc_get_current_process_handle();
462329SN/A    sc_assert (h.valid());
472292SN/A    sc_assert (strcmp(h.name(),"top.m.T") == 0);
488232Snate@binkert.org    sc_assert (h.proc_kind()==SC_THREAD_PROC_);
498232Snate@binkert.org    sc_assert (h.dynamic()==false);
508232Snate@binkert.org    sc_assert (h.terminated()==false);
516221Snate@binkert.org    sc_assert (h.get_process_object() != 0);
522292SN/A    sc_assert (h.get_parent_object() == this);
536221Snate@binkert.org
545529Snate@binkert.org    obj = h.get_process_object();
552292SN/A    sc_spawn_options opt;
565529Snate@binkert.org    opt.spawn_method();
578707Sandreas.hansson@arm.com    sc_spawn(sc_bind(&M::proc, this), "dynamic_proc", &opt);
584329Sktlim@umich.edu    wait(1, SC_NS);
594329Sktlim@umich.edu  }
605529Snate@binkert.org  void proc()
612907Sktlim@umich.edu  {
622292SN/A    sc_process_handle h = sc_get_current_process_handle();
632292SN/A    sc_assert (h.valid());
642292SN/A    if (h.dynamic())
652292SN/A    {
662980Sgblack@eecs.umich.edu      sc_assert (strcmp(h.name(),"top.m.T.dynamic_proc") == 0);
672292SN/A      sc_assert (h.proc_kind()==SC_METHOD_PROC_);
682292SN/A      sc_assert (h.get_parent_object() == obj);
692292SN/A    }
702292SN/A    else
712292SN/A    {
722292SN/A      sc_assert (strcmp(h.name(),"top.m.static_proc") == 0);
732292SN/A      sc_assert (h.proc_kind()==SC_THREAD_PROC_);
742292SN/A      sc_assert (h.get_parent_object() == this);
752292SN/A    }
762292SN/A    sc_assert (h.terminated()==false);
772292SN/A    sc_assert (h.get_process_object() != 0);
784329Sktlim@umich.edu  }
792292SN/A};
802292SN/A
812292SN/Astruct Top: sc_module
822292SN/A{
832292SN/A  M *m;
842292SN/A  Top(sc_module_name)
852292SN/A  {
864329Sktlim@umich.edu    m = new M("m");
872292SN/A  }
888346Sksewell@umich.edu};
892292SN/A
902292SN/Aint sc_main(int argc, char* argv[])
912292SN/A{
922292SN/A  cout << "Should be silent..." << endl;
932292SN/A  sc_process_handle h;
942292SN/A  sc_assert (!h.valid());
952292SN/A  h = sc_get_current_process_handle();
962292SN/A  sc_assert (!h.valid());
972292SN/A
982292SN/A  Top top("top");
992292SN/A  sc_start();
1002292SN/A
1014329Sktlim@umich.edu  cout << endl << "Success" << endl;
1022292SN/A  return 0;
1038346Sksewell@umich.edu}
1042292SN/A