#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;
}
