1717
1818namespace Test
1919{
20+ namespace
21+ {
22+ struct NonDefaultConstructableType
23+ {
24+ explicit NonDefaultConstructableType ( int i )
25+ : value( i )
26+ {
27+ }
28+ int value;
29+ };
30+ } // namespace
2031
2132// ---------------------------------------------------------------------------//
2233void captureTest ()
@@ -25,18 +36,20 @@ void captureTest()
2536 Kokkos::View<double [1 ], TEST_MEMSPACE> dbl_view ( " dbl_view" );
2637 Kokkos::View<int [1 ][1 ], TEST_MEMSPACE> int_view ( " int_view" );
2738
28- // Make a parameter pack so we can capture them as a group.
29- auto pack = Cabana::makeParameterPack ( dbl_view, int_view );
39+ // Make a parameter pack via the ctor so we can capture them as a group.
40+ auto pack = Cabana::makeParameterPack ( dbl_view, int_view,
41+ NonDefaultConstructableType{ 1 } );
3042
3143 // Update the pack in a kernel
3244 Kokkos::parallel_for (
3345 " fill_pack" , Kokkos::RangePolicy<TEST_EXECSPACE>( 0 , 1 ),
3446 KOKKOS_LAMBDA ( const int ) {
3547 auto dv = Cabana::get<0 >( pack );
3648 auto iv = Cabana::get<1 >( pack );
49+ auto ndc = Cabana::get<2 >( pack );
3750
38- dv ( 0 ) = 3.14 ;
39- iv ( 0 , 0 ) = 12 ;
51+ dv ( 0 ) = 2 . * ndc. value ;
52+ iv ( 0 , 0 ) = 2 * ndc. value ;
4053 } );
4154
4255 // Check the capture.
@@ -45,8 +58,31 @@ void captureTest()
4558 auto int_host =
4659 Kokkos::create_mirror_view_and_copy ( Kokkos::HostSpace (), int_view );
4760
48- EXPECT_DOUBLE_EQ ( dbl_host ( 0 ), 3.14 );
49- EXPECT_EQ ( int_host ( 0 , 0 ), 12 );
61+ EXPECT_DOUBLE_EQ ( dbl_host ( 0 ), 2 . * 1 );
62+ EXPECT_EQ ( int_host ( 0 , 0 ), 2 * 1 );
63+
64+ Cabana::fillParameterPack ( pack, dbl_view, int_view,
65+ NonDefaultConstructableType{ 3 } );
66+ // Update the pack in a kernel
67+ Kokkos::parallel_for (
68+ " fill_pack" , Kokkos::RangePolicy<TEST_EXECSPACE>( 0 , 1 ),
69+ KOKKOS_LAMBDA ( const int ) {
70+ auto dv = Cabana::get<0 >( pack );
71+ auto iv = Cabana::get<1 >( pack );
72+ auto ndc = Cabana::get<2 >( pack );
73+
74+ dv ( 0 ) = 2 . * ndc.value ;
75+ iv ( 0 , 0 ) = 2 * ndc.value ;
76+ } );
77+
78+ // Check the capture.
79+ dbl_host =
80+ Kokkos::create_mirror_view_and_copy ( Kokkos::HostSpace (), dbl_view );
81+ int_host =
82+ Kokkos::create_mirror_view_and_copy ( Kokkos::HostSpace (), int_view );
83+
84+ EXPECT_DOUBLE_EQ ( dbl_host ( 0 ), 2 . * 3 );
85+ EXPECT_EQ ( int_host ( 0 , 0 ), 2 * 3 );
5086}
5187
5288// ---------------------------------------------------------------------------//
0 commit comments