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