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