data_test.cpp 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. // Copyright 2019 Peter Dimov
  2. //
  3. // Distributed under the Boost Software License, Version 1.0.
  4. // http://www.boost.org/LICENSE_1_0.txt
  5. #include <boost/endian/arithmetic.hpp>
  6. #include <boost/endian/buffers.hpp>
  7. #include <boost/core/lightweight_test.hpp>
  8. #include <boost/config.hpp>
  9. #include <boost/cstdint.hpp>
  10. #include <cstddef>
  11. template<class U> void test()
  12. {
  13. {
  14. U u( 0 );
  15. unsigned char * p1 = u.data();
  16. void * p2 = &u;
  17. BOOST_TEST_EQ( p1, p2 );
  18. }
  19. {
  20. U const u( 0 );
  21. unsigned char const * p1 = u.data();
  22. void const * p2 = &u;
  23. BOOST_TEST_EQ( p1, p2 );
  24. }
  25. }
  26. template<class T, std::size_t Bits> void test_unaligned()
  27. {
  28. using namespace boost::endian;
  29. test< endian_buffer<order::big, T, Bits, align::no> >();
  30. test< endian_buffer<order::little, T, Bits, align::no> >();
  31. test< endian_buffer<order::native, T, Bits, align::no> >();
  32. test< endian_arithmetic<order::big, T, Bits, align::no> >();
  33. test< endian_arithmetic<order::little, T, Bits, align::no> >();
  34. test< endian_arithmetic<order::native, T, Bits, align::no> >();
  35. }
  36. template<class T, std::size_t Bits> void test_aligned()
  37. {
  38. using namespace boost::endian;
  39. test< endian_buffer<order::big, T, Bits, align::yes> >();
  40. test< endian_buffer<order::little, T, Bits, align::yes> >();
  41. test< endian_arithmetic<order::big, T, Bits, align::yes> >();
  42. test< endian_arithmetic<order::little, T, Bits, align::yes> >();
  43. }
  44. int main()
  45. {
  46. test_unaligned<boost::int_least8_t, 8>();
  47. test_unaligned<boost::int_least16_t, 16>();
  48. test_unaligned<boost::int_least32_t, 24>();
  49. test_unaligned<boost::int_least32_t, 32>();
  50. test_unaligned<boost::int_least64_t, 40>();
  51. test_unaligned<boost::int_least64_t, 48>();
  52. test_unaligned<boost::int_least64_t, 56>();
  53. test_unaligned<boost::int_least64_t, 64>();
  54. test_unaligned<boost::uint_least8_t, 8>();
  55. test_unaligned<boost::uint_least16_t, 16>();
  56. test_unaligned<boost::uint_least32_t, 24>();
  57. test_unaligned<boost::uint_least32_t, 32>();
  58. test_unaligned<boost::uint_least64_t, 40>();
  59. test_unaligned<boost::uint_least64_t, 48>();
  60. test_unaligned<boost::uint_least64_t, 56>();
  61. test_unaligned<boost::uint_least64_t, 64>();
  62. test_unaligned<float, 32>();
  63. test_unaligned<double, 64>();
  64. test_aligned<boost::int8_t, 8>();
  65. test_aligned<boost::int16_t, 16>();
  66. test_aligned<boost::int32_t, 32>();
  67. test_aligned<boost::int64_t, 64>();
  68. test_aligned<boost::uint8_t, 8>();
  69. test_aligned<boost::uint16_t, 16>();
  70. test_aligned<boost::uint32_t, 32>();
  71. test_aligned<boost::uint64_t, 64>();
  72. test_aligned<float, 32>();
  73. test_aligned<double, 64>();
  74. return boost::report_errors();
  75. }