Spaces:
Runtime error
Runtime error
| void TestDevicePointerManipulation(void) | |
| { | |
| thrust::device_vector<int> data(5); | |
| thrust::device_ptr<int> begin(&data[0]); | |
| thrust::device_ptr<int> end(&data[0] + 5); | |
| ASSERT_EQUAL(end - begin, 5); | |
| begin++; | |
| begin--; | |
| ASSERT_EQUAL(end - begin, 5); | |
| begin += 1; | |
| begin -= 1; | |
| ASSERT_EQUAL(end - begin, 5); | |
| begin = begin + (int) 1; | |
| begin = begin - (int) 1; | |
| ASSERT_EQUAL(end - begin, 5); | |
| begin = begin + (unsigned int) 1; | |
| begin = begin - (unsigned int) 1; | |
| ASSERT_EQUAL(end - begin, 5); | |
| begin = begin + (size_t) 1; | |
| begin = begin - (size_t) 1; | |
| ASSERT_EQUAL(end - begin, 5); | |
| begin = begin + (ptrdiff_t) 1; | |
| begin = begin - (ptrdiff_t) 1; | |
| ASSERT_EQUAL(end - begin, 5); | |
| begin = begin + (thrust::device_ptr<int>::difference_type) 1; | |
| begin = begin - (thrust::device_ptr<int>::difference_type) 1; | |
| ASSERT_EQUAL(end - begin, 5); | |
| } | |
| DECLARE_UNITTEST(TestDevicePointerManipulation); | |
| void TestMakeDevicePointer(void) | |
| { | |
| typedef int T; | |
| T *raw_ptr = 0; | |
| thrust::device_ptr<T> p0 = thrust::device_pointer_cast(raw_ptr); | |
| ASSERT_EQUAL(thrust::raw_pointer_cast(p0), raw_ptr); | |
| thrust::device_ptr<T> p1 = thrust::device_pointer_cast(p0); | |
| ASSERT_EQUAL(p0, p1); | |
| } | |
| DECLARE_UNITTEST(TestMakeDevicePointer); | |
| template<typename Vector> | |
| void TestRawPointerCast(void) | |
| { | |
| typedef typename Vector::value_type T; | |
| Vector vec(3); | |
| T * first; | |
| T * last; | |
| first = thrust::raw_pointer_cast(&vec[0]); | |
| last = thrust::raw_pointer_cast(&vec[3]); | |
| ASSERT_EQUAL(last - first, 3); | |
| first = thrust::raw_pointer_cast(&vec.front()); | |
| last = thrust::raw_pointer_cast(&vec.back()); | |
| ASSERT_EQUAL(last - first, 2); | |
| // Do we want these to work? | |
| //first = thrust::raw_pointer_cast(vec.begin()); | |
| //last = thrust::raw_pointer_cast(vec.end()); | |
| //ASSERT_EQUAL(last - first, 3); | |
| } | |
| DECLARE_VECTOR_UNITTEST(TestRawPointerCast); | |
| template<typename T> | |
| void TestDevicePointerNullptrCompatibility() | |
| { | |
| thrust::device_ptr<T> p0(nullptr); | |
| ASSERT_EQUAL_QUIET(nullptr, p0); | |
| ASSERT_EQUAL_QUIET(p0, nullptr); | |
| p0 = nullptr; | |
| ASSERT_EQUAL_QUIET(nullptr, p0); | |
| ASSERT_EQUAL_QUIET(p0, nullptr); | |
| } | |
| DECLARE_GENERIC_UNITTEST(TestDevicePointerNullptrCompatibility); | |
| template<typename T> | |
| void TestDevicePointerBoolConversion() | |
| { | |
| thrust::device_ptr<T> p0(nullptr); | |
| auto const b = bool(p0); | |
| ASSERT_EQUAL_QUIET(false, b); | |
| } | |
| DECLARE_GENERIC_UNITTEST(TestDevicePointerBoolConversion); | |