#include "systemc.h"

class Sig : public sc_prim_channel {
  public:
	virtual void before_end_of_elaboration()
	{
		 cout << "prim_channel: before end of elaboration" << endl;
	}
	virtual void end_of_simulation()
	{
		 cout << "prim_channel: end of simulation" << endl;
	}
	virtual void start_of_simulation()
	{
		 cout << "prim_channel: start of simulation" << endl;
	}
};

SC_MODULE(X)
{
	SC_CTOR(X)
	{
		SC_CTHREAD(y, clk.pos());
	}
	void y()
	{
		wait();
		sc_stop();
	}
	sc_in_clk clk;
};

int sc_main(int argc, char* argv[])
{
	sc_clock clock;
	Sig      signal;
	X        x("x");

	x.clk(clock);

	if ( sc_start_of_simulation_invoked() ) 
		 cout << __FILE__ << "(" << __LINE__ << "): bad start flag should be false" << endl;
	if ( sc_end_of_simulation_invoked() ) 
		 cout << __FILE__ << "(" << __LINE__ << "): bad end flag should be false" << endl;

	sc_start(2, SC_NS);
	if ( !sc_start_of_simulation_invoked() ) 
		 cout << __FILE__ << "(" << __LINE__ << "): bad start flag should be true" << endl;

	if ( !sc_end_of_simulation_invoked() ) 
		 cout << __FILE__ << "(" << __LINE__ << "): bad end flag should be true" << endl;

	 cerr << "Program completed" << endl;

    return 0;
}

