template<typename VectorType> void vectorSum(const VectorType& w) { typedef typename VectorType::Scalar Scalar; int size = w.size(); VectorType v = VectorType::Random(size); for(int i = 1; i < size; i++) { Scalar s = Scalar(0); for(int j = 0; j < i; j++) s += v[j]; VERIFY_IS_APPROX(s, v.start(i).sum()); } for(int i = 0; i < size-1; i++) { Scalar s = Scalar(0); for(int j = i; j < size; j++) s += v[j]; VERIFY_IS_APPROX(s, v.end(size-i).sum()); } for(int i = 0; i < size/2; i++) { Scalar s = Scalar(0); for(int j = i; j < size-i; j++) s += v[j]; VERIFY_IS_APPROX(s, v.segment(i, size-2*i).sum()); } }
vector_range(VectorType & v, range const & entry_range) : base_type(v.handle(), entry_range.size(), v.start() + v.stride() * entry_range.start(), v.stride()) {}
vector_slice(VectorType & v, slice const & entry_slice) : base_type(v.handle(), entry_slice.size(), v.start() + v.stride() * entry_slice.start(), v.stride() * entry_slice.stride()) {}