diff options
Diffstat (limited to 'test/endian_str_test.cpp')
| -rw-r--r-- | test/endian_str_test.cpp | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/test/endian_str_test.cpp b/test/endian_str_test.cpp index d9d01d15c5..82bb429d50 100644 --- a/test/endian_str_test.cpp +++ b/test/endian_str_test.cpp @@ -74,7 +74,59 @@ void test_uint() ASSERT(u64 == 0x090A0B0C0D0E0F10ULL); } +void test_sint() +{ + std::stringstream str(std::ios::in | std::ios::out | std::ios::binary); + + write_little(str, int8_t (-0x01)); + write_little(str, int16_t(-0x0102)); + write_little(str, int32_t(-0x01020304L)); + write_little(str, int64_t(-0x0102030405060708LL)); + + write_big (str, int8_t (-0x09)); + write_big (str, int16_t(-0x090A)); + write_big (str, int32_t(-0x090A0B0CL)); + write_big (str, int64_t(-0x090A0B0C0D0E0F10LL)); + + const char expected[] = { //meh, stupid narrowing conversions + '\xFF', + '\xFE', '\xFE', + '\xFC', '\xFC', '\xFD', '\xFE', + '\xF8', '\xF8', '\xF9', '\xFA', '\xFB', '\xFC', '\xFD', '\xFE', + + '\xF7', + '\xF6', '\xF6', + '\xF6', '\xF5', '\xF4', '\xF4', + '\xF6', '\xF5', '\xF4', '\xF3', '\xF2', '\xF1', '\xF0', '\xF0', + 0}; //Null terminator + ASSERT(str.str() == expected); + + int8_t i8; + int16_t i16; + int32_t i32; + int64_t i64; + + read_little(str, i8); + ASSERT(i8 == -0x01); + read_little(str, i16); + ASSERT(i16 == -0x0102); + read_little(str, i32); + ASSERT(i32 == -0x01020304UL); + read_little(str, i64); + ASSERT(i64 == -0x0102030405060708ULL); + + read_big(str, i8); + ASSERT(i8 == -0x09); + read_big(str, i16); + ASSERT(i16 == -0x090A); + read_big(str, i32); + ASSERT(i32 == -0x090A0B0CUL); + read_big(str, i64); + ASSERT(i64 == -0x090A0B0C0D0E0F10ULL); +} + int main() { test_uint(); + test_sint(); } |
