summaryrefslogtreecommitdiffstats
path: root/src/boost/libs/align/test/is_aligned_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/boost/libs/align/test/is_aligned_test.cpp')
-rw-r--r--src/boost/libs/align/test/is_aligned_test.cpp73
1 files changed, 73 insertions, 0 deletions
diff --git a/src/boost/libs/align/test/is_aligned_test.cpp b/src/boost/libs/align/test/is_aligned_test.cpp
new file mode 100644
index 00000000..3098e8d0
--- /dev/null
+++ b/src/boost/libs/align/test/is_aligned_test.cpp
@@ -0,0 +1,73 @@
+/*
+Copyright 2014-2015 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/alignment_of.hpp>
+#include <boost/align/is_aligned.hpp>
+#include <boost/core/lightweight_test.hpp>
+#include <boost/config.hpp>
+
+template<std::size_t N>
+struct A { };
+
+template<std::size_t N>
+void test(char* p, A<N>)
+{
+ BOOST_TEST(boost::alignment::is_aligned(p, N));
+ BOOST_TEST(!boost::alignment::is_aligned(p + 1, N));
+}
+
+void test(char* p, A<1>)
+{
+ BOOST_TEST(boost::alignment::is_aligned(p, 1));
+}
+
+template<class T>
+void test()
+{
+ T o;
+ test(reinterpret_cast<char*>(&o),
+ A<boost::alignment::alignment_of<T>::value>());
+}
+
+class X;
+
+int main()
+{
+ test<bool>();
+ test<char>();
+ test<wchar_t>();
+#if !defined(BOOST_NO_CXX11_CHAR16_T)
+ test<char16_t>();
+#endif
+#if !defined(BOOST_NO_CXX11_CHAR32_T)
+ test<char32_t>();
+#endif
+ test<short>();
+ test<int>();
+ test<long>();
+#if !defined(BOOST_NO_LONG_LONG) && !defined(_MSC_VER)
+ test<long long>();
+#endif
+ test<float>();
+#if !defined(BOOST_MSVC)
+ test<double>();
+ test<long double>();
+#endif
+ test<void*>();
+ test<char*>();
+ test<int*>();
+ test<X*>();
+ test<void(*)()>();
+#if !defined(_MSC_VER) || !defined(__clang__)
+#if !defined(BOOST_MSVC)
+ test<int X::*>();
+ test<int(X::*)()>();
+#endif
+#endif
+
+ return boost::report_errors();
+}