@@ -319,4 +319,348 @@ public static function mbRTrimProvider(): iterable
319319
320320 yield ["foo \n" , "foo \n" , 'o ' ];
321321 }
322+
323+ /**
324+ * @dataProvider fpowProvider
325+ */
326+ public function testFpow (float $ num , float $ exponent , float $ expected )
327+ {
328+ $ result = fpow ($ num , $ exponent );
329+
330+ if (is_nan ($ expected )) {
331+ $ this ->assertNan ($ result );
332+ } else {
333+ // The PHP testsuite performs assertions on the text representation of results. As we copied their test cases, we need to do the same.
334+ $ this ->assertSame ((string ) $ expected , (string ) $ result );
335+ }
336+ }
337+
338+ public static function fpowProvider (): iterable
339+ {
340+ // Cases tested in https://github.com/php/php-src/blob/php-8.4.2/ext/standard/tests/math/fpow.phpt
341+ yield [0 , 0 , 1 ];
342+ yield [0 , 1 , 0 ];
343+ yield [0 , -1 , INF ];
344+ yield [0 , 1.0 , 0 ];
345+ yield [0 , -1.0 , INF ];
346+ yield [0 , 2 , 0 ];
347+ yield [0 , -2 , INF ];
348+ yield [0 , 2.1 , 0 ];
349+ yield [0 , -2.1 , INF ];
350+ yield [0 , 0.1 , 0 ];
351+ yield [0 , -0.1 , INF ];
352+ yield [0 , 0.0 , 1 ];
353+ yield [0 , -0.0 , 1 ];
354+ yield [0 , 10 , 0 ];
355+ yield [0 , -10 , INF ];
356+ yield [0 , INF , 0 ];
357+ yield [0 , -INF , INF ];
358+ yield [0 , NAN , NAN ];
359+ yield [1 , 0 , 1 ];
360+ yield [1 , 1 , 1 ];
361+ yield [1 , -1 , 1 ];
362+ yield [1 , 1.0 , 1 ];
363+ yield [1 , -1.0 , 1 ];
364+ yield [1 , 2 , 1 ];
365+ yield [1 , -2 , 1 ];
366+ yield [1 , 2.1 , 1 ];
367+ yield [1 , -2.1 , 1 ];
368+ yield [1 , 0.1 , 1 ];
369+ yield [1 , -0.1 , 1 ];
370+ yield [1 , 0.0 , 1 ];
371+ yield [1 , -0.0 , 1 ];
372+ yield [1 , 10 , 1 ];
373+ yield [1 , -10 , 1 ];
374+ yield [1 , INF , 1 ];
375+ yield [1 , -INF , 1 ];
376+ yield [1 , NAN , 1 ];
377+ yield [-1 , 0 , 1 ];
378+ yield [-1 , 1 , -1 ];
379+ yield [-1 , -1 , -1 ];
380+ yield [-1 , 1.0 , -1 ];
381+ yield [-1 , -1.0 , -1 ];
382+ yield [-1 , 2 , 1 ];
383+ yield [-1 , -2 , 1 ];
384+ yield [-1 , 2.1 , NAN ];
385+ yield [-1 , -2.1 , NAN ];
386+ yield [-1 , 0.1 , NAN ];
387+ yield [-1 , -0.1 , NAN ];
388+ yield [-1 , 0.0 , 1 ];
389+ yield [-1 , -0.0 , 1 ];
390+ yield [-1 , 10 , 1 ];
391+ yield [-1 , -10 , 1 ];
392+ yield [-1 , INF , 1 ];
393+ yield [-1 , -INF , 1 ];
394+ yield [-1 , NAN , NAN ];
395+ yield [1.0 , 0 , 1 ];
396+ yield [1.0 , 1 , 1 ];
397+ yield [1.0 , -1 , 1 ];
398+ yield [1.0 , 1.0 , 1 ];
399+ yield [1.0 , -1.0 , 1 ];
400+ yield [1.0 , 2 , 1 ];
401+ yield [1.0 , -2 , 1 ];
402+ yield [1.0 , 2.1 , 1 ];
403+ yield [1.0 , -2.1 , 1 ];
404+ yield [1.0 , 0.1 , 1 ];
405+ yield [1.0 , -0.1 , 1 ];
406+ yield [1.0 , 0.0 , 1 ];
407+ yield [1.0 , -0.0 , 1 ];
408+ yield [1.0 , 10 , 1 ];
409+ yield [1.0 , -10 , 1 ];
410+ yield [1.0 , INF , 1 ];
411+ yield [1.0 , -INF , 1 ];
412+ yield [1.0 , NAN , 1 ];
413+ yield [-1.0 , 0 , 1 ];
414+ yield [-1.0 , 1 , -1 ];
415+ yield [-1.0 , -1 , -1 ];
416+ yield [-1.0 , 1.0 , -1 ];
417+ yield [-1.0 , -1.0 , -1 ];
418+ yield [-1.0 , 2 , 1 ];
419+ yield [-1.0 , -2 , 1 ];
420+ yield [-1.0 , 2.1 , NAN ];
421+ yield [-1.0 , -2.1 , NAN ];
422+ yield [-1.0 , 0.1 , NAN ];
423+ yield [-1.0 , -0.1 , NAN ];
424+ yield [-1.0 , 0.0 , 1 ];
425+ yield [-1.0 , -0.0 , 1 ];
426+ yield [-1.0 , 10 , 1 ];
427+ yield [-1.0 , -10 , 1 ];
428+ yield [-1.0 , INF , 1 ];
429+ yield [-1.0 , -INF , 1 ];
430+ yield [-1.0 , NAN , NAN ];
431+ yield [2 , 0 , 1 ];
432+ yield [2 , 1 , 2 ];
433+ yield [2 , -1 , 0.5 ];
434+ yield [2 , 1.0 , 2 ];
435+ yield [2 , -1.0 , 0.5 ];
436+ yield [2 , 2 , 4 ];
437+ yield [2 , -2 , 0.25 ];
438+ yield [2 , 2.1 , 4.2870938501452 ];
439+ yield [2 , -2.1 , 0.2332582478842 ];
440+ yield [2 , 0.1 , 1.0717734625363 ];
441+ yield [2 , -0.1 , 0.93303299153681 ];
442+ yield [2 , 0.0 , 1 ];
443+ yield [2 , -0.0 , 1 ];
444+ yield [2 , 10 , 1024 ];
445+ yield [2 , -10 , 0.0009765625 ];
446+ yield [2 , INF , INF ];
447+ yield [2 , -INF , 0 ];
448+ yield [2 , NAN , NAN ];
449+ yield [-2 , 0 , 1 ];
450+ yield [-2 , 1 , -2 ];
451+ yield [-2 , -1 , -0.5 ];
452+ yield [-2 , 1.0 , -2 ];
453+ yield [-2 , -1.0 , -0.5 ];
454+ yield [-2 , 2 , 4 ];
455+ yield [-2 , -2 , 0.25 ];
456+ yield [-2 , 2.1 , NAN ];
457+ yield [-2 , -2.1 , NAN ];
458+ yield [-2 , 0.1 , NAN ];
459+ yield [-2 , -0.1 , NAN ];
460+ yield [-2 , 0.0 , 1 ];
461+ yield [-2 , -0.0 , 1 ];
462+ yield [-2 , 10 , 1024 ];
463+ yield [-2 , -10 , 0.0009765625 ];
464+ yield [-2 , INF , INF ];
465+ yield [-2 , -INF , 0 ];
466+ yield [-2 , NAN , NAN ];
467+ yield [2.1 , 0 , 1 ];
468+ yield [2.1 , 1 , 2.1 ];
469+ yield [2.1 , -1 , 0.47619047619048 ];
470+ yield [2.1 , 1.0 , 2.1 ];
471+ yield [2.1 , -1.0 , 0.47619047619048 ];
472+ yield [2.1 , 2 , 4.41 ];
473+ yield [2.1 , -2 , 0.22675736961451 ];
474+ yield [2.1 , 2.1 , 4.7496380917422 ];
475+ yield [2.1 , -2.1 , 0.21054235726688 ];
476+ yield [2.1 , 0.1 , 1.0770154403044 ];
477+ yield [2.1 , -0.1 , 0.92849179554696 ];
478+ yield [2.1 , 0.0 , 1 ];
479+ yield [2.1 , -0.0 , 1 ];
480+ yield [2.1 , 10 , 1667.9880978201 ];
481+ yield [2.1 , -10 , 0.0005995246616609 ];
482+ yield [2.1 , INF , INF ];
483+ yield [2.1 , -INF , 0 ];
484+ yield [2.1 , NAN , NAN ];
485+ yield [-2.1 , 0 , 1 ];
486+ yield [-2.1 , 1 , -2.1 ];
487+ yield [-2.1 , -1 , -0.47619047619048 ];
488+ yield [-2.1 , 1.0 , -2.1 ];
489+ yield [-2.1 , -1.0 , -0.47619047619048 ];
490+ yield [-2.1 , 2 , 4.41 ];
491+ yield [-2.1 , -2 , 0.22675736961451 ];
492+ yield [-2.1 , 2.1 , NAN ];
493+ yield [-2.1 , -2.1 , NAN ];
494+ yield [-2.1 , 0.1 , NAN ];
495+ yield [-2.1 , -0.1 , NAN ];
496+ yield [-2.1 , 0.0 , 1 ];
497+ yield [-2.1 , -0.0 , 1 ];
498+ yield [-2.1 , 10 , 1667.9880978201 ];
499+ yield [-2.1 , -10 , 0.0005995246616609 ];
500+ yield [-2.1 , INF , INF ];
501+ yield [-2.1 , -INF , 0 ];
502+ yield [-2.1 , NAN , NAN ];
503+ yield [0.1 , 0 , 1 ];
504+ yield [0.1 , 1 , 0.1 ];
505+ yield [0.1 , -1 , 10 ];
506+ yield [0.1 , 1.0 , 0.1 ];
507+ yield [0.1 , -1.0 , 10 ];
508+ yield [0.1 , 2 , 0.01 ];
509+ yield [0.1 , -2 , 100 ];
510+ yield [0.1 , 2.1 , 0.0079432823472428 ];
511+ yield [0.1 , -2.1 , 125.89254117942 ];
512+ yield [0.1 , 0.1 , 0.79432823472428 ];
513+ yield [0.1 , -0.1 , 1.2589254117942 ];
514+ yield [0.1 , 0.0 , 1 ];
515+ yield [0.1 , -0.0 , 1 ];
516+ yield [0.1 , 10 , 1.0E-10 ];
517+ yield [0.1 , -10 , 10000000000 ];
518+ yield [0.1 , INF , 0 ];
519+ yield [0.1 , -INF , INF ];
520+ yield [0.1 , NAN , NAN ];
521+ yield [-0.1 , 0 , 1 ];
522+ yield [-0.1 , 1 , -0.1 ];
523+ yield [-0.1 , -1 , -10 ];
524+ yield [-0.1 , 1.0 , -0.1 ];
525+ yield [-0.1 , -1.0 , -10 ];
526+ yield [-0.1 , 2 , 0.01 ];
527+ yield [-0.1 , -2 , 100 ];
528+ yield [-0.1 , 2.1 , NAN ];
529+ yield [-0.1 , -2.1 , NAN ];
530+ yield [-0.1 , 0.1 , NAN ];
531+ yield [-0.1 , -0.1 , NAN ];
532+ yield [-0.1 , 0.0 , 1 ];
533+ yield [-0.1 , -0.0 , 1 ];
534+ yield [-0.1 , 10 , 1.0E-10 ];
535+ yield [-0.1 , -10 , 10000000000 ];
536+ yield [-0.1 , INF , 0 ];
537+ yield [-0.1 , -INF , INF ];
538+ yield [-0.1 , NAN , NAN ];
539+ yield [0.0 , 0 , 1 ];
540+ yield [0.0 , 1 , 0 ];
541+ yield [0.0 , -1 , INF ];
542+ yield [0.0 , 1.0 , 0 ];
543+ yield [0.0 , -1.0 , INF ];
544+ yield [0.0 , 2 , 0 ];
545+ yield [0.0 , -2 , INF ];
546+ yield [0.0 , 2.1 , 0 ];
547+ yield [0.0 , -2.1 , INF ];
548+ yield [0.0 , 0.1 , 0 ];
549+ yield [0.0 , -0.1 , INF ];
550+ yield [0.0 , 0.0 , 1 ];
551+ yield [0.0 , -0.0 , 1 ];
552+ yield [0.0 , 10 , 0 ];
553+ yield [0.0 , -10 , INF ];
554+ yield [0.0 , INF , 0 ];
555+ yield [0.0 , -INF , INF ];
556+ yield [0.0 , NAN , NAN ];
557+ yield [-0.0 , 0 , 1 ];
558+ yield [-0.0 , 1 , -0.0 ];
559+ yield [-0.0 , -1 , -INF ];
560+ yield [-0.0 , 1.0 , -0.0 ];
561+ yield [-0.0 , -1.0 , -INF ];
562+ yield [-0.0 , 2 , 0 ];
563+ yield [-0.0 , -2 , INF ];
564+ yield [-0.0 , 2.1 , 0 ];
565+ yield [-0.0 , -2.1 , INF ];
566+ yield [-0.0 , 0.1 , 0 ];
567+ yield [-0.0 , -0.1 , INF ];
568+ yield [-0.0 , 0.0 , 1 ];
569+ yield [-0.0 , -0.0 , 1 ];
570+ yield [-0.0 , 10 , 0 ];
571+ yield [-0.0 , -10 , INF ];
572+ yield [-0.0 , INF , 0 ];
573+ yield [-0.0 , -INF , INF ];
574+ yield [-0.0 , NAN , NAN ];
575+ yield [10 , 0 , 1 ];
576+ yield [10 , 1 , 10 ];
577+ yield [10 , -1 , 0.1 ];
578+ yield [10 , 1.0 , 10 ];
579+ yield [10 , -1.0 , 0.1 ];
580+ yield [10 , 2 , 100 ];
581+ yield [10 , -2 , 0.01 ];
582+ yield [10 , 2.1 , 125.89254117942 ];
583+ yield [10 , -2.1 , 0.0079432823472428 ];
584+ yield [10 , 0.1 , 1.2589254117942 ];
585+ yield [10 , -0.1 , 0.79432823472428 ];
586+ yield [10 , 0.0 , 1 ];
587+ yield [10 , -0.0 , 1 ];
588+ yield [10 , 10 , 10000000000 ];
589+ yield [10 , -10 , 1.0E-10 ];
590+ yield [10 , INF , INF ];
591+ yield [10 , -INF , 0 ];
592+ yield [10 , NAN , NAN ];
593+ yield [-10 , 0 , 1 ];
594+ yield [-10 , 1 , -10 ];
595+ yield [-10 , -1 , -0.1 ];
596+ yield [-10 , 1.0 , -10 ];
597+ yield [-10 , -1.0 , -0.1 ];
598+ yield [-10 , 2 , 100 ];
599+ yield [-10 , -2 , 0.01 ];
600+ yield [-10 , 2.1 , NAN ];
601+ yield [-10 , -2.1 , NAN ];
602+ yield [-10 , 0.1 , NAN ];
603+ yield [-10 , -0.1 , NAN ];
604+ yield [-10 , 0.0 , 1 ];
605+ yield [-10 , -0.0 , 1 ];
606+ yield [-10 , 10 , 10000000000 ];
607+ yield [-10 , -10 , 1.0E-10 ];
608+ yield [-10 , INF , INF ];
609+ yield [-10 , -INF , 0 ];
610+ yield [-10 , NAN , NAN ];
611+ yield [INF , 0 , 1 ];
612+ yield [INF , 1 , INF ];
613+ yield [INF , -1 , 0 ];
614+ yield [INF , 1.0 , INF ];
615+ yield [INF , -1.0 , 0 ];
616+ yield [INF , 2 , INF ];
617+ yield [INF , -2 , 0 ];
618+ yield [INF , 2.1 , INF ];
619+ yield [INF , -2.1 , 0 ];
620+ yield [INF , 0.1 , INF ];
621+ yield [INF , -0.1 , 0 ];
622+ yield [INF , 0.0 , 1 ];
623+ yield [INF , -0.0 , 1 ];
624+ yield [INF , 10 , INF ];
625+ yield [INF , -10 , 0 ];
626+ yield [INF , INF , INF ];
627+ yield [INF , -INF , 0 ];
628+ yield [INF , NAN , NAN ];
629+ yield [-INF , 0 , 1 ];
630+ yield [-INF , 1 , -INF ];
631+ yield [-INF , -1 , -0.0 ];
632+ yield [-INF , 1.0 , -INF ];
633+ yield [-INF , -1.0 , -0.0 ];
634+ yield [-INF , 2 , INF ];
635+ yield [-INF , -2 , 0 ];
636+ yield [-INF , 2.1 , INF ];
637+ yield [-INF , -2.1 , 0 ];
638+ yield [-INF , 0.1 , INF ];
639+ yield [-INF , -0.1 , 0 ];
640+ yield [-INF , 0.0 , 1 ];
641+ yield [-INF , -0.0 , 1 ];
642+ yield [-INF , 10 , INF ];
643+ yield [-INF , -10 , 0 ];
644+ yield [-INF , INF , INF ];
645+ yield [-INF , -INF , 0 ];
646+ yield [-INF , NAN , NAN ];
647+ yield [NAN , 0 , 1 ];
648+ yield [NAN , 1 , NAN ];
649+ yield [NAN , -1 , NAN ];
650+ yield [NAN , 1.0 , NAN ];
651+ yield [NAN , -1.0 , NAN ];
652+ yield [NAN , 2 , NAN ];
653+ yield [NAN , -2 , NAN ];
654+ yield [NAN , 2.1 , NAN ];
655+ yield [NAN , -2.1 , NAN ];
656+ yield [NAN , 0.1 , NAN ];
657+ yield [NAN , -0.1 , NAN ];
658+ yield [NAN , 0.0 , 1 ];
659+ yield [NAN , -0.0 , 1 ];
660+ yield [NAN , 10 , NAN ];
661+ yield [NAN , -10 , NAN ];
662+ yield [NAN , INF , NAN ];
663+ yield [NAN , -INF , NAN ];
664+ yield [NAN , NAN , NAN ];
665+ }
322666}
0 commit comments