1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
#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;
}
|