summaryrefslogtreecommitdiffstats
path: root/src/boost/libs/align/test/aligned_allocator_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/boost/libs/align/test/aligned_allocator_test.cpp')
-rw-r--r--src/boost/libs/align/test/aligned_allocator_test.cpp106
1 files changed, 106 insertions, 0 deletions
diff --git a/src/boost/libs/align/test/aligned_allocator_test.cpp b/src/boost/libs/align/test/aligned_allocator_test.cpp
new file mode 100644
index 000000000..c8fdf8ed8
--- /dev/null
+++ b/src/boost/libs/align/test/aligned_allocator_test.cpp
@@ -0,0 +1,106 @@
+/*
+Copyright 2014 Glen Joseph Fernandes
+(glenjofe@gmail.com)
+
+Distributed under the Boost Software License, Version 1.0.
+(http://www.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 <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(p, Alignment));
+ 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);
+ }
+ {
+ boost::alignment::aligned_allocator<char, Alignment> a1;
+ boost::alignment::aligned_allocator<void, Alignment> a2(a1);
+ BOOST_TEST(a2 == a1);
+ }
+ {
+ boost::alignment::aligned_allocator<void, Alignment> a1;
+ boost::alignment::aligned_allocator<char, 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);
+ }
+ {
+ boost::alignment::aligned_allocator<char, Alignment> a1;
+ typename boost::alignment::aligned_allocator<char,
+ Alignment>::template rebind<void>::other a2(a1);
+ BOOST_TEST(a2 == a1);
+ }
+ {
+ boost::alignment::aligned_allocator<void, Alignment> a1;
+ typename boost::alignment::aligned_allocator<void,
+ Alignment>::template rebind<char>::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();
+}