From 6af3cb86f99364faa0f3e537662743857129ced0 Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Tue, 14 May 2024 22:57:20 +0300 Subject: [PATCH] Add test_pragma_pack --- test/CMakeLists.txt | 1 + test/Jamfile.v2 | 1 + test/test_pragma_pack.cpp | 49 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 51 insertions(+) create mode 100644 test/test_pragma_pack.cpp diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index b53fb118..46e546b8 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -19,6 +19,7 @@ boost_test(TYPE run SOURCES test_uuid_2.cpp) boost_test(TYPE run SOURCES test_alignment.cpp) boost_test(TYPE run SOURCES test_attribute_packed.cpp) +boost_test(TYPE run SOURCES test_pragma_pack.cpp) boost_test(TYPE run SOURCES test_data.cpp) boost_test(TYPE run SOURCES test_comparison.cpp COMPILE_DEFINITIONS BOOST_UUID_REPORT_IMPLEMENTATION=1) diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index 2cb88e7f..8c8770fa 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -62,6 +62,7 @@ run test_uuid_2.cpp ; run test_alignment.cpp ; run test_attribute_packed.cpp ; +run test_pragma_pack.cpp ; run test_data.cpp ; # test comparison diff --git a/test/test_pragma_pack.cpp b/test/test_pragma_pack.cpp new file mode 100644 index 00000000..151e6114 --- /dev/null +++ b/test/test_pragma_pack.cpp @@ -0,0 +1,49 @@ +// Copyright 2024 Peter Dimov +// Distributed under the Boost Software License, Version 1.0. +// https://www.boost.org/LICENSE_1_0.txt + +#include +#include +#include +#include + +#if !defined(__GNUC__) && !defined(_MSC_VER) + +BOOST_PRAGMA_MESSAGE( "Test skipped, __GNUC__ and _MSC_VER are not defined" ) +int main() {} + +#else + +using namespace boost::uuids; + +#pragma pack( push, 1 ) + +struct X1 +{ + unsigned char a; + uuid b; + unsigned char c; +}; + +struct X2 +{ + uuid a; + unsigned char b; + unsigned c; + unsigned char d; +}; + +#pragma pack( pop ) + +int main() +{ + BOOST_TEST_EQ( offsetof(X1, b), 1 ); + BOOST_TEST_EQ( sizeof(X1), 18 ); + + BOOST_TEST_EQ( offsetof(X2, c), 17 ); + BOOST_TEST_EQ( sizeof(X2), 22 ); + + return boost::report_errors(); +} + +#endif