| #include <unittest/unittest.h> |
| #include <thrust/iterator/constant_iterator.h> |
| #include <thrust/copy.h> |
| #include <thrust/transform.h> |
| #include <thrust/reduce.h> |
|
|
| void TestConstantIteratorConstructFromConvertibleSystem(void) |
| { |
| using namespace thrust; |
|
|
| constant_iterator<int> default_system(13); |
|
|
| constant_iterator<int, use_default, host_system_tag> host_system = default_system; |
| ASSERT_EQUAL(*default_system, *host_system); |
|
|
| constant_iterator<int, use_default, device_system_tag> device_system = default_system; |
| ASSERT_EQUAL(*default_system, *device_system); |
| } |
| DECLARE_UNITTEST(TestConstantIteratorConstructFromConvertibleSystem); |
|
|
| void TestConstantIteratorIncrement(void) |
| { |
| using namespace thrust; |
|
|
| constant_iterator<int> lhs(0,0); |
| constant_iterator<int> rhs(0,0); |
|
|
| ASSERT_EQUAL(0, lhs - rhs); |
|
|
| lhs++; |
|
|
| ASSERT_EQUAL(1, lhs - rhs); |
| |
| lhs++; |
| lhs++; |
| |
| ASSERT_EQUAL(3, lhs - rhs); |
|
|
| lhs += 5; |
| |
| ASSERT_EQUAL(8, lhs - rhs); |
|
|
| lhs -= 10; |
| |
| ASSERT_EQUAL(-2, lhs - rhs); |
| } |
| DECLARE_UNITTEST(TestConstantIteratorIncrement); |
|
|
| void TestConstantIteratorIncrementBig(void) |
| { |
| long long int n = 10000000000ULL; |
|
|
| thrust::constant_iterator<long long int> begin(1); |
| thrust::constant_iterator<long long int> end = begin + n; |
|
|
| ASSERT_EQUAL(thrust::distance(begin, end), n); |
| } |
| DECLARE_UNITTEST(TestConstantIteratorIncrementBig); |
|
|
| void TestConstantIteratorComparison(void) |
| { |
| using namespace thrust; |
|
|
| constant_iterator<int> iter1(0); |
| constant_iterator<int> iter2(0); |
|
|
| ASSERT_EQUAL(0, iter1 - iter2); |
| ASSERT_EQUAL(true, iter1 == iter2); |
|
|
| iter1++; |
| |
| ASSERT_EQUAL(1, iter1 - iter2); |
| ASSERT_EQUAL(false, iter1 == iter2); |
| |
| iter2++; |
|
|
| ASSERT_EQUAL(0, iter1 - iter2); |
| ASSERT_EQUAL(true, iter1 == iter2); |
| |
| iter1 += 100; |
| iter2 += 100; |
|
|
| ASSERT_EQUAL(0, iter1 - iter2); |
| ASSERT_EQUAL(true, iter1 == iter2); |
| } |
| DECLARE_UNITTEST(TestConstantIteratorComparison); |
|
|
|
|
| void TestMakeConstantIterator(void) |
| { |
| using namespace thrust; |
|
|
| |
| constant_iterator<int> iter0 = make_constant_iterator<int>(13); |
|
|
| ASSERT_EQUAL(13, *iter0); |
|
|
| |
| constant_iterator<int,thrust::detail::intmax_t> iter1 = make_constant_iterator<int,thrust::detail::intmax_t>(13, 7); |
|
|
| ASSERT_EQUAL(13, *iter1); |
| ASSERT_EQUAL(7, iter1 - iter0); |
| } |
| DECLARE_UNITTEST(TestMakeConstantIterator); |
|
|
|
|
| template<typename Vector> |
| void TestConstantIteratorCopy(void) |
| { |
| using namespace thrust; |
|
|
| typedef constant_iterator<int> ConstIter; |
|
|
| Vector result(4); |
|
|
| ConstIter first = make_constant_iterator<int>(7); |
| ConstIter last = first + result.size(); |
| thrust::copy(first, last, result.begin()); |
|
|
| ASSERT_EQUAL(7, result[0]); |
| ASSERT_EQUAL(7, result[1]); |
| ASSERT_EQUAL(7, result[2]); |
| ASSERT_EQUAL(7, result[3]); |
| }; |
| DECLARE_VECTOR_UNITTEST(TestConstantIteratorCopy); |
|
|
|
|
| template<typename Vector> |
| void TestConstantIteratorTransform(void) |
| { |
| using namespace thrust; |
|
|
| typedef typename Vector::value_type T; |
| typedef constant_iterator<T> ConstIter; |
|
|
| Vector result(4); |
|
|
| ConstIter first1 = make_constant_iterator<T>(7); |
| ConstIter last1 = first1 + result.size(); |
| ConstIter first2 = make_constant_iterator<T>(3); |
|
|
| thrust::transform(first1, last1, result.begin(), thrust::negate<T>()); |
|
|
| ASSERT_EQUAL(-7, result[0]); |
| ASSERT_EQUAL(-7, result[1]); |
| ASSERT_EQUAL(-7, result[2]); |
| ASSERT_EQUAL(-7, result[3]); |
| |
| thrust::transform(first1, last1, first2, result.begin(), thrust::plus<T>()); |
|
|
| ASSERT_EQUAL(10, result[0]); |
| ASSERT_EQUAL(10, result[1]); |
| ASSERT_EQUAL(10, result[2]); |
| ASSERT_EQUAL(10, result[3]); |
| }; |
| DECLARE_VECTOR_UNITTEST(TestConstantIteratorTransform); |
|
|
|
|
| void TestConstantIteratorReduce(void) |
| { |
| using namespace thrust; |
|
|
| typedef int T; |
| typedef constant_iterator<T> ConstIter; |
|
|
| ConstIter first = make_constant_iterator<T>(7); |
| ConstIter last = first + 4; |
|
|
| T sum = thrust::reduce(first, last); |
|
|
| ASSERT_EQUAL(sum, 4 * 7); |
| }; |
| DECLARE_UNITTEST(TestConstantIteratorReduce); |
|
|
|
|