]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/align/test/align_up_integral_test.cpp
import new upstream nautilus stable release 14.2.8
[ceph.git] / ceph / src / boost / libs / align / test / align_up_integral_test.cpp
1 /*
2 Copyright 2019 Glen Joseph Fernandes
3 (glenjofe@gmail.com)
4
5 Distributed under the Boost Software License, Version 1.0.
6 (http://www.boost.org/LICENSE_1_0.txt)
7 */
8 #include <boost/align/align_up.hpp>
9 #include <boost/core/lightweight_test.hpp>
10
11 template<std::size_t N>
12 struct A { };
13
14 template<class T, std::size_t N>
15 void test(A<N>)
16 {
17 T v1 = N;
18 BOOST_TEST(boost::alignment::align_up(v1, N) == v1);
19 T v2 = N - 1;
20 BOOST_TEST(boost::alignment::align_up(v2, N) == v1);
21 T v3 = N + N;
22 BOOST_TEST(boost::alignment::align_up(v3, N) == v3);
23 T v4 = N + 1;
24 BOOST_TEST(boost::alignment::align_up(v4, N) == v3);
25 }
26
27 template<class T>
28 void test(A<1>)
29 {
30 T v = 1;
31 BOOST_TEST(boost::alignment::align_up(v, 1) == v);
32 }
33
34 template<class T>
35 void test()
36 {
37 test<T>(A<1>());
38 test<T>(A<2>());
39 test<T>(A<4>());
40 test<T>(A<8>());
41 test<T>(A<16>());
42 test<T>(A<32>());
43 test<T>(A<64>());
44 test<T>(A<128>());
45 }
46
47 int main()
48 {
49 test<int>();
50 test<unsigned>();
51 test<long>();
52 test<unsigned long>();
53 test<short>();
54 test<unsigned short>();
55 #if !defined(BOOST_NO_LONG_LONG)
56 test<long long>();
57 test<unsigned long long>();
58 #endif
59 test<std::size_t>();
60 test<std::ptrdiff_t>();
61
62 return boost::report_errors();
63 }