systemc: Make some tests use cout instead of cerr to report completion.
[gem5.git] / src / systemc / tests / systemc / datatypes / int / misc / test02 / test02.cpp
1 #include "systemc.h"
2
3
4 inline 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
12 inline 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
61 int 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 cout << "Program completed" << endl;
127 return 0;
128 }