Home | History | Annotate | Download | only in mjsunit
      1 // Copyright 2015 the V8 project authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 // Flags: --allow-natives-syntax
      6 "use strict";
      7 
      8 function test(expected, f) {
      9   assertEquals(expected, f());
     10   assertEquals(expected, f());
     11   %OptimizeFunctionOnNextCall(f);
     12   assertEquals(expected, f());
     13   assertEquals(expected, f());
     14 }
     15 
     16 function testThrows(f) {
     17   assertThrows(f);
     18   assertThrows(f);
     19   %OptimizeFunctionOnNextCall(f);
     20   assertThrows(f);
     21   assertThrows(f);
     22 }
     23 
     24 function f1() { return NaN; }
     25 test((0/0), f1);
     26 
     27 function f2() { return (0/0); }
     28 test((0/0), f2);
     29 
     30 function f3() { return (0/0) == (0/0); }
     31 test(false, f3);
     32 
     33 function f4() { return (0/0) == NaN; }
     34 test(false, f4);
     35 
     36 function f5() { return NaN == (0/0); }
     37 test(false, f5);
     38 
     39 function f6() { return "" + NaN; }
     40 test("NaN", f6);
     41 
     42 function f7() { return (0/0) === (0/0); }
     43 test(false, f7);
     44 
     45 function f8() { return (0/0) === NaN; }
     46 test(false, f8);
     47 
     48 function f9() { return NaN === (0/0); }
     49 test(false, f9);
     50 
     51 // ----
     52 
     53 function g1() { return NaN; }
     54 test((0/0), g1);
     55 
     56 function g2() { return (0/0); }
     57 test((0/0), g2);
     58 
     59 function g3() { return (0/0) == (0/0); }
     60 test(false, g3);
     61 
     62 function g4() { return (0/0) == NaN; }
     63 test(false, g4);
     64 
     65 function g5() { return NaN == (0/0); }
     66 test(false, g5);
     67 
     68 function g6() { return "" + NaN; }
     69 test("NaN", g6);
     70 
     71 function g7() { return (0/0) === (0/0); }
     72 test(false, g7);
     73 
     74 function g8() { return (0/0) === NaN; }
     75 test(false, g8);
     76 
     77 function g9() { return NaN === (0/0); }
     78 test(false, g9);
     79 
     80 testThrows(function() { NaN = 111; });
     81 
     82 function h1() { return NaN; }
     83 test((0/0), h1);
     84 
     85 function h2() { return (0/0); }
     86 test((0/0), h2);
     87 
     88 function h3() { return (0/0) == (0/0); }
     89 test(false, h3);
     90 
     91 function h4() { return (0/0) == NaN; }
     92 test(false, h4);
     93 
     94 function h5() { return NaN == (0/0); }
     95 test(false, h5);
     96 
     97 function h6() { return "" + NaN; }
     98 test("NaN", h6);
     99 
    100 function h7() { return (0/0) === (0/0); }
    101 test(false, h7);
    102 
    103 function h8() { return (0/0) === NaN; }
    104 test(false, h8);
    105 
    106 function h9() { return NaN === (0/0); }
    107 test(false, h9);
    108 
    109 // -------------
    110 
    111 function k1() { return this.NaN; }
    112 testThrows(k1);
    113 
    114 function k2() { return (0/0); }
    115 test((0/0), k2);
    116 
    117 function k3() { return (0/0) == (0/0); }
    118 test(false, k3);
    119 
    120 function k4() { return (0/0) == this.NaN; }
    121 testThrows(k4);
    122 
    123 function k5() { return this.NaN == (0/0); }
    124 testThrows(k5);
    125 
    126 function k6() { return "" + this.NaN; }
    127 testThrows(k6);
    128 
    129 function k7() { return (0/0) === (0/0); }
    130 test(false, k7);
    131 
    132 function k8() { return (0/0) === this.NaN; }
    133 testThrows(k8);
    134 
    135 function k9() { return this.NaN === (0/0); }
    136 testThrows(k9);
    137