test02.cpp revision 12855:588919e0e4aa
1#include "systemc.h"
2
3
4inline void dump(sc_signed& value)
5{
6	sc_digit* ptr = value.get_raw();
7	printf("    %08x_%08x_%08x_%08x\n",
8		(int)ptr[3], (int)ptr[2], (int)ptr[1], (int)ptr[0]);
9	cout << "    " << value << endl;
10}
11
12inline void dump(sc_unsigned& value)
13{
14	sc_digit* ptr = value.get_raw();
15	printf("    %08x_%08x_%08x_%08x\n",
16		(int)ptr[3], (int)ptr[2], (int)ptr[1], (int)ptr[0]);
17	cout << "    " << value << endl;
18}
19
20#define PARSE( SUBJECT ) \
21{ \
22	src_p = SUBJECT; \
23	cout << endl << #SUBJECT << ":" << endl; \
24	svalue = src_p; \
25    dump(svalue); \
26	cout << endl; \
27	value = src_p; \
28    dump(value); \
29}
30#define TEST(SUBJECT,EXPECTED) \
31{ \
32    value = SUBJECT; \
33	if ( value.to_uint64() != EXPECTED ) \
34	{ \
35		printf("%s(%d): %s: %llx != %llx\n", \
36			__FILE__, __LINE__,  SUBJECT, value.to_uint64(), (uint64)EXPECTED);\
37	} \
38}
39
40#define TESTs64(SUBJECT,EXPECTED) \
41{ \
42	svalue64 = SUBJECT; \
43	if ( svalue64 != (long long)EXPECTED )  \
44	{ \
45		printf("%s(%d): %s: %llx != %llx\n", \
46			__FILE__, __LINE__,  SUBJECT, value.to_uint64(), (uint64)EXPECTED);\
47	}\
48}
49
50#define TESTu64(SUBJECT,EXPECTED) \
51{ \
52	uvalue64 = SUBJECT; \
53	if ( uvalue64 != EXPECTED )  \
54	{ \
55		printf("%s(%d): %s: %llx != %llx\n", \
56			__FILE__, __LINE__,  SUBJECT, value.to_uint64(), (uint64)EXPECTED);\
57	}\
58}
59
60
61int sc_main(int, char**)
62{
63	char               buffer[128];
64	unsigned long long expected;
65	sc_bigint<120>     svalue;
66	sc_int<64>         svalue64;
67	sc_uint<64>        uvalue64;
68	sc_biguint<120>    value;
69
70
71	TESTs64("0xusffffffff", 0xffffffff);
72	TESTs64("0xusffffffff", 0xffffffff);
73	TESTs64("0xusfffffff", 0xfffffff);
74	TESTs64("0XUSfedcab876543210", 0xfedcab876543210ull);
75	TESTs64("0ous77777777", 077777777);
76	TESTs64("0ous77777777", 077777777);
77	TESTs64("0Ous7654321076543", 07654321076543ull);
78	TESTs64("55555555555555", 55555555555555ull);
79	TESTs64("0bus1100110011001100", 0xcccc);
80	TESTs64("0bus1111111011011100101110101001100001110110010101000011001000010000",
81		  0xfedcba9876543210ll);
82
83	TESTu64("0xusffffffff", 0xffffffff);
84	TESTu64("0xusffffffff", 0xffffffff);
85	TESTu64("0xusfffffff", 0xfffffff);
86	TESTu64("0XUSfedcab876543210", 0xfedcab876543210ull);
87	TESTu64("0ous77777777", 077777777);
88	TESTu64("0ous77777777", 077777777);
89	TESTu64("0Ous7654321076543", 07654321076543ull);
90	TESTu64("55555555555555", 55555555555555ull);
91	TESTu64("0bus1100110011001100", 0xcccc);
92	TESTu64("0bus1111111011011100101110101001100001110110010101000011001000010000",
93		  0xfedcba9876543210ll);
94	for ( int i = 0; i < 60; i++ )
95	{
96		for ( int j = 0; j < 16; j++ )
97		{
98			expected = j;
99			expected = expected << i;
100			sprintf(buffer, "0Xus%llx", expected);
101			TEST(buffer, expected);
102			TESTs64(buffer, expected);
103			TESTu64(buffer, expected);
104			sprintf(buffer, "0ous%llo", expected);
105			TEST(buffer, expected);
106			TESTs64(buffer, expected);
107			TESTu64(buffer, expected);
108			sprintf(buffer, "%lld", expected);
109			TEST(buffer, expected);
110			TESTs64(buffer, expected);
111			TESTu64(buffer, expected);
112		}
113	}
114	TEST("0xusffffffff", 0xffffffff);
115	TEST("0xusffffffff", 0xffffffff);
116	TEST("0xusfffffff", 0xfffffff);
117	TEST("0XUSfedcab876543210", 0xfedcab876543210ull);
118	TEST("0ous77777777", 077777777);
119	TEST("0ous77777777", 077777777);
120	TEST("0Ous7654321076543", 07654321076543ull);
121	TEST("55555555555555", 55555555555555ull);
122	TEST("0bus1100110011001100", 0xcccc);
123	TEST("0bus1111111011011100101110101001100001110110010101000011001000010000",
124		  0xfedcba9876543210ll);
125
126	cerr << "Program completed" << endl;
127	return 0;
128}
129