align_up_integral_test.cpp 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. /*
  2. Copyright 2019 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_up.hpp>
  8. #include <boost/core/lightweight_test.hpp>
  9. template<std::size_t N>
  10. struct A { };
  11. template<class T, std::size_t N>
  12. void test(A<N>)
  13. {
  14. T v1 = N;
  15. BOOST_TEST(boost::alignment::align_up(v1, N) == v1);
  16. T v2 = N - 1;
  17. BOOST_TEST(boost::alignment::align_up(v2, N) == v1);
  18. T v3 = N + N;
  19. BOOST_TEST(boost::alignment::align_up(v3, N) == v3);
  20. T v4 = N + 1;
  21. BOOST_TEST(boost::alignment::align_up(v4, N) == v3);
  22. }
  23. template<class T>
  24. void test(A<1>)
  25. {
  26. T v = 1;
  27. BOOST_TEST(boost::alignment::align_up(v, 1) == v);
  28. }
  29. template<class T>
  30. void test()
  31. {
  32. test<T>(A<1>());
  33. test<T>(A<2>());
  34. test<T>(A<4>());
  35. test<T>(A<8>());
  36. test<T>(A<16>());
  37. test<T>(A<32>());
  38. test<T>(A<64>());
  39. test<T>(A<128>());
  40. }
  41. int main()
  42. {
  43. test<int>();
  44. test<unsigned>();
  45. test<long>();
  46. test<unsigned long>();
  47. test<short>();
  48. test<unsigned short>();
  49. #if !defined(BOOST_NO_LONG_LONG)
  50. test<long long>();
  51. test<unsigned long long>();
  52. #endif
  53. test<std::size_t>();
  54. test<std::ptrdiff_t>();
  55. return boost::report_errors();
  56. }