VirtualBox

Ignore:
Timestamp:
Aug 18, 2022 2:44:56 AM (2 years ago)
Author:
vboxsync
Message:

IPRT/nocrt: Implemented exp. bugref:10261

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/testcase/tstRTNoCrt-2.cpp

    r96279 r96280  
    305305    } while (0)
    306306
    307 #define CHECK_DBL_APPROX_SAME(a_Fn, a_Args) do { \
     307#define CHECK_DBL_APPROX_SAME(a_Fn, a_Args, a_cMaxDelta) do { \
    308308        RTFLOAT64U uNoCrtRet, uCrtRet; \
    309309        uNoCrtRet.r = RT_NOCRT(a_Fn) a_Args; \
    310310        uCrtRet.r   =          a_Fn  a_Args; \
    311311        if (   !RTFLOAT64U_ARE_IDENTICAL(&uNoCrtRet, &uCrtRet) \
    312             && (  (uNoCrtRet.u >= uCrtRet.u ? uNoCrtRet.u - uCrtRet.u : uCrtRet.u - uNoCrtRet.u) > 1 /* off by one is okay */ \
     312            && (  (uNoCrtRet.u >= uCrtRet.u ? uNoCrtRet.u - uCrtRet.u : uCrtRet.u - uNoCrtRet.u) > (a_cMaxDelta) \
    313313                || RTFLOAT64U_IS_NAN(&uNoCrtRet) \
    314314                || RTFLOAT64U_IS_NAN(&uCrtRet) ) ) \
     
    316316            RTStrFormatR64(g_szFloat[0], sizeof(g_szFloat[0]), &uNoCrtRet, 0, 0, RTSTR_F_SPECIAL); \
    317317            RTStrFormatR64(g_szFloat[1], sizeof(g_szFloat[0]), &uCrtRet,   0, 0, RTSTR_F_SPECIAL); \
    318             RTTestFailed(g_hTest, "line %u: %s%s: noCRT => %s; CRT => %s", \
    319                          __LINE__, #a_Fn, #a_Args, g_szFloat[0], g_szFloat[1]); \
     318            RTTestFailed(g_hTest, "line %u: %s%s: noCRT => %s; CRT => %s (max delta %u)", \
     319                         __LINE__, #a_Fn, #a_Args, g_szFloat[0], g_szFloat[1], (a_cMaxDelta)); \
    320320        } \
    321321    } while (0)
     
    24342434
    24352435
     2436void testExp()
     2437{
     2438    RTTestSub(g_hTest, "exp[f]");
     2439
     2440    CHECK_DBL(        RT_NOCRT(exp)(         +1.0),   M_E);
     2441    CHECK_DBL_RANGE(  RT_NOCRT(exp)(         +2.0),   M_E * M_E, 0.000000000000001);
     2442    CHECK_DBL(        RT_NOCRT(exp)(    +INFINITY),   +INFINITY);
     2443    CHECK_DBL(        RT_NOCRT(exp)(    -INFINITY),   +0.0);
     2444    CHECK_DBL(        RT_NOCRT(exp)(         +0.0),   +1.0);
     2445    CHECK_DBL(        RT_NOCRT(exp)(         -0.0),   +1.0);
     2446    CHECK_DBL_SAME(            exp,(         +0.0));
     2447    CHECK_DBL_SAME(            exp,(         -0.0));
     2448    CHECK_DBL_SAME(            exp,(         +1.0));
     2449    CHECK_DBL_SAME(            exp,(         +2.0));
     2450    CHECK_DBL_SAME(            exp,(         -1.0));
     2451    CHECK_DBL_APPROX_SAME(     exp,(          +0.5),    1);
     2452    CHECK_DBL_APPROX_SAME(     exp,(          -0.5),    1);
     2453    CHECK_DBL_APPROX_SAME(     exp,(          +1.5),    1);
     2454    CHECK_DBL_APPROX_SAME(     exp,(          -1.5),    1);
     2455    CHECK_DBL_APPROX_SAME(     exp,(         +3.25),   16);
     2456    CHECK_DBL_APPROX_SAME(     exp,(    99.2559430),   16);
     2457    CHECK_DBL_APPROX_SAME(     exp,(   -99.2559430),   32);
     2458    CHECK_DBL_APPROX_SAME(     exp,(  +305.2559430),  128);
     2459    CHECK_DBL_APPROX_SAME(     exp,(  -305.2559430),  128);
     2460    CHECK_DBL_APPROX_SAME(     exp,(    +309.99884),  128);
     2461    CHECK_DBL_APPROX_SAME(     exp,(   -309.111048),  128);
     2462    CHECK_DBL_APPROX_SAME(     exp,(+999.864597634),    1);
     2463    CHECK_DBL_APPROX_SAME(     exp,(-999.098234837),    1);
     2464    CHECK_DBL_SAME(            exp,(+DBL_MAX));
     2465    CHECK_DBL_SAME(            exp,(-DBL_MAX));
     2466    CHECK_DBL_SAME(            exp,(-DBL_MIN));
     2467    CHECK_DBL_SAME(            exp,(+DBL_MIN));
     2468    CHECK_DBL_SAME(            exp,(+INFINITY));
     2469    CHECK_DBL_SAME(            exp,(-INFINITY));
     2470    CHECK_DBL_SAME(            exp,(RTStrNanDouble(NULL, false)));
     2471    CHECK_DBL_SAME(            exp,(RTStrNanDouble("ab305f", true)));
     2472    CHECK_DBL_SAME_RELAXED_NAN(exp,(RTStrNanDouble("fffffffff_signaling", true)));
     2473    CHECK_DBL_SAME_RELAXED_NAN(exp,(RTStrNanDouble("7777777777778_sig", false)));
     2474}
     2475
     2476
    24362477void testExp2()
    24372478{
    24382479    RTTestSub(g_hTest, "exp2[f]");
    24392480
    2440     CHECK_DBL(RT_NOCRT(exp2)(1.0), 2.0);
    2441     CHECK_DBL(RT_NOCRT(exp2)(2.0), 4.0);
    2442     CHECK_DBL(RT_NOCRT(exp2)(32.0), 4294967296.0);
    2443     CHECK_DBL(RT_NOCRT(exp2)(-1.0), 0.5);
    2444     CHECK_DBL(RT_NOCRT(exp2)(-3.0), 0.125);
    2445     CHECK_DBL_SAME(exp2, (0.0));
    2446     CHECK_DBL_SAME(exp2, (+INFINITY));
    2447     CHECK_DBL_SAME(exp2, (-INFINITY));
    2448     CHECK_DBL_SAME(exp2, (nan("1")));
    2449     CHECK_DBL_SAME(exp2, (RTStrNanDouble("ab305f", true)));
    2450     CHECK_DBL_SAME(exp2, (RTStrNanDouble("fffffffff_signaling", true)));
    2451     CHECK_DBL_SAME(exp2, (RTStrNanDouble("7777777777778_sig", false)));
    2452     CHECK_DBL_SAME(exp2, (1.0));
    2453     CHECK_DBL_SAME(exp2, (2.0));
    2454     CHECK_DBL_SAME(exp2, (-1.0));
    2455     CHECK_DBL_APPROX_SAME(exp2, (+0.5));
    2456     CHECK_DBL_APPROX_SAME(exp2, (-0.5));
    2457     CHECK_DBL_APPROX_SAME(exp2, (+1.5));
    2458     CHECK_DBL_APPROX_SAME(exp2, (-1.5));
    2459     CHECK_DBL_APPROX_SAME(exp2, (+3.25));
    2460     CHECK_DBL_APPROX_SAME(exp2, (99.2559430));
    2461     CHECK_DBL_APPROX_SAME(exp2, (-99.2559430));
    2462     CHECK_DBL_APPROX_SAME(exp2, (+305.2559430));
    2463     CHECK_DBL_APPROX_SAME(exp2, (-305.2559430));
    2464     CHECK_DBL_APPROX_SAME(exp2, (+309.99884));
    2465     CHECK_DBL_APPROX_SAME(exp2, (-309.111048));
    2466     CHECK_DBL_APPROX_SAME(exp2, (+999.864597634));
    2467     CHECK_DBL_APPROX_SAME(exp2, (-999.098234837));
     2481    CHECK_DBL(   RT_NOCRT(exp2)(           1.0), 2.0);
     2482    CHECK_DBL(   RT_NOCRT(exp2)(           2.0), 4.0);
     2483    CHECK_DBL(   RT_NOCRT(exp2)(          32.0), 4294967296.0);
     2484    CHECK_DBL(   RT_NOCRT(exp2)(          -1.0), 0.5);
     2485    CHECK_DBL(   RT_NOCRT(exp2)(          -3.0), 0.125);
     2486    CHECK_DBL_SAME(       exp2,(           0.0));
     2487    CHECK_DBL_SAME(       exp2,(           1.0));
     2488    CHECK_DBL_SAME(       exp2,(           2.0));
     2489    CHECK_DBL_SAME(       exp2,(          -1.0));
     2490    CHECK_DBL_APPROX_SAME(exp2,(          +0.5), 1);
     2491    CHECK_DBL_APPROX_SAME(exp2,(          -0.5), 1);
     2492    CHECK_DBL_APPROX_SAME(exp2,(          +1.5), 1);
     2493    CHECK_DBL_APPROX_SAME(exp2,(          -1.5), 1);
     2494    CHECK_DBL_APPROX_SAME(exp2,(         +3.25), 1);
     2495    CHECK_DBL_APPROX_SAME(exp2,(    99.2559430), 1);
     2496    CHECK_DBL_APPROX_SAME(exp2,(   -99.2559430), 1);
     2497    CHECK_DBL_APPROX_SAME(exp2,(  +305.2559430), 1);
     2498    CHECK_DBL_APPROX_SAME(exp2,(  -305.2559430), 1);
     2499    CHECK_DBL_APPROX_SAME(exp2,(    +309.99884), 1);
     2500    CHECK_DBL_APPROX_SAME(exp2,(   -309.111048), 1);
     2501    CHECK_DBL_APPROX_SAME(exp2,(+999.864597634), 1);
     2502    CHECK_DBL_APPROX_SAME(exp2,(-999.098234837), 1);
     2503    CHECK_DBL_SAME(       exp2,(    +INFINITY));
     2504    CHECK_DBL_SAME(       exp2,(    -INFINITY));
     2505    CHECK_DBL_SAME(       exp2,(     nan("1")));
     2506    CHECK_DBL_SAME(       exp2,(RTStrNanDouble("ab305f", true)));
     2507    CHECK_DBL_SAME(       exp2,(RTStrNanDouble("fffffffff_signaling", true)));
     2508    CHECK_DBL_SAME(       exp2,(RTStrNanDouble("7777777777778_sig", false)));
    24682509
    24692510
     
    34713512    testLLRInt();
    34723513
     3514    testExp();
    34733515    testExp2();
    34743516    testLdExp();
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette