summaryrefslogtreecommitdiff
path: root/ext/standard/tests/math/pow.phpt
diff options
context:
space:
mode:
Diffstat (limited to 'ext/standard/tests/math/pow.phpt')
-rw-r--r--ext/standard/tests/math/pow.phpt397
1 files changed, 262 insertions, 135 deletions
diff --git a/ext/standard/tests/math/pow.phpt b/ext/standard/tests/math/pow.phpt
index 18c0b9468c..4b515ad882 100644
--- a/ext/standard/tests/math/pow.phpt
+++ b/ext/standard/tests/math/pow.phpt
@@ -8,142 +8,269 @@ define('LONG_MIN', -LONG_MAX - 1);
printf("%d,%d,%d,%d\n",is_int(LONG_MIN ),is_int(LONG_MAX ),
is_int(LONG_MIN-1),is_int(LONG_MAX+1));
-$tests = <<<TESTS
- 0.25 === pow(-2,-2)
--0.5 === pow(-2,-1)
- 1 === pow(-2, 0)
--2 === pow(-2, 1)
- 4 === pow(-2, 2)
- 1.0 === pow(-1,-2)
--1.0 === pow(-1,-1)
- 1 === pow(-1, 0)
--1 === pow(-1, 1)
- 1 === pow(-1, 2)
- TRUE === is_infinite(pow(0,-2))
- TRUE === is_infinite(pow(0,-1))
- 1 === pow( 0, 0)
- 0 === pow( 0, 1)
- 0 === pow( 0, 2)
- 1.0 === pow( 1,-2)
- 1.0 === pow( 1,-1)
- 1 === pow( 1, 0)
- 1 === pow( 1, 1)
- 1 === pow( 1, 2)
- 0.25 === pow( 2,-2)
- 0.5 === pow( 2,-1)
- 1 === pow( 2, 0)
- 2 === pow( 2, 1)
- 4 === pow( 2, 2)
- 0.25 === pow(-2,-2.0)
--0.5 === pow(-2,-1.0)
- 1.0 === pow(-2, 0.0)
--2.0 === pow(-2, 1.0)
- 4.0 === pow(-2, 2.0)
- 1.0 === pow(-1,-2.0)
--1.0 === pow(-1,-1.0)
- 1.0 === pow(-1, 0.0)
--1.0 === pow(-1, 1.0)
- 1.0 === pow(-1, 2.0)
- TRUE === is_infinite(pow(0,-2.0))
- TRUE === is_infinite(pow(0,-1.0))
- 1.0 === pow( 0, 0.0)
- 0.0 === pow( 0, 1.0)
- 0.0 === pow( 0, 2.0)
- 1.0 === pow( 1,-2.0)
- 1.0 === pow( 1,-1.0)
- 1.0 === pow( 1, 0.0)
- 1.0 === pow( 1, 1.0)
- 1.0 === pow( 1, 2.0)
- 0.25 === pow( 2,-2.0)
- 0.5 === pow( 2,-1.0)
- 1.0 === pow( 2, 0.0)
- 2.0 === pow( 2, 1.0)
- 4.0 === pow( 2, 2.0)
- 2147483648 === pow(2,31)
--2147483648 ~== pow(-2,31)
- 1000000000 === pow(10,9)
- 100000000 === pow(-10,8)
- 1 === pow(-1,1443279822)
--1 === pow(-1,1443279821)
-sqrt(2) ~== pow(2,1/2)
- 0.25 === pow(-2.0,-2.0)
--0.5 === pow(-2.0,-1.0)
- 1.0 === pow(-2.0, 0.0)
--2.0 === pow(-2.0, 1.0)
- 4.0 === pow(-2.0, 2.0)
- 1.0 === pow(-1.0,-2.0)
--1.0 === pow(-1.0,-1.0)
- 1.0 === pow(-1.0, 0.0)
--1.0 === pow(-1.0, 1.0)
- 1.0 === pow(-1.0, 2.0)
- TRUE === is_infinite(pow(0.0,-2.0))
- TRUE === is_infinite(pow(0.0,-1.0))
- 1.0 === pow( 0.0, 0.0)
- 0.0 === pow( 0.0, 1.0)
- 0.0 === pow( 0.0, 2.0)
- 1.0 === pow( 1.0,-2.0)
- 1.0 === pow( 1.0,-1.0)
- 1.0 === pow( 1.0, 0.0)
- 1.0 === pow( 1.0, 1.0)
- 1.0 === pow( 1.0, 2.0)
- 0.25 === pow( 2.0,-2.0)
- 0.5 === pow( 2.0,-1.0)
- 1.0 === pow( 2.0, 0.0)
- 2.0 === pow( 2.0, 1.0)
- 4.0 === pow( 2.0, 2.0)
- 0.25 === pow(-2.0,-2)
--0.5 === pow(-2.0,-1)
- 1.0 === pow(-2.0, 0)
--2.0 === pow(-2.0, 1)
- 4.0 === pow(-2.0, 2)
- 1.0 === pow(-1.0,-2)
--1.0 === pow(-1.0,-1)
- 1.0 === pow(-1.0, 0)
--1.0 === pow(-1.0, 1)
- 1.0 === pow(-1.0, 2)
- TRUE === is_infinite(pow( 0.0,-2))
- TRUE === is_infinite(pow( 0.0,-1))
- 1.0 === pow( 0.0, 0)
- 0.0 === pow( 0.0, 1)
- 0.0 === pow( 0.0, 2)
- 1.0 === pow( 1.0,-2)
- 1.0 === pow( 1.0,-1)
- 1.0 === pow( 1.0, 0)
- 1.0 === pow( 1.0, 1)
- 1.0 === pow( 1.0, 2)
- 0.25 === pow( 2.0,-2)
- 0.5 === pow( 2.0,-1)
- 1.0 === pow( 2.0, 0)
- 2.0 === pow( 2.0, 1)
- 4.0 === pow( 2.0, 2)
- 2.0 === pow( 4, 0.5)
- 2.0 === pow( 4.0, 0.5)
- 3.0 === pow( 27, 1/3)
- 3.0 === pow(27.0, 1/3)
- 0.5 === pow( 4, -0.5)
- 0.5 === pow( 4.0, -0.5)
-LONG_MAX-1 === pow(LONG_MAX-1,1)
-LONG_MIN+1 === pow(LONG_MIN+1,1)
-(LONG_MAX-1)*(LONG_MAX-1) ~== pow(LONG_MAX-1,2)
-(LONG_MIN+1)*(LONG_MIN+1) ~== pow(LONG_MIN+1,2)
-(float)(LONG_MAX-1) === pow(LONG_MAX-1,1.0)
-(float)(LONG_MIN+1) === pow(LONG_MIN+1,1.0)
-(LONG_MAX-1)*(LONG_MAX-1) ~== pow(LONG_MAX-1,2.0)
-(LONG_MIN+1)*(LONG_MIN+1) ~== pow(LONG_MIN+1,2.0)
-LONG_MAX === pow(LONG_MAX,1)
-LONG_MIN === pow(LONG_MIN,1)
-LONG_MAX*LONG_MAX ~== pow(LONG_MAX,2)
-LONG_MIN*LONG_MIN ~== pow(LONG_MIN,2)
-(float)LONG_MAX === pow(LONG_MAX,1.0)
-(float)LONG_MIN === pow(LONG_MIN,1.0)
-LONG_MAX*LONG_MAX ~== pow(LONG_MAX,2.0)
-LONG_MIN*LONG_MIN ~== pow(LONG_MIN,2.0)
-TESTS;
+function epsilon_equal($left, $right): bool {
+ return abs(($left-$right) / $left) < 1e-12;
+}
+
+var_dump(0.25 === pow(-2,-2));
+var_dump(-0.5 === pow(-2,-1));
+var_dump(1 === pow(-2, 0));
+var_dump(-2 === pow(-2, 1));
+var_dump(4 === pow(-2, 2));
+var_dump(1.0 === pow(-1,-2));
+var_dump(-1.0 === pow(-1,-1));
+var_dump(1 === pow(-1, 0));
+var_dump(-1 === pow(-1, 1));
+var_dump(1 === pow(-1, 2));
+var_dump(TRUE === is_infinite(pow(0,-2)));
+var_dump(TRUE === is_infinite(pow(0,-1)));
+var_dump(1 === pow( 0, 0));
+var_dump(0 === pow( 0, 1));
+var_dump(0 === pow( 0, 2));
+var_dump(1.0 === pow( 1,-2));
+var_dump(1.0 === pow( 1,-1));
+var_dump(1 === pow( 1, 0));
+var_dump(1 === pow( 1, 1));
+var_dump(1 === pow( 1, 2));
+var_dump(0.25 === pow( 2,-2));
+var_dump(0.5 === pow( 2,-1));
+var_dump(1 === pow( 2, 0));
+var_dump(2 === pow( 2, 1));
+var_dump(4 === pow( 2, 2));
+var_dump(0.25 === pow(-2,-2.0));
+var_dump(-0.5 === pow(-2,-1.0));
+var_dump(1.0 === pow(-2, 0.0));
+var_dump(-2.0 === pow(-2, 1.0));
+var_dump(4.0 === pow(-2, 2.0));
+var_dump(1.0 === pow(-1,-2.0));
+var_dump(-1.0 === pow(-1,-1.0));
+var_dump(1.0 === pow(-1, 0.0));
+var_dump(-1.0 === pow(-1, 1.0));
+var_dump(1.0 === pow(-1, 2.0));
+var_dump(TRUE === is_infinite(pow(0,-2.0)));
+var_dump(TRUE === is_infinite(pow(0,-1.0)));
+var_dump(1.0 === pow( 0, 0.0));
+var_dump(0.0 === pow( 0, 1.0));
+var_dump(0.0 === pow( 0, 2.0));
+var_dump(1.0 === pow( 1,-2.0));
+var_dump(1.0 === pow( 1,-1.0));
+var_dump(1.0 === pow( 1, 0.0));
+var_dump(1.0 === pow( 1, 1.0));
+var_dump(1.0 === pow( 1, 2.0));
+var_dump(0.25 === pow( 2,-2.0));
+var_dump(0.5 === pow( 2,-1.0));
+var_dump(1.0 === pow( 2, 0.0));
+var_dump(2.0 === pow( 2, 1.0));
+var_dump(4.0 === pow( 2, 2.0));
+var_dump(2147483648 === pow(2,31));
+var_dump(epsilon_equal( -2147483648, pow(-2,31) ));
+var_dump(1000000000 === pow(10,9));
+var_dump(100000000 === pow(-10,8));
+var_dump(1 === pow(-1,1443279822));
+var_dump(-1 === pow(-1,1443279821));
+var_dump(epsilon_equal( sqrt(2), pow(2,1/2) ));
+var_dump(0.25 === pow(-2.0,-2.0));
+var_dump(-0.5 === pow(-2.0,-1.0));
+var_dump(1.0 === pow(-2.0, 0.0));
+var_dump(-2.0 === pow(-2.0, 1.0));
+var_dump(4.0 === pow(-2.0, 2.0));
+var_dump(1.0 === pow(-1.0,-2.0));
+var_dump(-1.0 === pow(-1.0,-1.0));
+var_dump(1.0 === pow(-1.0, 0.0));
+var_dump(-1.0 === pow(-1.0, 1.0));
+var_dump(1.0 === pow(-1.0, 2.0));
+var_dump(TRUE === is_infinite(pow(0.0,-2.0)));
+var_dump(TRUE === is_infinite(pow(0.0,-1.0)));
+var_dump(1.0 === pow( 0.0, 0.0));
+var_dump(0.0 === pow( 0.0, 1.0));
+var_dump(0.0 === pow( 0.0, 2.0));
+var_dump(1.0 === pow( 1.0,-2.0));
+var_dump(1.0 === pow( 1.0,-1.0));
+var_dump(1.0 === pow( 1.0, 0.0));
+var_dump(1.0 === pow( 1.0, 1.0));
+var_dump(1.0 === pow( 1.0, 2.0));
+var_dump(0.25 === pow( 2.0,-2.0));
+var_dump(0.5 === pow( 2.0,-1.0));
+var_dump(1.0 === pow( 2.0, 0.0));
+var_dump(2.0 === pow( 2.0, 1.0));
+var_dump(4.0 === pow( 2.0, 2.0));
+var_dump(0.25 === pow(-2.0,-2));
+var_dump(-0.5 === pow(-2.0,-1));
+var_dump(1.0 === pow(-2.0, 0));
+var_dump(-2.0 === pow(-2.0, 1));
+var_dump(4.0 === pow(-2.0, 2));
+var_dump(1.0 === pow(-1.0,-2));
+var_dump(-1.0 === pow(-1.0,-1));
+var_dump(1.0 === pow(-1.0, 0));
+var_dump(-1.0 === pow(-1.0, 1));
+var_dump(1.0 === pow(-1.0, 2));
+var_dump(TRUE === is_infinite(pow( 0.0,-2)));
+var_dump(TRUE === is_infinite(pow( 0.0,-1)));
+var_dump(1.0 === pow( 0.0, 0));
+var_dump(0.0 === pow( 0.0, 1));
+var_dump(0.0 === pow( 0.0, 2));
+var_dump(1.0 === pow( 1.0,-2));
+var_dump(1.0 === pow( 1.0,-1));
+var_dump(1.0 === pow( 1.0, 0));
+var_dump(1.0 === pow( 1.0, 1));
+var_dump(1.0 === pow( 1.0, 2));
+var_dump(0.25 === pow( 2.0,-2));
+var_dump(0.5 === pow( 2.0,-1));
+var_dump(1.0 === pow( 2.0, 0));
+var_dump(2.0 === pow( 2.0, 1));
+var_dump(4.0 === pow( 2.0, 2));
+var_dump(2.0 === pow( 4, 0.5));
+var_dump(2.0 === pow( 4.0, 0.5));
+var_dump(3.0 === pow( 27, 1/3));
+var_dump(3.0 === pow(27.0, 1/3));
+var_dump(0.5 === pow( 4, -0.5));
+var_dump(0.5 === pow( 4.0, -0.5));
+var_dump(LONG_MAX-1 === pow(LONG_MAX-1,1));
+var_dump(LONG_MIN+1 === pow(LONG_MIN+1,1));
+var_dump(epsilon_equal( (LONG_MAX-1)*(LONG_MAX-1) , pow(LONG_MAX-1,2) ));
+var_dump(epsilon_equal( (LONG_MIN+1)*(LONG_MIN+1) , pow(LONG_MIN+1,2) ));
+var_dump((float)(LONG_MAX-1) === pow(LONG_MAX-1,1.0));
+var_dump((float)(LONG_MIN+1) === pow(LONG_MIN+1,1.0));
+var_dump(epsilon_equal( (LONG_MAX-1)*(LONG_MAX-1) , pow(LONG_MAX-1,2.0) ));
+var_dump(epsilon_equal( (LONG_MIN+1)*(LONG_MIN+1) , pow(LONG_MIN+1,2.0) ));
+var_dump(LONG_MAX === pow(LONG_MAX,1));
+var_dump(LONG_MIN === pow(LONG_MIN,1));
+var_dump(epsilon_equal( LONG_MAX*LONG_MAX , pow(LONG_MAX,2) ));
+var_dump(epsilon_equal( LONG_MIN*LONG_MIN , pow(LONG_MIN,2) ));
+var_dump((float)LONG_MAX === pow(LONG_MAX,1.0));
+var_dump((float)LONG_MIN === pow(LONG_MIN,1.0));
+var_dump(epsilon_equal( LONG_MAX*LONG_MAX , pow(LONG_MAX,2.0) ));
+var_dump(epsilon_equal( LONG_MIN*LONG_MIN , pow(LONG_MIN,2.0) ));
- echo "On failure, please mail result to php-dev@lists.php.net\n";
- include(__DIR__ . '/../../../../tests/quicktester.inc');
?>
--EXPECT--
1,1,0,0
-On failure, please mail result to php-dev@lists.php.net
-OK
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)