summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/endian_str_test.cpp52
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();
}