| /* |
| (c) 2014 Glen Joseph Fernandes |
| glenjofe at gmail dot com |
| |
| Distributed under the Boost Software |
| License, Version 1.0. |
| http://boost.org/LICENSE_1_0.txt |
| */ |
| #include <boost/align/aligned_allocator.hpp> |
| #include <boost/align/is_aligned.hpp> |
| #include <boost/core/lightweight_test.hpp> |
| #include <cstddef> |
| #include <cstring> |
| |
| template<std::size_t Alignment> |
| void test_allocate() |
| { |
| { |
| boost::alignment::aligned_allocator<int, Alignment> a; |
| int* p = a.allocate(1); |
| BOOST_TEST(p != 0); |
| BOOST_TEST(boost::alignment::is_aligned(Alignment, p)); |
| std::memset(p, 0, 1); |
| a.deallocate(p, 1); |
| } |
| { |
| boost::alignment::aligned_allocator<int, Alignment> a; |
| int* p = a.allocate(0); |
| a.deallocate(p, 0); |
| } |
| } |
| |
| template<std::size_t Alignment> |
| void test_construct() |
| { |
| boost::alignment::aligned_allocator<int, Alignment> a; |
| int* p = a.allocate(1); |
| a.construct(p, 1); |
| BOOST_TEST(*p == 1); |
| a.destroy(p); |
| a.deallocate(p, 1); |
| } |
| |
| template<std::size_t Alignment> |
| void test_constructor() |
| { |
| boost::alignment::aligned_allocator<char, Alignment> a1; |
| boost::alignment::aligned_allocator<int, Alignment> a2(a1); |
| BOOST_TEST(a2 == a1); |
| } |
| |
| template<std::size_t Alignment> |
| void test_rebind() |
| { |
| boost::alignment::aligned_allocator<char, Alignment> a1; |
| typename boost::alignment::aligned_allocator<char, |
| Alignment>::template rebind<int>::other a2(a1); |
| BOOST_TEST(a2 == a1); |
| } |
| |
| template<std::size_t Alignment> |
| void test() |
| { |
| test_allocate<Alignment>(); |
| test_construct<Alignment>(); |
| test_constructor<Alignment>(); |
| test_rebind<Alignment>(); |
| } |
| |
| int main() |
| { |
| test<1>(); |
| test<2>(); |
| test<4>(); |
| test<8>(); |
| test<16>(); |
| test<32>(); |
| test<64>(); |
| test<128>(); |
| |
| return boost::report_errors(); |
| } |