text: #include "systemc.h"
  
  
  inline void dump(sc_signed& value)
  {
  	sc_digit* ptr = value.get_raw();
  	printf("    %08x_%08x_%08x_%08x\n", 
  		(int)ptr[3], (int)ptr[2], (int)ptr[1], (int)ptr[0]);
  	cout << "    " << value << endl;
  }
  
  inline void dump(sc_unsigned& value)
  {
  	sc_digit* ptr = value.get_raw();
  	printf("    %08x_%08x_%08x_%08x\n", 
  		(int)ptr[3], (int)ptr[2], (int)ptr[1], (int)ptr[0]);
  	cout << "    " << value << endl;
  }
  
  #define PARSE( SUBJECT ) \
  { \
  	src_p = SUBJECT; \
  	cout << endl << #SUBJECT << ":" << endl; \
  	svalue = src_p; \
      dump(svalue); \
  	cout << endl; \
  	value = src_p; \
      dump(value); \
  }
  #define TEST(SUBJECT,EXPECTED) \
  { \
      value = SUBJECT; \
  	if ( value.to_uint64() != EXPECTED ) \
  	{ \
  		printf("%s(%d): %s: %llx != %llx\n", \
  			__FILE__, __LINE__,  SUBJECT, value.to_uint64(), (uint64)EXPECTED);\
  	} \
  }
  
  #define TESTs64(SUBJECT,EXPECTED) \
  { \
  	svalue64 = SUBJECT; \
  	if ( svalue64 != (long long)EXPECTED )  \
  	{ \
  		printf("%s(%d): %s: %llx != %llx\n", \
  			__FILE__, __LINE__,  SUBJECT, value.to_uint64(), (uint64)EXPECTED);\
  	}\
  }
  	
  #define TESTu64(SUBJECT,EXPECTED) \
  { \
  	uvalue64 = SUBJECT; \
  	if ( uvalue64 != EXPECTED )  \
  	{ \
  		printf("%s(%d): %s: %llx != %llx\n", \
  			__FILE__, __LINE__,  SUBJECT, value.to_uint64(), (uint64)EXPECTED);\
  	}\
  }
  	
  
  int sc_main(int, char**)
  {
  	char               buffer[128];
  	unsigned long long expected;
  	sc_bigint<120>     svalue;
  	sc_int<64>         svalue64;
  	sc_uint<64>        uvalue64;
  	sc_biguint<120>    value;
  
  
  	TESTs64("0xusffffffff", 0xffffffff);
  	TESTs64("0xusffffffff", 0xffffffff);
  	TESTs64("0xusfffffff", 0xfffffff);
  	TESTs64("0XUSfedcab876543210", 0xfedcab876543210ull);
  	TESTs64("0ous77777777", 077777777);
  	TESTs64("0ous77777777", 077777777);
  	TESTs64("0Ous7654321076543", 07654321076543ull);
  	TESTs64("55555555555555", 55555555555555ull);
  	TESTs64("0bus1100110011001100", 0xcccc);
  	TESTs64("0bus1111111011011100101110101001100001110110010101000011001000010000",
  		  0xfedcba9876543210ll);
  
  	TESTu64("0xusffffffff", 0xffffffff);
  	TESTu64("0xusffffffff", 0xffffffff);
  	TESTu64("0xusfffffff", 0xfffffff);
  	TESTu64("0XUSfedcab876543210", 0xfedcab876543210ull);
  	TESTu64("0ous77777777", 077777777);
  	TESTu64("0ous77777777", 077777777);
  	TESTu64("0Ous7654321076543", 07654321076543ull);
  	TESTu64("55555555555555", 55555555555555ull);
  	TESTu64("0bus1100110011001100", 0xcccc);
  	TESTu64("0bus1111111011011100101110101001100001110110010101000011001000010000",
  		  0xfedcba9876543210ll);
  	for ( int i = 0; i < 60; i++ )
  	{
  		for ( int j = 0; j < 16; j++ )
  		{
  			expected = j;
  			expected = expected << i;
  			sprintf(buffer, "0Xus%llx", expected);
  			TEST(buffer, expected);
  			TESTs64(buffer, expected);
  			TESTu64(buffer, expected);
  			sprintf(buffer, "0ous%llo", expected);
  			TEST(buffer, expected);
  			TESTs64(buffer, expected);
  			TESTu64(buffer, expected);
  			sprintf(buffer, "%lld", expected);
  			TEST(buffer, expected);
  			TESTs64(buffer, expected);
  			TESTu64(buffer, expected);
  		}
  	}
  	TEST("0xusffffffff", 0xffffffff);
  	TEST("0xusffffffff", 0xffffffff);
  	TEST("0xusfffffff", 0xfffffff);
  	TEST("0XUSfedcab876543210", 0xfedcab876543210ull);
  	TEST("0ous77777777", 077777777);
  	TEST("0ous77777777", 077777777);
  	TEST("0Ous7654321076543", 07654321076543ull);
  	TEST("55555555555555", 55555555555555ull);
  	TEST("0bus1100110011001100", 0xcccc);
  	TEST("0bus1111111011011100101110101001100001110110010101000011001000010000",
  		  0xfedcba9876543210ll);
  
  	cerr << "Program completed" << endl;
  	return 0;
  }
  