Spaces:
Runtime error
Runtime error
| template<typename T> | |
| struct test_allocator_t | |
| { | |
| }; | |
| test_allocator_t<int> test_allocator = test_allocator_t<int>(); | |
| template<int I> | |
| struct test_dependency_t | |
| { | |
| }; | |
| template<int I> | |
| test_dependency_t<I> test_dependency() | |
| { | |
| return {}; | |
| } | |
| template<typename Policy, template<typename> class CRTPBase> | |
| struct policy_info | |
| { | |
| using policy = Policy; | |
| template<template<template<typename> class, typename...> class Template, typename ...Arguments> | |
| using apply_base_first = Template<CRTPBase, Arguments...>; | |
| template<template<typename, template<typename> class, typename...> class Template, typename First, typename ...Arguments> | |
| using apply_base_second = Template<First, CRTPBase, Arguments...>; | |
| }; | |
| template<typename PolicyInfo> | |
| struct TestDependencyAttachment | |
| { | |
| template<typename ...Expected, typename T> | |
| static void assert_correct(T) | |
| { | |
| ASSERT_EQUAL( | |
| (thrust::detail::is_same< | |
| T, | |
| typename PolicyInfo::template apply_base_first< | |
| thrust::detail::execute_with_dependencies, | |
| Expected... | |
| > | |
| >::value), true); | |
| } | |
| template<typename Allocator, typename ...Expected, typename T> | |
| static void assert_correct_with_allocator(T) | |
| { | |
| ASSERT_EQUAL( | |
| (thrust::detail::is_same< | |
| T, | |
| typename PolicyInfo::template apply_base_second< | |
| thrust::detail::execute_with_allocator_and_dependencies, | |
| Allocator, | |
| Expected... | |
| > | |
| >::value), true); | |
| } | |
| void operator()() | |
| { | |
| typename PolicyInfo::policy policy; | |
| assert_correct< | |
| test_dependency_t<1> | |
| >(policy | |
| .after( | |
| test_dependency<1>() | |
| ) | |
| ); | |
| assert_correct< | |
| test_dependency_t<1>, | |
| test_dependency_t<2> | |
| >(policy | |
| .after( | |
| test_dependency<1>(), | |
| test_dependency<2>() | |
| ) | |
| ); | |
| assert_correct< | |
| test_dependency_t<1>, | |
| test_dependency_t<2>, | |
| test_dependency_t<3> | |
| >(policy | |
| .after( | |
| test_dependency<1>(), | |
| test_dependency<2>(), | |
| test_dependency<3>() | |
| ) | |
| ); | |
| assert_correct_with_allocator< | |
| test_allocator_t<int> &, | |
| test_dependency_t<1> | |
| >(policy(test_allocator) | |
| .after( | |
| test_dependency<1>() | |
| ) | |
| ); | |
| assert_correct_with_allocator< | |
| test_allocator_t<int> &, | |
| test_dependency_t<1>, | |
| test_dependency_t<2> | |
| >(policy(test_allocator) | |
| .after( | |
| test_dependency<1>(), | |
| test_dependency<2>() | |
| ) | |
| ); | |
| assert_correct_with_allocator< | |
| test_allocator_t<int> &, | |
| test_dependency_t<1>, | |
| test_dependency_t<2>, | |
| test_dependency_t<3> | |
| >(policy(test_allocator) | |
| .after( | |
| test_dependency<1>(), | |
| test_dependency<2>(), | |
| test_dependency<3>() | |
| ) | |
| ); | |
| } | |
| }; | |
| typedef policy_info< | |
| thrust::detail::seq_t, | |
| thrust::system::detail::sequential::execution_policy | |
| > sequential_info; | |
| typedef policy_info< | |
| thrust::system::cpp::detail::par_t, | |
| thrust::system::cpp::detail::execution_policy | |
| > cpp_par_info; | |
| typedef policy_info< | |
| thrust::system::omp::detail::par_t, | |
| thrust::system::omp::detail::execution_policy | |
| > omp_par_info; | |
| typedef policy_info< | |
| thrust::system::tbb::detail::par_t, | |
| thrust::system::tbb::detail::execution_policy | |
| > tbb_par_info; | |
| typedef policy_info< | |
| thrust::system::cuda::detail::par_t, | |
| thrust::cuda_cub::execute_on_stream_base | |
| > cuda_par_info; | |
| SimpleUnitTest< | |
| TestDependencyAttachment, | |
| unittest::type_list< | |
| // TODO: uncomment when dependencies are generalized to all backends | |
| // sequential_info, | |
| // cpp_par_info, | |
| // omp_par_info, | |
| // tbb_par_info, | |
| cuda_par_info | |
| > | |
| > TestDependencyAttachmentInstance; | |
| void TestDummy() | |
| { | |
| } | |
| DECLARE_UNITTEST(TestDummy); | |