#ifndef Q_ROUTING_TEST_BLOCK_H
#define Q_ROUTING_TEST_BLOCK_H

class TestBlock {
	public:
		TestBlock();
		virtual ~TestBlock();

		enum PolicyType { Q_ROUTING , BELLMAN_FORD , FULL_ECHO };
		void Init( PolicyType policy_type );

		Policy * GetPolicy() const		{ return policy; }
		Network * GetNetwork() const	{ return network; }

		void Reset();
		void SendPacket( const Packet & packet_data );
		void OneStep();

		// statistics
		double GetNetworkLoad() const; 
		double GetAverageTimePerPacket() const;		
		double GetDumpPercent() const;		

	private:
		Policy	* policy; 
		Network * network;

		// statistic
		int time;
		void PacketFinish( Packet * packet );
		int last_packets_times[LAST_PACKETS_NUM];
		double network_load;
};

#endif //Q_ROUTING_TEST_BLOCK_H