2 /* { dg-options "-fcilkplus" } */
20 template <class T
> T
my_func (T
*x
, T y
);
22 T
main_func (T
*array
, T
*array2
, T identity_val
, int size
)
24 T result
= identity_val
;
26 __sec_reduce_mutating (&result
, array
[0:size
] * array2
[0:size
:1], my_func
);
29 std::cout
<< "Result = " << result
<< std::endl
;
36 int iarray
[10], iarray2
[10], i_result
= 0, i_max
;
37 long larray
[10], larray2
[10], l_result
= 0, l_max
;
38 float farray
[10], farray2
[10], f_result
= 0, f_max
;
39 double darray
[10], darray2
[10], d_result
= 0, d_max
;
40 for (int ii
= 0; ii
< 10; ii
++)
44 darray
[ii
] = (double)(1.0000/(double)(ii
));
45 farray
[ii
] = (float)(1.00/(float)(ii
));
49 darray
[ii
] = (double) ii
+ 0.10;
50 farray
[ii
] = (float) (1.00/((float)(ii
) + 0.10));
52 darray2
[ii
] = (double) (1.00000/ (double)(ii
+1));
53 farray2
[ii
] = (float) (1.00/ (float)(ii
+1));
56 for (int ii
= 0; ii
< 10; ii
++)
59 larray
[ii
] = (long)ii
;
62 for (int ii
= 0; ii
< 10; ii
++)
65 larray2
[ii
] = (long)ii
-5;
69 for (int ii
=0; ii
< 10; ii
++)
71 printf("%2d ", iarray
[ii
] * iarray2
[ii
]);
74 for (int ii
=0; ii
< 10; ii
++)
76 printf("%3.2f ", farray
[ii
] * farray2
[ii
]);
80 for (int ii
=0; ii
< 10; ii
++)
82 printf("%2d ", larray
[ii
] * larray2
[ii
]);
86 for (int ii
=0; ii
< 10; ii
++)
88 printf("%4.3lf ", (float) (darray
[ii
] * darray2
[ii
]));
93 i_result
= main_func
<int> (iarray
, iarray2
, 0, 10);
94 l_result
= main_func
<long>(larray
, larray2
, 0, 10);
95 f_result
= main_func
<float>(farray
, farray2
, 0.00, 10);
96 d_result
= main_func
<double>(darray
, darray2
, 0.0000, 10);
98 i_max
= iarray
[0] * iarray2
[0];
99 d_max
= darray
[0] * darray2
[0];
100 f_max
= farray
[0] * farray2
[0];
101 l_max
= larray
[0] * larray2
[0];
102 for (int ii
= 0; ii
< 10; ii
++)
104 if (iarray
[ii
] * iarray2
[ii
] > i_max
)
105 i_max
= iarray
[ii
] * iarray2
[ii
];
106 if (darray
[ii
] * darray2
[ii
] > d_max
)
107 d_max
= darray
[ii
] * darray2
[ii
];
108 if (farray
[ii
] * farray2
[ii
] > f_max
)
109 f_max
= farray
[ii
] * farray2
[ii
];
110 if (larray
[ii
] * larray2
[ii
] > l_max
)
111 l_max
= larray
[ii
] * larray2
[ii
];
114 printf("int result = %2d\n", i_max
);
115 printf("long result = %2d\n", l_max
);
116 printf("float result = %4.3f\n", f_max
);
117 printf("double result = %4.3lf\n", (float)d_max
);
120 if (i_max
!= i_result
)
123 if (f_max
!= f_result
)
126 if (l_max
!= l_result
)
129 if (d_max
!= d_result
)