LCOV - app.info - js/src/jsapi-tests/testLooselyEqual.cpp

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-04-07 | 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