2424using namespace sycl ;
2525using namespace sycl ::ONEAPI;
2626
27- template <class BinaryOperation , int TestNumber>
27+ template <class SpecializationKernelName , int TestNumber>
2828class exclusive_scan_kernel ;
2929
3030// std::exclusive_scan isn't implemented yet, so use serial implementation
@@ -44,17 +44,17 @@ OutputIterator exclusive_scan(InputIterator first, InputIterator last,
4444}
4545} // namespace emu
4646
47- template <typename InputContainer , typename OutputContainer ,
48- class BinaryOperation >
47+ template <typename SpecializationKernelName , typename InputContainer ,
48+ typename OutputContainer, class BinaryOperation >
4949void test (queue q, InputContainer input, OutputContainer output,
5050 BinaryOperation binary_op,
5151 typename OutputContainer::value_type identity) {
5252 typedef typename InputContainer::value_type InputT;
5353 typedef typename OutputContainer::value_type OutputT;
54- typedef class exclusive_scan_kernel <BinaryOperation , 0 > kernel_name0;
55- typedef class exclusive_scan_kernel <BinaryOperation , 1 > kernel_name1;
56- typedef class exclusive_scan_kernel <BinaryOperation , 2 > kernel_name2;
57- typedef class exclusive_scan_kernel <BinaryOperation , 3 > kernel_name3;
54+ typedef class exclusive_scan_kernel <SpecializationKernelName , 0 > kernel_name0;
55+ typedef class exclusive_scan_kernel <SpecializationKernelName , 1 > kernel_name1;
56+ typedef class exclusive_scan_kernel <SpecializationKernelName , 2 > kernel_name2;
57+ typedef class exclusive_scan_kernel <SpecializationKernelName , 3 > kernel_name3;
5858 OutputT init = 42 ;
5959 size_t N = input.size ();
6060 size_t G = 16 ;
@@ -159,19 +159,24 @@ int main() {
159159 std::iota (input.begin (), input.end (), 0 );
160160 std::fill (output.begin (), output.end (), 0 );
161161
162- test (q, input, output, plus<>(), 0 );
163- test (q, input, output, minimum<>(), std::numeric_limits<int >::max ());
164- test (q, input, output, maximum<>(), std::numeric_limits<int >::lowest ());
162+ test<class KernelNamePlusV >(q, input, output, plus<>(), 0 );
163+ test<class KernelNameMinimumV >(q, input, output, minimum<>(),
164+ std::numeric_limits<int >::max ());
165+ test<class KernelNameMaximumV >(q, input, output, maximum<>(),
166+ std::numeric_limits<int >::lowest ());
165167
166- test (q, input, output, plus<int >(), 0 );
167- test (q, input, output, minimum<int >(), std::numeric_limits<int >::max ());
168- test (q, input, output, maximum<int >(), std::numeric_limits<int >::lowest ());
168+ test<class KernelNamePlusI >(q, input, output, plus<int >(), 0 );
169+ test<class KernelNameMinimumI >(q, input, output, minimum<int >(),
170+ std::numeric_limits<int >::max ());
171+ test<class KernelNameMaximumI >(q, input, output, maximum<int >(),
172+ std::numeric_limits<int >::lowest ());
169173
170174#ifdef SPIRV_1_3
171- test (q, input, output, multiplies<int >(), 1 );
172- test (q, input, output, bit_or<int >(), 0 );
173- test (q, input, output, bit_xor<int >(), 0 );
174- test (q, input, output, bit_and<int >(), ~0 );
175+ test<class KernelName_VzAPutpBRRJrQPB >(q, input, output, multiplies<int >(),
176+ 1 );
177+ test<class KernelName_UXdGbr >(q, input, output, bit_or<int >(), 0 );
178+ test<class KernelName_saYaodNyJknrPW >(q, input, output, bit_xor<int >(), 0 );
179+ test<class KernelName_GPcuAlvAOjrDyP >(q, input, output, bit_and<int >(), ~0 );
175180#endif // SPIRV_1_3
176181
177182 std::cout << " Test passed." << std::endl;
0 commit comments