@@ -319,4 +319,348 @@ public static function mbRTrimProvider(): iterable
319
319
320
320
yield ["foo \n" , "foo \n" , 'o ' ];
321
321
}
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
+ }
322
666
}
0 commit comments