align_down_integral_test.cpp 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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_down.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_down(v1, N) == v1);
  16. T v2 = N + 1;
  17. BOOST_TEST(boost::alignment::align_down(v2, N) == v1);
  18. }
  19. template<class T>
  20. void test(A<1>)
  21. {
  22. T v = 1;
  23. BOOST_TEST(boost::alignment::align_down(v, 1) == v);
  24. }
  25. template<class T>
  26. void test()
  27. {
  28. test<T>(A<1>());
  29. test<T>(A<2>());
  30. test<T>(A<4>());
  31. test<T>(A<8>());
  32. test<T>(A<16>());
  33. test<T>(A<32>());
  34. test<T>(A<64>());
  35. test<T>(A<128>());
  36. }
  37. int main()
  38. {
  39. test<int>();
  40. test<unsigned>();
  41. test<long>();
  42. test<unsigned long>();
  43. test<short>();
  44. test<unsigned short>();
  45. #if !defined(BOOST_NO_LONG_LONG)
  46. test<long long>();
  47. test<unsigned long long>();
  48. #endif
  49. test<std::size_t>();
  50. test<std::ptrdiff_t>();
  51. return boost::report_errors();
  52. }