#include "systemc.h"

#define TEST_VAR(var, v) \
    var = v; \
	snprintf(buffer, sizeof(buffer), "%16llx", var.to_uint64()); \
	bv64 = var; \
	cout << #var << " = " << v << " : " << bv64 << " : " << buffer << endl;

#define TEST(v) \
	cout << endl; \
	TEST_VAR(  bu01, v ); \
	TEST_VAR(  bu02, v ); \
	TEST_VAR(  bu03, v ); \
	TEST_VAR(  bu04, v ); \
	TEST_VAR(  bu05, v ); \
	TEST_VAR(  bu06, v ); \
	TEST_VAR(  bu07, v ); \
	TEST_VAR(  bu08, v ); \
	TEST_VAR(  bu09, v ); \
	TEST_VAR(  bu10, v ); \
	TEST_VAR(  bu11, v ); \
	TEST_VAR(  bu12, v ); \
	TEST_VAR(  bu13, v ); \
	TEST_VAR(  bu14, v ); \
	TEST_VAR(  bu15, v ); \
	TEST_VAR(  bu16, v ); \
	TEST_VAR(  bu17, v ); \
	TEST_VAR(  bu18, v ); \
	TEST_VAR(  bu19, v ); \
	TEST_VAR(  bu20, v ); \
	TEST_VAR(  bu21, v ); \
	TEST_VAR(  bu22, v ); \
	TEST_VAR(  bu23, v ); \
	TEST_VAR(  bu24, v ); \
	TEST_VAR(  bu25, v ); \
	TEST_VAR(  bu26, v ); \
	TEST_VAR(  bu27, v ); \
	TEST_VAR(  bu28, v ); \
	TEST_VAR(  bu29, v ); \
	TEST_VAR(  bu30, v ); \
	TEST_VAR(  bu31, v ); \
	TEST_VAR(  bu32, v ); \
	TEST_VAR(  bu33, v ); \
	TEST_VAR(  bu34, v ); \
	TEST_VAR(  bu35, v ); \
	TEST_VAR(  bu36, v ); \
	TEST_VAR(  bu37, v ); \
	TEST_VAR(  bu38, v ); \
	TEST_VAR(  bu39, v ); \
	TEST_VAR(  bu40, v ); \
	TEST_VAR(  bu41, v ); \
	TEST_VAR(  bu42, v ); \
	TEST_VAR(  bu43, v ); \
	TEST_VAR(  bu44, v ); \
	TEST_VAR(  bu45, v ); \
	TEST_VAR(  bu46, v ); \
	TEST_VAR(  bu47, v ); \
	TEST_VAR(  bu48, v ); \
	TEST_VAR(  bu49, v ); \
	TEST_VAR(  bu50, v ); \
	TEST_VAR(  bu51, v ); \
	TEST_VAR(  bu52, v ); \
	TEST_VAR(  bu53, v ); \
	TEST_VAR(  bu54, v ); \
	TEST_VAR(  bu55, v ); \
	TEST_VAR(  bu56, v ); \
	TEST_VAR(  bu57, v ); \
	TEST_VAR(  bu58, v ); \
	TEST_VAR(  bu59, v ); \
	TEST_VAR(  bu60, v ); \
	TEST_VAR(  bu61, v ); \
	TEST_VAR(  bu62, v ); \
	TEST_VAR(  bu63, v ); \
	TEST_VAR(  bu64, v ); 

int sc_main(int argc, char* argv[])
{
	char           buffer[256];
	sc_biguint<1>  bu01;
	sc_biguint<2>  bu02;
	sc_biguint<3>  bu03;
	sc_biguint<4>  bu04;
	sc_biguint<5>  bu05;
	sc_biguint<6>  bu06;
	sc_biguint<7>  bu07;
	sc_biguint<8>  bu08;
	sc_biguint<9>  bu09;
	sc_biguint<10>  bu10;
	sc_biguint<11>  bu11;
	sc_biguint<12>  bu12;
	sc_biguint<13>  bu13;
	sc_biguint<14>  bu14;
	sc_biguint<15>  bu15;
	sc_biguint<16>  bu16;
	sc_biguint<17>  bu17;
	sc_biguint<18>  bu18;
	sc_biguint<19>  bu19;
	sc_biguint<20>  bu20;
	sc_biguint<21>  bu21;
	sc_biguint<22>  bu22;
	sc_biguint<23>  bu23;
	sc_biguint<24>  bu24;
	sc_biguint<25>  bu25;
	sc_biguint<26>  bu26;
	sc_biguint<27>  bu27;
	sc_biguint<28>  bu28;
	sc_biguint<29>  bu29;
	sc_biguint<30>  bu30;
	sc_biguint<31>  bu31;
	sc_biguint<32>  bu32;
	sc_biguint<33>  bu33;
	sc_biguint<34>  bu34;
	sc_biguint<35>  bu35;
	sc_biguint<36>  bu36;
	sc_biguint<37>  bu37;
	sc_biguint<38>  bu38;
	sc_biguint<39>  bu39;
	sc_biguint<40>  bu40;
	sc_biguint<41>  bu41;
	sc_biguint<42>  bu42;
	sc_biguint<43>  bu43;
	sc_biguint<44>  bu44;
	sc_biguint<45>  bu45;
	sc_biguint<46>  bu46;
	sc_biguint<47>  bu47;
	sc_biguint<48>  bu48;
	sc_biguint<49>  bu49;
	sc_biguint<50>  bu50;
	sc_biguint<51>  bu51;
	sc_biguint<52>  bu52;
	sc_biguint<53>  bu53;
	sc_biguint<54>  bu54;
	sc_biguint<55>  bu55;
	sc_biguint<56>  bu56;
	sc_biguint<57>  bu57;
	sc_biguint<58>  bu58;
	sc_biguint<59>  bu59;
	sc_biguint<60>  bu60;
	sc_biguint<61>  bu61;
	sc_biguint<62>  bu62;
	sc_biguint<63>  bu63;
	sc_biguint<64>  bu64;

	sc_bv<64>       bv64;

	int             i;

	char values[]  = "1111"
					 "1110"
					 "1101"
					 "1100"
					 "1011"
					 "1010"
					 "1001"
					 "1000"
					 "0111"
					 "0110"
					 "0101"
					 "0100"
					 "0011"
					 "0010"
					 "0001"
					 "0000";
	TEST("101");

	TEST( "11111110110111001011101010011000" );
	TEST( "1111111111111111111111111111111111111111111111111111111111111111" );

	TEST( values );

	for ( i = 0; i < (int)strlen(values); i++ )
	{
		TEST_VAR( bu64, &values[i]);
	}

	return 0;
}
