1 /*
   2  * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
   3  *
   4  * Redistribution and use in source and binary forms, with or without
   5  * modification, are permitted provided that the following conditions
   6  * are met:
   7  *
   8  *   - Redistributions of source code must retain the above copyright
   9  *     notice, this list of conditions and the following disclaimer.
  10  *
  11  *   - Redistributions in binary form must reproduce the above copyright
  12  *     notice, this list of conditions and the following disclaimer in the
  13  *     documentation and/or other materials provided with the distribution.
  14  *
  15  *   - Neither the name of Oracle nor the names of its
  16  *     contributors may be used to endorse or promote products derived
  17  *     from this software without specific prior written permission.
  18  *
  19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
  20  * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
  21  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
  22  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
  23  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
  24  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  25  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
  26  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
  27  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  28  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  29  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  30  */
  31 
  32 
  33 function bench(name, func) {
  34     var start = Date.now();
  35     for (var iter = 0; iter < 5000000; iter++) {
  36         func();
  37     }
  38     print(name + "\t" + (Date.now() - start));
  39 }
  40 
  41 function uint32(value) {
  42     return function() {
  43         value >>> 0;
  44         value >>> 0;
  45         value >>> 0;
  46         value >>> 0;
  47         value >>> 0;
  48         value >>> 0;
  49         value >>> 0;
  50         value >>> 0;
  51         value >>> 0;
  52         value >>> 0;
  53         value >>> 0;
  54         value >>> 0;
  55         value >>> 0;
  56         value >>> 0;
  57         value >>> 0;
  58     };
  59 }
  60 
  61 function int32(value) {
  62     return function() {
  63         value >> 0;
  64         value >> 0;
  65         value >> 0;
  66         value >> 0;
  67         value >> 0;
  68         value >> 0;
  69         value >> 0;
  70         value >> 0;
  71         value >> 0;
  72         value >> 0;
  73         value >> 0;
  74         value >> 0;
  75         value >> 0;
  76         value >> 0;
  77         value >> 0;
  78     };
  79 }
  80 
  81 print("\nToUint32");
  82 for (var i = 1; i < 3; i++) {
  83     bench("infinity      ", uint32(Infinity));
  84     bench("infinity neg  ", uint32(-Infinity));
  85     bench("nan           ", uint32(NaN));
  86     bench("small         ", uint32(1));
  87     bench("small neg     ", uint32(-1));
  88     bench("small frac    ", uint32(1.5));
  89     bench("small neg frac", uint32(-1.5));
  90     bench("large         ", uint32(9223372036854775807));
  91     bench("large neg     ", uint32(-9223372036854775808));
  92 }
  93 
  94 print("\nToInt32");
  95 for (var i = 1; i < 3; i++) {
  96     bench("infinity      ", int32(Infinity));
  97     bench("infinity neg  ", int32(-Infinity));
  98     bench("nan           ", int32(NaN));
  99     bench("small         ", int32(1));
 100     bench("small neg     ", int32(-1));
 101     bench("small frac    ", int32(1.5));
 102     bench("small neg frac", int32(-1.5));
 103     bench("large         ", int32(9223372036854775807));
 104     bench("large neg     ", int32(-9223372036854775808));
 105 }
 106 
 107