//---------------------------------------------------------------------------// // Copyright (c) 2013 Kyle Lutz // // Distributed under the Boost Software License, Version 1.0 // See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt // // See http://boostorg.github.com/compute for more information. //---------------------------------------------------------------------------// #define BOOST_TEST_MODULE TestTypeTraits #include #include #include #include #include #include #include #include #include #include #include #include namespace bc = boost::compute; BOOST_AUTO_TEST_CASE(scalar_type) { BOOST_STATIC_ASSERT((boost::is_same::type, int>::value)); BOOST_STATIC_ASSERT((boost::is_same::type, int>::value)); BOOST_STATIC_ASSERT((boost::is_same::type, float>::value)); BOOST_STATIC_ASSERT((boost::is_same::type, float>::value)); } BOOST_AUTO_TEST_CASE(vector_size) { BOOST_STATIC_ASSERT(bc::vector_size::value == 1); BOOST_STATIC_ASSERT(bc::vector_size::value == 2); BOOST_STATIC_ASSERT(bc::vector_size::value == 1); BOOST_STATIC_ASSERT(bc::vector_size::value == 4); } BOOST_AUTO_TEST_CASE(is_vector_type) { BOOST_STATIC_ASSERT(bc::is_vector_type::value == false); BOOST_STATIC_ASSERT(bc::is_vector_type::value == true); BOOST_STATIC_ASSERT(bc::is_vector_type::value == false); BOOST_STATIC_ASSERT(bc::is_vector_type::value == true); } BOOST_AUTO_TEST_CASE(make_vector_type) { BOOST_STATIC_ASSERT((boost::is_same::type, bc::uint2_>::value)); BOOST_STATIC_ASSERT((boost::is_same::type, bc::int4_>::value)); BOOST_STATIC_ASSERT((boost::is_same::type, bc::float8_>::value)); BOOST_STATIC_ASSERT((boost::is_same::type, bc::char16_>::value)); } BOOST_AUTO_TEST_CASE(is_fundamental_type) { BOOST_STATIC_ASSERT((bc::is_fundamental::value == true)); BOOST_STATIC_ASSERT((bc::is_fundamental::value == true)); BOOST_STATIC_ASSERT((bc::is_fundamental::value == true)); BOOST_STATIC_ASSERT((bc::is_fundamental::value == true)); BOOST_STATIC_ASSERT((bc::is_fundamental::value == true)); BOOST_STATIC_ASSERT((bc::is_fundamental::value == true)); BOOST_STATIC_ASSERT((bc::is_fundamental >::value == false)); BOOST_STATIC_ASSERT((bc::is_fundamental >::value == false)); } BOOST_AUTO_TEST_CASE(type_name) { // scalar types BOOST_CHECK(std::strcmp(bc::type_name(), "char") == 0); BOOST_CHECK(std::strcmp(bc::type_name(), "uchar") == 0); BOOST_CHECK(std::strcmp(bc::type_name(), "short") == 0); BOOST_CHECK(std::strcmp(bc::type_name(), "ushort") == 0); BOOST_CHECK(std::strcmp(bc::type_name(), "int") == 0); BOOST_CHECK(std::strcmp(bc::type_name(), "uint") == 0); BOOST_CHECK(std::strcmp(bc::type_name(), "long") == 0); BOOST_CHECK(std::strcmp(bc::type_name(), "ulong") == 0); BOOST_CHECK(std::strcmp(bc::type_name(), "float") == 0); BOOST_CHECK(std::strcmp(bc::type_name(), "double") == 0); BOOST_CHECK(std::strcmp(bc::type_name(), "bool") == 0); // vector types BOOST_CHECK(std::strcmp(bc::type_name(), "char16") == 0); BOOST_CHECK(std::strcmp(bc::type_name(), "uint4") == 0); BOOST_CHECK(std::strcmp(bc::type_name(), "ulong8") == 0); BOOST_CHECK(std::strcmp(bc::type_name(), "float2") == 0); BOOST_CHECK(std::strcmp(bc::type_name(), "double4") == 0); } BOOST_AUTO_TEST_CASE(is_contiguous_iterator) { using boost::compute::detail::is_contiguous_iterator; BOOST_STATIC_ASSERT(is_contiguous_iterator::value == true); BOOST_STATIC_ASSERT(is_contiguous_iterator::iterator>::value == true); BOOST_STATIC_ASSERT(is_contiguous_iterator::const_iterator>::value == true); BOOST_STATIC_ASSERT(is_contiguous_iterator::iterator>::value == false); BOOST_STATIC_ASSERT(is_contiguous_iterator::iterator>::value == false); BOOST_STATIC_ASSERT(is_contiguous_iterator > >::value == false); BOOST_STATIC_ASSERT(is_contiguous_iterator > >::value == false); } BOOST_AUTO_TEST_CASE(is_buffer_iterator) { using boost::compute::detail::is_buffer_iterator; BOOST_STATIC_ASSERT(is_buffer_iterator >::value == true); BOOST_STATIC_ASSERT(is_buffer_iterator >::value == false); } BOOST_AUTO_TEST_CASE(is_device_iterator) { using boost::compute::is_device_iterator; BOOST_STATIC_ASSERT(is_device_iterator >::value == true); BOOST_STATIC_ASSERT(is_device_iterator >::value == true); BOOST_STATIC_ASSERT(is_device_iterator >::value == true); BOOST_STATIC_ASSERT(is_device_iterator >::value == true); BOOST_STATIC_ASSERT(is_device_iterator::value == false); BOOST_STATIC_ASSERT(is_device_iterator::value == false); BOOST_STATIC_ASSERT(is_device_iterator::iterator>::value == false); BOOST_STATIC_ASSERT(is_device_iterator::iterator>::value == false); }