Merged revisions 208012,208018-208019,208021,208023-208030,208033,208037,208040-20804...
[official-gcc.git] / main / gcc / testsuite / g++.dg / cilk-plus / AN / builtin_fn_mutating_tplt.cc
blobdb81912cbe530e296a4f51f98905788547d5da04
1 /* { dg-do run } */
2 /* { dg-options "-fcilkplus" } */
4 #if HAVE_IO
5 #include <cstdio>
6 #include<iostream>
7 #endif
9 #include <cstdlib>
11 template <class T>
12 T my_func (T *x, T y)
14 if (*x < y)
15 *x = y;
16 else
17 *x = *x;
20 template <class T> T my_func (T *x, T y);
21 template <class T>
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);
28 #if HAVE_IO
29 std::cout << "Result = " << result << std::endl;
30 #endif
31 return result;
34 int main (void)
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++)
42 if (ii%2 && ii)
44 darray[ii] = (double)(1.0000/(double)(ii));
45 farray[ii] = (float)(1.00/(float)(ii));
47 else
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++)
58 iarray[ii] = ii;
59 larray[ii] = (long)ii;
62 for (int ii = 0; ii < 10; ii++)
64 iarray2[ii] = (ii-5);
65 larray2[ii] = (long)ii-5;
67 #if HAVE_IO
68 printf("\nInt: ");
69 for (int ii=0; ii < 10; ii++)
71 printf("%2d ", iarray[ii] * iarray2[ii]);
73 printf("\nfloat: ");
74 for (int ii=0; ii < 10; ii++)
76 printf("%3.2f ", farray[ii] * farray2[ii]);
79 printf("\nlong: ");
80 for (int ii=0; ii < 10; ii++)
82 printf("%2d ", larray[ii] * larray2[ii]);
85 printf("\ndouble: ");
86 for (int ii=0; ii < 10; ii++)
88 printf("%4.3lf ", (float) (darray[ii] * darray2[ii]));
90 printf("\n");
91 #endif
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];
113 #if HAVE_IO
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);
118 #endif
120 if (i_max != i_result)
121 return 1;
123 if (f_max != f_result)
124 return 2;
126 if (l_max != l_result)
127 return 3;
129 if (d_max != d_result)
130 return 4;
132 return 0;