LCOV - code coverage report
Current view: directory - js/src/jsapi-tests - testLooselyEqual.cpp (source / functions) Found Hit Coverage
Test: app.info Lines: 90 89 98.9 %
Date: 2012-06-02 Functions: 54 43 79.6 %

       1                 : #include "tests.h"
       2                 : #include <limits>
       3                 : #include <math.h>
       4                 : 
       5                 : using namespace std;
       6                 : 
       7                 : struct LooseEqualityFixture : public JSAPITest
       8               9 : {
       9                 :     jsval qNaN;
      10                 :     jsval sNaN;
      11                 :     jsval d42;
      12                 :     jsval i42;
      13                 :     jsval undef;
      14                 :     jsval null;
      15                 :     jsval obj;
      16                 :     jsval poszero;
      17                 :     jsval negzero;
      18                 : 
      19               9 :     virtual ~LooseEqualityFixture() {}
      20                 : 
      21               9 :     virtual bool init() {
      22               9 :         if (!JSAPITest::init())
      23               0 :             return false;
      24               9 :         qNaN = DOUBLE_TO_JSVAL(numeric_limits<double>::quiet_NaN());
      25               9 :         sNaN = DOUBLE_TO_JSVAL(numeric_limits<double>::signaling_NaN());
      26               9 :         d42 = DOUBLE_TO_JSVAL(42.0);
      27               9 :         i42 = INT_TO_JSVAL(42);
      28               9 :         undef = JSVAL_VOID;
      29               9 :         null = JSVAL_NULL;
      30               9 :         obj = OBJECT_TO_JSVAL(global);
      31               9 :         poszero = DOUBLE_TO_JSVAL(0.0);
      32               9 :         negzero = DOUBLE_TO_JSVAL(-0.0);
      33                 : #ifdef XP_WIN
      34                 : # define copysign _copysign
      35                 : #endif
      36               9 :         JS_ASSERT(copysign(1.0, JSVAL_TO_DOUBLE(poszero)) == 1.0);
      37               9 :         JS_ASSERT(copysign(1.0, JSVAL_TO_DOUBLE(negzero)) == -1.0);
      38                 : #ifdef XP_WIN
      39                 : # undef copysign
      40                 : #endif
      41               9 :         return true;
      42                 :     }
      43                 : 
      44              10 :     bool leq(jsval x, jsval y) {
      45                 :         JSBool equal;
      46              10 :         CHECK(JS_LooselyEqual(cx, x, y, &equal) && equal);
      47              10 :         CHECK(JS_LooselyEqual(cx, y, x, &equal) && equal);
      48              10 :         return true;
      49                 :     }
      50                 : 
      51              28 :     bool nleq(jsval x, jsval y) {
      52                 :         JSBool equal;
      53              28 :         CHECK(JS_LooselyEqual(cx, x, y, &equal) && !equal);
      54              28 :         CHECK(JS_LooselyEqual(cx, y, x, &equal) && !equal);
      55              28 :         return true;
      56                 :     }
      57                 : };
      58                 : 
      59                 : // 11.9.3 1a
      60               4 : BEGIN_FIXTURE_TEST(LooseEqualityFixture, test_undef_leq_undef)
      61                 : {
      62               1 :     CHECK(leq(JSVAL_VOID, JSVAL_VOID));
      63               1 :     return true;
      64                 : }
      65               1 : END_FIXTURE_TEST(LooseEqualityFixture, test_undef_leq_undef)
      66                 : 
      67                 : // 11.9.3 1b
      68               4 : BEGIN_FIXTURE_TEST(LooseEqualityFixture, test_null_leq_null)
      69                 : {
      70               1 :     CHECK(leq(JSVAL_NULL, JSVAL_NULL));
      71               1 :     return true;
      72                 : }
      73               1 : END_FIXTURE_TEST(LooseEqualityFixture, test_null_leq_null)
      74                 : 
      75                 : // 11.9.3 1ci
      76               4 : BEGIN_FIXTURE_TEST(LooseEqualityFixture, test_nan_nleq_all)
      77                 : {
      78               1 :     CHECK(nleq(qNaN, qNaN));
      79               1 :     CHECK(nleq(qNaN, sNaN));
      80                 : 
      81               1 :     CHECK(nleq(sNaN, sNaN));
      82               1 :     CHECK(nleq(sNaN, qNaN));
      83                 : 
      84               1 :     CHECK(nleq(qNaN, d42));
      85               1 :     CHECK(nleq(qNaN, i42));
      86               1 :     CHECK(nleq(qNaN, undef));
      87               1 :     CHECK(nleq(qNaN, null));
      88               1 :     CHECK(nleq(qNaN, obj));
      89                 : 
      90               1 :     CHECK(nleq(sNaN, d42));
      91               1 :     CHECK(nleq(sNaN, i42));
      92               1 :     CHECK(nleq(sNaN, undef));
      93               1 :     CHECK(nleq(sNaN, null));
      94               1 :     CHECK(nleq(sNaN, obj));
      95               1 :     return true;
      96                 : }
      97               1 : END_FIXTURE_TEST(LooseEqualityFixture, test_nan_nleq_all)
      98                 : 
      99                 : // 11.9.3 1cii
     100               4 : BEGIN_FIXTURE_TEST(LooseEqualityFixture, test_all_nleq_nan)
     101                 : {
     102               1 :     CHECK(nleq(qNaN, qNaN));
     103               1 :     CHECK(nleq(qNaN, sNaN));
     104                 : 
     105               1 :     CHECK(nleq(sNaN, sNaN));
     106               1 :     CHECK(nleq(sNaN, qNaN));
     107                 : 
     108               1 :     CHECK(nleq(d42,   qNaN));
     109               1 :     CHECK(nleq(i42,   qNaN));
     110               1 :     CHECK(nleq(undef, qNaN));
     111               1 :     CHECK(nleq(null,  qNaN));
     112               1 :     CHECK(nleq(obj,   qNaN));
     113                 : 
     114               1 :     CHECK(nleq(d42,   sNaN));
     115               1 :     CHECK(nleq(i42,   sNaN));
     116               1 :     CHECK(nleq(undef, sNaN));
     117               1 :     CHECK(nleq(null,  sNaN));
     118               1 :     CHECK(nleq(obj,   sNaN));
     119               1 :     return true;
     120                 : }
     121               1 : END_FIXTURE_TEST(LooseEqualityFixture, test_all_nleq_nan)
     122                 : 
     123                 : // 11.9.3 1ciii
     124               4 : BEGIN_FIXTURE_TEST(LooseEqualityFixture, test_leq_same_nums)
     125                 : {
     126               1 :     CHECK(leq(d42, d42));
     127               1 :     CHECK(leq(i42, i42));
     128               1 :     CHECK(leq(d42, i42));
     129               1 :     CHECK(leq(i42, d42));
     130               1 :     return true;
     131                 : }
     132               1 : END_FIXTURE_TEST(LooseEqualityFixture, test_leq_same_nums)
     133                 : 
     134                 : // 11.9.3 1civ
     135               4 : BEGIN_FIXTURE_TEST(LooseEqualityFixture, test_pz_leq_nz)
     136                 : {
     137               1 :     CHECK(leq(poszero, negzero));
     138               1 :     return true;
     139                 : }
     140               1 : END_FIXTURE_TEST(LooseEqualityFixture, test_pz_leq_nz)
     141                 : 
     142                 : // 11.9.3 1cv
     143               4 : BEGIN_FIXTURE_TEST(LooseEqualityFixture, test_nz_leq_pz)
     144                 : {
     145               1 :     CHECK(leq(negzero, poszero));
     146               1 :     return true;
     147                 : }
     148               1 : END_FIXTURE_TEST(LooseEqualityFixture, test_nz_leq_pz)
     149                 : 
     150                 : // 1cvi onwards NOT TESTED
     151                 : 
     152                 : // 11.9.3 2
     153               4 : BEGIN_FIXTURE_TEST(LooseEqualityFixture, test_null_leq_undef)
     154                 : {
     155               1 :     CHECK(leq(null, undef));
     156               1 :     return true;
     157                 : }
     158               1 : END_FIXTURE_TEST(LooseEqualityFixture, test_null_leq_undef)
     159                 : 
     160                 : // 11.9.3 3
     161               4 : BEGIN_FIXTURE_TEST(LooseEqualityFixture, test_undef_leq_null)
     162                 : {
     163               1 :     CHECK(leq(undef, null));
     164               1 :     return true;
     165                 : }
     166               3 : END_FIXTURE_TEST(LooseEqualityFixture, test_undef_leq_null)
     167                 : 
     168                 : // 4 onwards NOT TESTED

Generated by: LCOV version 1.7