align_test.cpp 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. /*
  2. Copyright 2014-2015 Glen Joseph Fernandes
  3. (glenjofe@gmail.com)
  4. Distributed under the Boost Software License, Version 1.0.
  5. (http://www.boost.org/LICENSE_1_0.txt)
  6. */
  7. #include <boost/align/align.hpp>
  8. #include <boost/align/is_aligned.hpp>
  9. #include <boost/core/lightweight_test.hpp>
  10. template<std::size_t Alignment>
  11. void test()
  12. {
  13. char s[Alignment << 1];
  14. char* b = s;
  15. while (!boost::alignment::is_aligned(b, Alignment)) {
  16. ++b;
  17. }
  18. {
  19. std::size_t n = Alignment;
  20. void* p = b;
  21. void* q = boost::alignment::align(Alignment, 1, p, n);
  22. BOOST_TEST(q == p);
  23. BOOST_TEST(q == b);
  24. BOOST_TEST(boost::alignment::is_aligned(q, Alignment));
  25. BOOST_TEST(n == Alignment);
  26. }
  27. {
  28. std::size_t n = 0;
  29. void* p = b;
  30. void* q = boost::alignment::align(Alignment, 1, p, n);
  31. BOOST_TEST(q == 0);
  32. BOOST_TEST(p == b);
  33. BOOST_TEST(n == 0);
  34. }
  35. {
  36. std::size_t n = Alignment - 1;
  37. void* p = &b[1];
  38. void* q = boost::alignment::align(Alignment, 1, p, n);
  39. BOOST_TEST(q == 0);
  40. BOOST_TEST(p == &b[1]);
  41. BOOST_TEST(n == Alignment - 1);
  42. }
  43. {
  44. std::size_t n = Alignment;
  45. void* p = &b[1];
  46. void* q = boost::alignment::align(Alignment, 1, p, n);
  47. BOOST_TEST(q == p);
  48. BOOST_TEST(p == &b[Alignment]);
  49. BOOST_TEST(boost::alignment::is_aligned(q, Alignment));
  50. BOOST_TEST(n == 1);
  51. }
  52. }
  53. int main()
  54. {
  55. test<1>();
  56. test<2>();
  57. test<4>();
  58. test<8>();
  59. test<16>();
  60. test<32>();
  61. test<64>();
  62. test<128>();
  63. return boost::report_errors();
  64. }