1 /*
2  * Copyright (C) 2010 Google Inc.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package benchmarks.regression;
18 
19 /**
20  * Many of these tests are bogus in that the cost will vary wildly depending on inputs.
21  * For _my_ current purposes, that's okay. But beware!
22  */
23 public class StrictMathBenchmark {
24     private final double d = 1.2;
25     private final float f = 1.2f;
26     private final int i = 1;
27     private final long l = 1L;
28 
29     /* Values for full line coverage of ceiling function */
30     private static final double[] CEIL_DOUBLES = new double[] {
31             3245817.2018463886,
32             1418139.083668501,
33             3.572936802189103E15,
34             -4.7828929737254625E249,
35             213596.58636369856,
36             6.891928421440976E-96,
37             -7.9318566885477E-36,
38             -1.9610339084804148E15,
39             -4.696725715628246E10,
40             3742491.296880909,
41             7.140274745333553E11
42     };
43 
44     /* Values for full line coverage of floor function */
45     private static final double[] FLOOR_DOUBLES = new double[] {
46             7.140274745333553E11,
47             3742491.296880909,
48             -4.696725715628246E10,
49             -1.9610339084804148E15,
50             7.049948629370372E-56,
51             -7.702933170334643E-16,
52             -1.99657681810579,
53             -1.1659287182288336E236,
54             4.085518816513057E15,
55             -1500948.440658056,
56             -2.2316479921415575E7
57     };
58 
timeAbsD(int reps)59     public void timeAbsD(int reps) {
60         for (int rep = 0; rep < reps; ++rep) {
61             StrictMath.abs(d);
62         }
63     }
64 
timeAbsF(int reps)65     public void timeAbsF(int reps) {
66         for (int rep = 0; rep < reps; ++rep) {
67             StrictMath.abs(f);
68         }
69     }
70 
timeAbsI(int reps)71     public void timeAbsI(int reps) {
72         for (int rep = 0; rep < reps; ++rep) {
73             StrictMath.abs(i);
74         }
75     }
76 
timeAbsL(int reps)77     public void timeAbsL(int reps) {
78         for (int rep = 0; rep < reps; ++rep) {
79             StrictMath.abs(l);
80         }
81     }
82 
timeAcos(int reps)83     public void timeAcos(int reps) {
84         for (int rep = 0; rep < reps; ++rep) {
85             StrictMath.acos(d);
86         }
87     }
88 
timeAsin(int reps)89     public void timeAsin(int reps) {
90         for (int rep = 0; rep < reps; ++rep) {
91             StrictMath.asin(d);
92         }
93     }
94 
timeAtan(int reps)95     public void timeAtan(int reps) {
96         for (int rep = 0; rep < reps; ++rep) {
97             StrictMath.atan(d);
98         }
99     }
100 
timeAtan2(int reps)101     public void timeAtan2(int reps) {
102         for (int rep = 0; rep < reps; ++rep) {
103             StrictMath.atan2(3, 4);
104         }
105     }
106 
timeCbrt(int reps)107     public void timeCbrt(int reps) {
108         for (int rep = 0; rep < reps; ++rep) {
109             StrictMath.cbrt(d);
110         }
111     }
112 
timeCeilOverInterestingValues(int reps)113     public void timeCeilOverInterestingValues(int reps) {
114         for (int rep = 0; rep < reps; ++rep) {
115             for (int i = 0; i < CEIL_DOUBLES.length; ++i) {
116                 StrictMath.ceil(CEIL_DOUBLES[i]);
117             }
118         }
119     }
120 
timeCopySignD(int reps)121     public void timeCopySignD(int reps) {
122         for (int rep = 0; rep < reps; ++rep) {
123             StrictMath.copySign(d, d);
124         }
125     }
126 
timeCopySignF(int reps)127     public void timeCopySignF(int reps) {
128         for (int rep = 0; rep < reps; ++rep) {
129             StrictMath.copySign(f, f);
130         }
131     }
132 
timeCos(int reps)133     public void timeCos(int reps) {
134         for (int rep = 0; rep < reps; ++rep) {
135             StrictMath.cos(d);
136         }
137     }
138 
timeCosh(int reps)139     public void timeCosh(int reps) {
140         for (int rep = 0; rep < reps; ++rep) {
141             StrictMath.cosh(d);
142         }
143     }
144 
timeExp(int reps)145     public void timeExp(int reps) {
146         for (int rep = 0; rep < reps; ++rep) {
147             StrictMath.exp(d);
148         }
149     }
150 
timeExpm1(int reps)151     public void timeExpm1(int reps) {
152         for (int rep = 0; rep < reps; ++rep) {
153             StrictMath.expm1(d);
154         }
155     }
156 
timeFloorOverInterestingValues(int reps)157     public void timeFloorOverInterestingValues(int reps) {
158         for (int rep = 0; rep < reps; ++rep) {
159             for (int i = 0; i < FLOOR_DOUBLES.length; ++i) {
160                 StrictMath.floor(FLOOR_DOUBLES[i]);
161             }
162         }
163     }
164 
timeGetExponentD(int reps)165     public void timeGetExponentD(int reps) {
166         for (int rep = 0; rep < reps; ++rep) {
167             StrictMath.getExponent(d);
168         }
169     }
170 
timeGetExponentF(int reps)171     public void timeGetExponentF(int reps) {
172         for (int rep = 0; rep < reps; ++rep) {
173             StrictMath.getExponent(f);
174         }
175     }
176 
timeHypot(int reps)177     public void timeHypot(int reps) {
178         for (int rep = 0; rep < reps; ++rep) {
179             StrictMath.hypot(d, d);
180         }
181     }
182 
timeIEEEremainder(int reps)183     public void timeIEEEremainder(int reps) {
184         for (int rep = 0; rep < reps; ++rep) {
185             StrictMath.IEEEremainder(d, d);
186         }
187     }
188 
timeLog(int reps)189     public void timeLog(int reps) {
190         for (int rep = 0; rep < reps; ++rep) {
191             StrictMath.log(d);
192         }
193     }
194 
timeLog10(int reps)195     public void timeLog10(int reps) {
196         for (int rep = 0; rep < reps; ++rep) {
197             StrictMath.log10(d);
198         }
199     }
200 
timeLog1p(int reps)201     public void timeLog1p(int reps) {
202         for (int rep = 0; rep < reps; ++rep) {
203             StrictMath.log1p(d);
204         }
205     }
206 
timeMaxD(int reps)207     public void timeMaxD(int reps) {
208         for (int rep = 0; rep < reps; ++rep) {
209             StrictMath.max(d, d);
210         }
211     }
212 
timeMaxF(int reps)213     public void timeMaxF(int reps) {
214         for (int rep = 0; rep < reps; ++rep) {
215             StrictMath.max(f, f);
216         }
217     }
218 
timeMaxI(int reps)219     public void timeMaxI(int reps) {
220         for (int rep = 0; rep < reps; ++rep) {
221             StrictMath.max(i, i);
222         }
223     }
224 
timeMaxL(int reps)225     public void timeMaxL(int reps) {
226         for (int rep = 0; rep < reps; ++rep) {
227             StrictMath.max(l, l);
228         }
229     }
230 
timeMinD(int reps)231     public void timeMinD(int reps) {
232         for (int rep = 0; rep < reps; ++rep) {
233             StrictMath.min(d, d);
234         }
235     }
236 
timeMinF(int reps)237     public void timeMinF(int reps) {
238         for (int rep = 0; rep < reps; ++rep) {
239             StrictMath.min(f, f);
240         }
241     }
242 
timeMinI(int reps)243     public void timeMinI(int reps) {
244         for (int rep = 0; rep < reps; ++rep) {
245             StrictMath.min(i, i);
246         }
247     }
248 
timeMinL(int reps)249     public void timeMinL(int reps) {
250         for (int rep = 0; rep < reps; ++rep) {
251             StrictMath.min(l, l);
252         }
253     }
254 
timeNextAfterD(int reps)255     public void timeNextAfterD(int reps) {
256         for (int rep = 0; rep < reps; ++rep) {
257             StrictMath.nextAfter(d, d);
258         }
259     }
260 
timeNextAfterF(int reps)261     public void timeNextAfterF(int reps) {
262         for (int rep = 0; rep < reps; ++rep) {
263             StrictMath.nextAfter(f, f);
264         }
265     }
266 
timeNextUpD(int reps)267     public void timeNextUpD(int reps) {
268         for (int rep = 0; rep < reps; ++rep) {
269             StrictMath.nextUp(d);
270         }
271     }
272 
timeNextUpF(int reps)273     public void timeNextUpF(int reps) {
274         for (int rep = 0; rep < reps; ++rep) {
275             StrictMath.nextUp(f);
276         }
277     }
278 
timePow(int reps)279     public void timePow(int reps) {
280         for (int rep = 0; rep < reps; ++rep) {
281             StrictMath.pow(d, d);
282         }
283     }
284 
timeRandom(int reps)285     public void timeRandom(int reps) {
286         for (int rep = 0; rep < reps; ++rep) {
287             StrictMath.random();
288         }
289     }
290 
timeRint(int reps)291     public void timeRint(int reps) {
292         for (int rep = 0; rep < reps; ++rep) {
293             StrictMath.rint(d);
294         }
295     }
296 
timeRoundD(int reps)297     public void timeRoundD(int reps) {
298         for (int rep = 0; rep < reps; ++rep) {
299             StrictMath.round(d);
300         }
301     }
302 
timeRoundF(int reps)303     public void timeRoundF(int reps) {
304         for (int rep = 0; rep < reps; ++rep) {
305             StrictMath.round(f);
306         }
307     }
308 
timeScalbD(int reps)309     public void timeScalbD(int reps) {
310         for (int rep = 0; rep < reps; ++rep) {
311             StrictMath.scalb(d, 5);
312         }
313     }
314 
timeScalbF(int reps)315     public void timeScalbF(int reps) {
316         for (int rep = 0; rep < reps; ++rep) {
317             StrictMath.scalb(f, 5);
318         }
319     }
320 
timeSignumD(int reps)321     public void timeSignumD(int reps) {
322         for (int rep = 0; rep < reps; ++rep) {
323             StrictMath.signum(d);
324         }
325     }
326 
timeSignumF(int reps)327     public void timeSignumF(int reps) {
328         for (int rep = 0; rep < reps; ++rep) {
329             StrictMath.signum(f);
330         }
331     }
332 
timeSin(int reps)333     public void timeSin(int reps) {
334         for (int rep = 0; rep < reps; ++rep) {
335             StrictMath.sin(d);
336         }
337     }
338 
timeSinh(int reps)339     public void timeSinh(int reps) {
340         for (int rep = 0; rep < reps; ++rep) {
341             StrictMath.sinh(d);
342         }
343     }
344 
timeSqrt(int reps)345     public void timeSqrt(int reps) {
346         for (int rep = 0; rep < reps; ++rep) {
347             StrictMath.sqrt(d);
348         }
349     }
350 
timeTan(int reps)351     public void timeTan(int reps) {
352         for (int rep = 0; rep < reps; ++rep) {
353             StrictMath.tan(d);
354         }
355     }
356 
timeTanh(int reps)357     public void timeTanh(int reps) {
358         for (int rep = 0; rep < reps; ++rep) {
359             StrictMath.tanh(d);
360         }
361     }
362 
timeToDegrees(int reps)363     public void timeToDegrees(int reps) {
364         for (int rep = 0; rep < reps; ++rep) {
365             StrictMath.toDegrees(d);
366         }
367     }
368 
timeToRadians(int reps)369     public void timeToRadians(int reps) {
370         for (int rep = 0; rep < reps; ++rep) {
371             StrictMath.toRadians(d);
372         }
373     }
374 
timeUlpD(int reps)375     public void timeUlpD(int reps) {
376         for (int rep = 0; rep < reps; ++rep) {
377             StrictMath.ulp(d);
378         }
379     }
380 
timeUlpF(int reps)381     public void timeUlpF(int reps) {
382         for (int rep = 0; rep < reps; ++rep) {
383             StrictMath.ulp(f);
384         }
385     }
386 }
387