Beispiel #1
0
////////////////////////////////////////////////////////////////////////////////
// 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]);
  }
}
Beispiel #2
0
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]);
}
Beispiel #3
0
////////////////////////////////////////////////////////////////////////////////
// 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]);
  }
}
Beispiel #4
0
////////////////////////////////////////////////////////////////////////////////
// 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]);
    }
  }

}