#include #if THRUST_CPP_DIALECT >= 2014 #include #include #include /////////////////////////////////////////////////////////////////////////////// __host__ void test_event_default_constructed() { THRUST_STATIC_ASSERT( (std::is_same< thrust::event , thrust::unique_eager_event >::value) ); THRUST_STATIC_ASSERT( (std::is_same< thrust::event , thrust::device_event >::value) ); THRUST_STATIC_ASSERT( (std::is_same< thrust::device_event , thrust::device_unique_eager_event >::value) ); thrust::device_event e0; ASSERT_EQUAL(false, e0.valid_stream()); ASSERT_THROWS_EQUAL( e0.wait() , thrust::event_error , thrust::event_error(thrust::event_errc::no_state) ); ASSERT_THROWS_EQUAL( e0.stream() , thrust::event_error , thrust::event_error(thrust::event_errc::no_state) ); } DECLARE_UNITTEST(test_event_default_constructed); /////////////////////////////////////////////////////////////////////////////// __host__ void test_event_new_stream() { auto e0 = thrust::device_event(thrust::new_stream); ASSERT_EQUAL(true, e0.valid_stream()); ASSERT_NOT_EQUAL_QUIET(nullptr, e0.stream().native_handle()); e0.wait(); ASSERT_EQUAL(true, e0.ready()); } DECLARE_UNITTEST(test_event_new_stream); /////////////////////////////////////////////////////////////////////////////// __host__ void test_event_linear_chaining() { constexpr std::int64_t n = 1024; // Create a new stream. auto e0 = thrust::when_all(); auto const e0_stream = e0.stream().native_handle(); ASSERT_EQUAL(true, e0.valid_stream()); ASSERT_NOT_EQUAL_QUIET(nullptr, e0_stream); thrust::device_event e1; for (std::int64_t i = 0; i < n; ++i) { ASSERT_EQUAL(true, e0.valid_stream()); ASSERT_EQUAL(false, e1.valid_stream()); ASSERT_EQUAL(false, e1.ready()); ASSERT_EQUAL_QUIET(e0_stream, e0.stream().native_handle()); e1 = thrust::when_all(e0); ASSERT_EQUAL(false, e0.valid_stream()); ASSERT_EQUAL(false, e0.ready()); ASSERT_EQUAL(true, e1.valid_stream()); ASSERT_EQUAL(e0_stream, e1.stream().native_handle()); std::swap(e0, e1); } } DECLARE_UNITTEST(test_event_linear_chaining); /////////////////////////////////////////////////////////////////////////////// __host__ void test_event_when_all() { // Create events with new streams. auto e0 = thrust::when_all(); auto e1 = thrust::when_all(); auto e2 = thrust::when_all(); auto e3 = thrust::when_all(); auto e4 = thrust::when_all(); auto e5 = thrust::when_all(); auto e6 = thrust::when_all(); auto e7 = thrust::when_all(); auto const e0_stream = e0.stream().native_handle(); ASSERT_EQUAL(true, e0.valid_stream()); ASSERT_EQUAL(true, e1.valid_stream()); ASSERT_EQUAL(true, e2.valid_stream()); ASSERT_EQUAL(true, e3.valid_stream()); ASSERT_EQUAL(true, e4.valid_stream()); ASSERT_EQUAL(true, e5.valid_stream()); ASSERT_EQUAL(true, e6.valid_stream()); ASSERT_EQUAL(true, e7.valid_stream()); ASSERT_NOT_EQUAL_QUIET(nullptr, e0_stream); ASSERT_NOT_EQUAL_QUIET(nullptr, e1.stream().native_handle()); ASSERT_NOT_EQUAL_QUIET(nullptr, e2.stream().native_handle()); ASSERT_NOT_EQUAL_QUIET(nullptr, e3.stream().native_handle()); ASSERT_NOT_EQUAL_QUIET(nullptr, e4.stream().native_handle()); ASSERT_NOT_EQUAL_QUIET(nullptr, e5.stream().native_handle()); ASSERT_NOT_EQUAL_QUIET(nullptr, e6.stream().native_handle()); ASSERT_NOT_EQUAL_QUIET(nullptr, e7.stream().native_handle()); auto e8 = thrust::when_all(e0, e1, e2, e3, e4, e5, e6, e7); ASSERT_EQUAL(false, e0.valid_stream()); ASSERT_EQUAL(false, e1.valid_stream()); ASSERT_EQUAL(false, e2.valid_stream()); ASSERT_EQUAL(false, e3.valid_stream()); ASSERT_EQUAL(false, e4.valid_stream()); ASSERT_EQUAL(false, e5.valid_stream()); ASSERT_EQUAL(false, e6.valid_stream()); ASSERT_EQUAL(false, e7.valid_stream()); ASSERT_EQUAL(true, e8.valid_stream()); ASSERT_EQUAL(e0_stream, e8.stream().native_handle()); e8.wait(); ASSERT_EQUAL(false, e0.ready()); ASSERT_EQUAL(false, e1.ready()); ASSERT_EQUAL(false, e2.ready()); ASSERT_EQUAL(false, e3.ready()); ASSERT_EQUAL(false, e4.ready()); ASSERT_EQUAL(false, e5.ready()); ASSERT_EQUAL(false, e6.ready()); ASSERT_EQUAL(false, e7.ready()); ASSERT_EQUAL(true, e8.ready()); } DECLARE_UNITTEST(test_event_when_all); /////////////////////////////////////////////////////////////////////////////// #endif