diff options
author | Gabe Black <gabeblack@google.com> | 2018-05-24 01:37:55 -0700 |
---|---|---|
committer | Gabe Black <gabeblack@google.com> | 2018-08-08 10:09:54 +0000 |
commit | 16fa8d7cc8c92f5ab879e4cf9c6c0bbb3567860f (patch) | |
tree | 7b6faaacb4574a555e561534aa4a8508c0624c32 /src/systemc/tests/systemc/datatypes/int/misc/test02 | |
parent | 7235d3b5211d0ba8f528d930a4c1e7ad62eec51a (diff) | |
download | gem5-16fa8d7cc8c92f5ab879e4cf9c6c0bbb3567860f.tar.xz |
systemc: Import tests from the Accellera systemc distribution.
Change-Id: Iad76b398949a55d768a34d027a2d8e3739953da6
Reviewed-on: https://gem5-review.googlesource.com/10845
Reviewed-by: Giacomo Travaglini <giacomo.travaglini@arm.com>
Maintainer: Gabe Black <gabeblack@google.com>
Diffstat (limited to 'src/systemc/tests/systemc/datatypes/int/misc/test02')
-rw-r--r-- | src/systemc/tests/systemc/datatypes/int/misc/test02/golden/test02.log | 2 | ||||
-rw-r--r-- | src/systemc/tests/systemc/datatypes/int/misc/test02/test02.cpp | 128 |
2 files changed, 130 insertions, 0 deletions
diff --git a/src/systemc/tests/systemc/datatypes/int/misc/test02/golden/test02.log b/src/systemc/tests/systemc/datatypes/int/misc/test02/golden/test02.log new file mode 100644 index 000000000..0d934d401 --- /dev/null +++ b/src/systemc/tests/systemc/datatypes/int/misc/test02/golden/test02.log @@ -0,0 +1,2 @@ +SystemC Simulation +Program completed diff --git a/src/systemc/tests/systemc/datatypes/int/misc/test02/test02.cpp b/src/systemc/tests/systemc/datatypes/int/misc/test02/test02.cpp new file mode 100644 index 000000000..d27e98062 --- /dev/null +++ b/src/systemc/tests/systemc/datatypes/int/misc/test02/test02.cpp @@ -0,0 +1,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; +} |