From bb785ed8e0948dd41741598a1401f9e908c6a301 Mon Sep 17 00:00:00 2001 From: Beman Date: Tue, 25 Nov 2014 11:31:30 -0500 Subject: [PATCH] UDT tests added. Passing on Windows, all local compilers. --- test/Jamfile.v2 | 2 +- test/conversion_test.cpp | 59 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+), 1 deletion(-) diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index 7e60181..b1fda76 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -23,5 +23,5 @@ project [ run endian_test.cpp ] [ run endian_operations_test.cpp ] [ run endian_in_union_test.cpp ] - [ run converter_test.cpp ] + [ run conversion_test.cpp ] ; diff --git a/test/conversion_test.cpp b/test/conversion_test.cpp index 50f0dc5..329a0a8 100644 --- a/test/conversion_test.cpp +++ b/test/conversion_test.cpp @@ -29,6 +29,7 @@ using boost::uint64_t; namespace { + // values for tests void native_value(int8_t& x) {x = static_cast(0xF0U);} @@ -261,6 +262,39 @@ namespace } } // unnamed namespace +//--------------------------------------------------------------------------------------// + + // User-defined type + + namespace user + { + struct UDT + { + int64_t member1; + int64_t member2; + int64_t member3; + }; + + UDT reverse_endianness(const UDT& udt) BOOST_NOEXCEPT + { + UDT tmp; + tmp.member1 = boost::endian::reverse_endianness(udt.member1); + tmp.member2 = boost::endian::reverse_endianness(udt.member2); + tmp.member3 = boost::endian::reverse_endianness(udt.member3); + return tmp; + } + + void reverse_endianness_in_place(UDT& udt) BOOST_NOEXCEPT + { + boost::endian::reverse_endianness_in_place(udt.member1); + boost::endian::reverse_endianness_in_place(udt.member2); + boost::endian::reverse_endianness_in_place(udt.member3); + } + + } // namespace user + +//--------------------------------------------------------------------------------------// + int cpp_main(int, char * []) { cout << "byte swap intrinsics: " BOOST_ENDIAN_INTRINSIC_MSG << endl; @@ -292,6 +326,31 @@ int cpp_main(int, char * []) cout << "double" << endl; test(); + cout << "UDT" << endl; + user::UDT udt; + int64_t big; + int64_t little; + int64_t native; + big_value(big); + little_value(little); + native_value(native); + + udt.member1 = big; + udt.member2 = little; + udt.member3 = native; + be::conditional_reverse_in_place(udt); + BOOST_TEST_EQ(udt.member1, be::reverse_endianness(big)); + BOOST_TEST_EQ(udt.member2, be::reverse_endianness(little)); + BOOST_TEST_EQ(udt.member3, be::reverse_endianness(native)); + + udt.member1 = big; + udt.member2 = little; + udt.member3 = native; + be::conditional_reverse_in_place(udt); + BOOST_TEST_EQ(udt.member1, big); + BOOST_TEST_EQ(udt.member2, little); + BOOST_TEST_EQ(udt.member3, native); + return ::boost::report_errors(); }