@@ -24,10 +24,13 @@ template <class T>
24
24
void device_cmath_test (s::queue &deviceQueue) {
25
25
s::range<1 > numOfItems{TEST_NUM};
26
26
T result[TEST_NUM] = {-1 };
27
+
27
28
// Variable exponent is an integer value to store the exponent in frexp function
28
29
int exponent = -1 ;
30
+
29
31
// Variable iptr stores the integral part of float point in modf function
30
32
T iptr = -1 ;
33
+
31
34
// Variable quo stores the sign and some bits of x/y in remquo function
32
35
int quo = -1 ;
33
36
{
@@ -42,178 +45,60 @@ void device_cmath_test(s::queue &deviceQueue) {
42
45
auto quo_access = buffer4.template get_access <sycl_write>(cgh);
43
46
cgh.single_task <class DeviceMathTest >([=]() {
44
47
int i = 0 ;
45
- {
46
- T a = 0 ;
47
- res_access[i++] = std::cos (a);
48
- }
49
- {
50
- T a = 0 ;
51
- res_access[i++] = std::sin (a);
52
- }
53
- {
54
- T a = 1 ;
55
- res_access[i++] = std::log (a);
56
- }
57
- {
58
- T a = 1 ;
59
- res_access[i++] = std::acos (a);
60
- }
61
- {
62
- T a = 0 ;
63
- res_access[i++] = std::asin (a);
64
- }
65
- {
66
- T a = 0 ;
67
- res_access[i++] = std::atan (a);
68
- }
69
- {
70
- T a = 0 ;
71
- T b = 1 ;
72
- res_access[i++] = std::atan2 (a, b);
73
- }
74
- {
75
- T a = 0 ;
76
- res_access[i++] = std::cosh (a);
77
- }
78
- {
79
- T a = 0 ;
80
- res_access[i++] = std::exp (a);
81
- }
82
- {
83
- T a = 1.5 ;
84
- T b = 1 ;
85
- res_access[i++] = std::fmod (a, b);
86
- }
87
- {
88
- T a = 0 ;
89
- res_access[i++] = std::frexp (a, &exp_access[0 ]);
90
- }
91
- {
92
- T a = 1 ;
93
- res_access[i++] = std::ldexp (a, 1 );
94
- }
95
- {
96
- T a = 1 ;
97
- res_access[i++] = std::log10 (a);
98
- }
99
- {
100
- T a = 1 ;
101
- res_access[i++] = std::modf (a, &iptr_access[0 ]);
102
- }
103
- {
104
- T a = 1 ;
105
- T b = 1 ;
106
- res_access[i++] = std::pow (a, b);
107
- }
108
- {
109
- T a = 0 ;
110
- res_access[i++] = std::sinh (a);
111
- }
112
- {
113
- T a = 4 ;
114
- res_access[i++] = std::sqrt (a);
115
- }
116
- {
117
- T a = 0 ;
118
- res_access[i++] = std::tan (a);
119
- }
120
- {
121
- T a = 0 ;
122
- res_access[i++] = std::tanh (a);
123
- }
124
- {
125
- T a = 1 ;
126
- res_access[i++] = std::acosh (a);
127
- }
128
- {
129
- T a = 0 ;
130
- res_access[i++] = std::asinh (a);
131
- }
132
- {
133
- T a = 0 ;
134
- res_access[i++] = std::atanh (a);
135
- }
136
- {
137
- T a = 1 ;
138
- res_access[i++] = std::cbrt (a);
139
- }
140
- {
141
- T a = 0 ;
142
- res_access[i++] = std::erf (a);
143
- }
144
- {
145
- T a = 0 ;
146
- res_access[i++] = std::erfc (a);
147
- }
148
- {
149
- T a = 1 ;
150
- res_access[i++] = std::exp2 (a);
151
- }
152
- {
153
- T a = 0 ;
154
- res_access[i++] = std::expm1 (a);
155
- }
156
- {
157
- T a = 1 ;
158
- T b = 0 ;
159
- res_access[i++] = std::fdim (a, b);
160
- }
161
- {
162
- T a = 1 ;
163
- T b = 1 ;
164
- T c = 1 ;
165
- res_access[i++] = std::fma (a, b, c);
166
- }
167
- {
168
- T a = 3 ;
169
- T b = 4 ;
170
- res_access[i++] = std::hypot (a, b);
171
- }
172
- {
173
- T a = 1 ;
174
- res_access[i++] = std::ilogb (a);
175
- }
176
- {
177
- T a = 0 ;
178
- res_access[i++] = std::log1p (a);
179
- }
180
- {
181
- T a = 1 ;
182
- res_access[i++] = std::log2 (a);
183
- }
184
- {
185
- T a = 1 ;
186
- res_access[i++] = std::logb (a);
187
- }
188
- {
189
- T a = 0.5 ;
190
- T b = 1 ;
191
- res_access[i++] = std::remainder (a, b);
192
- }
193
- {
194
- T a = 0.5 ;
195
- T b = 1 ;
196
- res_access[i++] = std::remquo (a, b, &quo_access[0 ]);
197
- }
198
- {
199
- T a = NAN;
200
- res_access[i++] = std::tgamma (a);
201
- }
202
- {
203
- T a = NAN;
204
- res_access[i++] = std::lgamma (a);
205
- }
48
+ res_access[i++] = std::cos (0.0 );
49
+ res_access[i++] = std::sin (0.0 );
50
+ res_access[i++] = std::log (1.0 );
51
+ res_access[i++] = std::acos (1.0 );
52
+ res_access[i++] = std::asin (0.0 );
53
+ res_access[i++] = std::atan (0.0 );
54
+ res_access[i++] = std::atan2 (0.0 , 1.0 );
55
+ res_access[i++] = std::cosh (0.0 );
56
+ res_access[i++] = std::exp (0.0 );
57
+ res_access[i++] = std::fmod (1.5 , 1.0 );
58
+ res_access[i++] = std::frexp (0.0 , &exp_access[0 ]);
59
+ res_access[i++] = std::ldexp (1.0 , 1 );
60
+ res_access[i++] = std::log10 (1.0 );
61
+ res_access[i++] = std::modf (1.0 , &iptr_access[0 ]);
62
+ res_access[i++] = std::pow (1.0 , 1.0 );
63
+ res_access[i++] = std::sinh (0.0 );
64
+ res_access[i++] = std::sqrt (4.0 );
65
+ res_access[i++] = std::tan (0.0 );
66
+ res_access[i++] = std::tanh (0.0 );
67
+ res_access[i++] = std::acosh (1.0 );
68
+ res_access[i++] = std::asinh (0.0 );
69
+ res_access[i++] = std::atanh (0.0 );
70
+ res_access[i++] = std::cbrt (1.0 );
71
+ res_access[i++] = std::erf (0.0 );
72
+ res_access[i++] = std::erfc (0.0 );
73
+ res_access[i++] = std::exp2 (1.0 );
74
+ res_access[i++] = std::expm1 (0.0 );
75
+ res_access[i++] = std::fdim (1.0 , 0.0 );
76
+ res_access[i++] = std::fma (1.0 , 1.0 , 1.0 );
77
+ res_access[i++] = std::hypot (3.0 , 4.0 );
78
+ res_access[i++] = std::ilogb (1.0 );
79
+ res_access[i++] = std::log1p (0.0 );
80
+ res_access[i++] = std::log2 (1.0 );
81
+ res_access[i++] = std::logb (1.0 );
82
+ res_access[i++] = std::remainder (0.5 , 1.0 );
83
+ res_access[i++] = std::remquo (0.5 , 1.0 , &quo_access[0 ]);
84
+ T a = NAN;
85
+ res_access[i++] = std::tgamma (a);
86
+ res_access[i++] = std::lgamma (a);
206
87
});
207
88
});
208
89
}
90
+
209
91
// Compare result with reference
210
92
for (int i = 0 ; i < TEST_NUM; ++i) {
211
93
assert (is_about_FP (result[i], ref[i]));
212
94
}
95
+
213
96
// Test modf integral part
214
97
assert (is_about_FP (iptr, refIptr));
98
+
215
99
// Test frexp exponent
216
100
assert (exponent == 0 );
101
+
217
102
// Test remquo sign
218
103
assert (quo == 0 );
219
104
}
0 commit comments