// Copyright 2019 Peter Dimov // // Distributed under the Boost Software License, Version 1.0. // http://www.boost.org/LICENSE_1_0.txt #include #include #include template struct align { char _; T v; explicit align( typename T::value_type y ): _(), v( y ) { } }; template void test_buffer( U const & y, bool aligned ) { align x( y ); BOOST_TEST_EQ( sizeof(x), aligned? 2 * sizeof(U): 1 + sizeof(U) ); BOOST_TEST_EQ( x.v.value(), y ); } template void test_arithmetic( U const & y, bool aligned ) { test_buffer( y, aligned ); align x( y ); BOOST_TEST_EQ( x.v + 7, y + 7 ); } int main() { using namespace boost::endian; // buffers test_buffer( 3.1416f, false ); test_buffer( 3.14159, false ); test_buffer( 3.1416f, false ); test_buffer( 3.14159, false ); test_buffer( 3.1416f, false ); test_buffer( 3.14159, false ); test_buffer( 3.1416f, true ); test_buffer( 3.14159, true ); test_buffer( 3.1416f, true ); test_buffer( 3.14159, true ); // arithmetic test_arithmetic( 3.1416f, false ); test_arithmetic( 3.14159, false ); test_arithmetic( 3.1416f, false ); test_arithmetic( 3.14159, false ); test_arithmetic( 3.1416f, false ); test_arithmetic( 3.14159, false ); test_arithmetic( 3.1416f, true ); test_arithmetic( 3.14159, true ); test_arithmetic( 3.1416f, true ); test_arithmetic( 3.14159, true ); return boost::report_errors(); }