//////////////////////////////////////////////////////////////////////////////// // Test boost::simd::output_iterator behavior //////////////////////////////////////////////////////////////////////////////// NT2_TEST_CASE_TPL(simd_output_iterator, BOOST_SIMD_SIMD_TYPES ) { typedef typename boost::simd::output_iterator<T> oit_; typedef typename boost::simd::input_iterator<T> iit_; typedef typename boost::simd::pack<T> p_t; static const std::size_t card = boost::simd::meta::cardinal_of<p_t>::value; // static const std::size_t at_ = card - 1; BOOST_SIMD_ALIGNED_TYPE(T) idata[3*card]; BOOST_SIMD_ALIGNED_TYPE(T) odata[3*card]; for(int i=0; i<3*card; ++i) idata[i] = i; oit_ obegin = boost::simd::output_begin(&odata[0]); oit_ oend = boost::simd::output_end(&odata[0]+3*card); iit_ ibegin = boost::simd::input_begin(&idata[0]); iit_ iend = boost::simd::input_end(&idata[0]+3*card); for(; obegin != oend; ++obegin) *obegin = *ibegin++; iit_ rbegin = boost::simd::input_begin(&odata[0]); iit_ rend = boost::simd::input_end(&odata[0]+3*card); for(int c = 0; rbegin != rend; ++rbegin, c++) { for(int i=0;i<card;++i) NT2_TEST_EQUAL( (*rbegin)[i], idata[i + c*card]); } }
NT2_TEST_CASE_TPL(constructor_from_begin_iterator, BOOST_SIMD_SIMD_TYPES ) { typedef typename boost::simd::pack<T> p_t; static const std::size_t card = boost::simd::meta::cardinal_of<p_t>::value; BOOST_SIMD_ALIGNED_TYPE(T) data[card]; for(size_t i=0; i<card; ++i) data[i] = T(i); p_t p(&data[0]); for(size_t i=0;i<card;++i) NT2_TEST_EQUAL( p[i], data[i]); }
//////////////////////////////////////////////////////////////////////////////// // Test boost::simd::input_iterator behavior //////////////////////////////////////////////////////////////////////////////// NT2_TEST_CASE_TPL(simd_input_iterator, BOOST_SIMD_SIMD_TYPES ) { typedef typename boost::simd::input_iterator<T> it_; typedef typename boost::simd::pack<T> p_t; static const std::size_t card = boost::simd::meta::cardinal_of<p_t>::value; // static const std::size_t at_ = card - 1; BOOST_SIMD_ALIGNED_TYPE(T) data[3*card]; for(int i=0; i<3*card; ++i) data[i] = i; it_ begin = boost::simd::input_begin(&data[0]); it_ end = boost::simd::input_end(&data[0]+3*card); for(int c = 0; begin != end; ++begin, c++) { for(int i=0;i<card;++i) NT2_TEST_EQUAL( (*begin)[i], data[i + c*card]); } }
//////////////////////////////////////////////////////////////////////////////// // Test boost::simd::iterator behavior //////////////////////////////////////////////////////////////////////////////// NT2_TEST_CASE_TPL(shifted_iterator, BOOST_SIMD_SIMD_TYPES ) { typedef boost::simd::shifted_iterator<T,3> sit_; typedef boost::simd::pack<T> p_t; static const std::size_t card = boost::simd::meta::cardinal_of<p_t>::value; static const std::size_t at_ = card - 1; BOOST_SIMD_ALIGNED_TYPE(T) data[3*card]; for(int i=0; i<3*card; ++i) data[i] = i; sit_ it(&data[0]); for(int i=0; i<2*card-3; ++i, ++it) { for(int j=0;j<card;++j) { NT2_TEST_EQUAL( ((*it)[0])[j], data[i + j]); NT2_TEST_EQUAL( ((*it)[1])[j], data[i+1+j]); NT2_TEST_EQUAL( ((*it)[2])[j], data[i+2+j]); } } }