Changeset 96280 in vbox for trunk/src/VBox/Runtime/testcase/tstRTNoCrt-2.cpp
- Timestamp:
- Aug 18, 2022 2:44:56 AM (2 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Runtime/testcase/tstRTNoCrt-2.cpp
r96279 r96280 305 305 } while (0) 306 306 307 #define CHECK_DBL_APPROX_SAME(a_Fn, a_Args ) do { \307 #define CHECK_DBL_APPROX_SAME(a_Fn, a_Args, a_cMaxDelta) do { \ 308 308 RTFLOAT64U uNoCrtRet, uCrtRet; \ 309 309 uNoCrtRet.r = RT_NOCRT(a_Fn) a_Args; \ 310 310 uCrtRet.r = a_Fn a_Args; \ 311 311 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) \ 313 313 || RTFLOAT64U_IS_NAN(&uNoCrtRet) \ 314 314 || RTFLOAT64U_IS_NAN(&uCrtRet) ) ) \ … … 316 316 RTStrFormatR64(g_szFloat[0], sizeof(g_szFloat[0]), &uNoCrtRet, 0, 0, RTSTR_F_SPECIAL); \ 317 317 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)); \ 320 320 } \ 321 321 } while (0) … … 2434 2434 2435 2435 2436 void 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 2436 2477 void testExp2() 2437 2478 { 2438 2479 RTTestSub(g_hTest, "exp2[f]"); 2439 2480 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))); 2468 2509 2469 2510 … … 3471 3512 testLLRInt(); 3472 3513 3514 testExp(); 3473 3515 testExp2(); 3474 3516 testLdExp();
Note:
See TracChangeset
for help on using the changeset viewer.