Skip to content

Commit ed1c9d8

Browse files
ext/standard: Add more tests to round() (#13399)
1 parent ae5beff commit ed1c9d8

File tree

1 file changed

+146
-0
lines changed

1 file changed

+146
-0
lines changed
Lines changed: 146 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,146 @@
1+
--TEST--
2+
Feature GH-12143: Extend the maximum precision round can handle by one digit
3+
--INI--
4+
serialize_precisiion=17
5+
--FILE--
6+
<?php
7+
8+
$testCases = [
9+
'PHP_ROUND_HALF_UP' => [
10+
[0.12345678901234565, 16],
11+
[-0.12345678901234565, 16],
12+
[12345678901234565, -1],
13+
[-12345678901234565, -1],
14+
[4503599627370495.5, 0],
15+
[-4503599627370495.5, 0],
16+
],
17+
'PHP_ROUND_HALF_DOWN' => [
18+
[0.12345678901234565, 16],
19+
[-0.12345678901234565, 16],
20+
[12345678901234565, -1],
21+
[-12345678901234565, -1],
22+
[4503599627370495.5, 0],
23+
[-4503599627370495.5, 0],
24+
],
25+
'PHP_ROUND_HALF_EVEN' => [
26+
[0.12345678901234565, 16],
27+
[-0.12345678901234565, 16],
28+
[12345678901234565, -1],
29+
[-12345678901234565, -1],
30+
[4503599627370495.5, 0],
31+
[-4503599627370495.5, 0],
32+
],
33+
'PHP_ROUND_HALF_ODD' => [
34+
[0.12345678901234565, 16],
35+
[-0.12345678901234565, 16],
36+
[12345678901234565, -1],
37+
[-12345678901234565, -1],
38+
[4503599627370495.5, 0],
39+
[-4503599627370495.5, 0],
40+
],
41+
'PHP_ROUND_AWAY_FROM_ZERO' => [
42+
[0.12345678901234560, 16],
43+
[-0.12345678901234560, 16],
44+
[12345678901234567, -1],
45+
[-12345678901234567, -1],
46+
[4503599627370495.5, 0],
47+
[-4503599627370495.5, 0],
48+
],
49+
'PHP_ROUND_TOWARD_ZERO' => [
50+
[0.12345678901234566, 16],
51+
[-0.12345678901234566, 16],
52+
[12345678901234565, -1],
53+
[-12345678901234565, -1],
54+
[4503599627370495.5, 0],
55+
[-4503599627370495.5, 0],
56+
],
57+
'PHP_ROUND_CEILING' => [
58+
[0.12345678901234560, 16],
59+
[-0.12345678901234560, 16],
60+
[12345678901234564, -1],
61+
[-12345678901234564, -1],
62+
[4503599627370495.5, 0],
63+
[-4503599627370495.5, 0],
64+
],
65+
'PHP_ROUND_FLOOR' => [
66+
[0.12345678901234560, 16],
67+
[-0.12345678901234560, 16],
68+
[12345678901234564, -1],
69+
[-12345678901234564, -1],
70+
[4503599627370495.5, 0],
71+
[-4503599627370495.5, 0],
72+
],
73+
];
74+
75+
foreach ($testCases as $mode => $cases) {
76+
echo "========== {$mode} ==========\n";
77+
foreach ($cases as [$val, $precision]) {
78+
var_dump(round($val, $precision, constant($mode)));
79+
}
80+
echo "\n";
81+
}
82+
?>
83+
--EXPECT--
84+
========== PHP_ROUND_HALF_UP ==========
85+
float(0.12345678901234565)
86+
float(-0.12345678901234565)
87+
float(12345678901234564)
88+
float(-12345678901234564)
89+
float(4503599627370495.5)
90+
float(-4503599627370495.5)
91+
92+
========== PHP_ROUND_HALF_DOWN ==========
93+
float(0.12345678901234565)
94+
float(-0.12345678901234565)
95+
float(12345678901234564)
96+
float(-12345678901234564)
97+
float(4503599627370495.5)
98+
float(-4503599627370495.5)
99+
100+
========== PHP_ROUND_HALF_EVEN ==========
101+
float(0.12345678901234565)
102+
float(-0.12345678901234565)
103+
float(12345678901234564)
104+
float(-12345678901234564)
105+
float(4503599627370495.5)
106+
float(-4503599627370495.5)
107+
108+
========== PHP_ROUND_HALF_ODD ==========
109+
float(0.12345678901234565)
110+
float(-0.12345678901234565)
111+
float(12345678901234564)
112+
float(-12345678901234564)
113+
float(4503599627370495.5)
114+
float(-4503599627370495.5)
115+
116+
========== PHP_ROUND_AWAY_FROM_ZERO ==========
117+
float(0.1234567890123456)
118+
float(-0.1234567890123456)
119+
float(12345678901234568)
120+
float(-12345678901234568)
121+
float(4503599627370495.5)
122+
float(-4503599627370495.5)
123+
124+
========== PHP_ROUND_TOWARD_ZERO ==========
125+
float(0.12345678901234566)
126+
float(-0.12345678901234566)
127+
float(12345678901234564)
128+
float(-12345678901234564)
129+
float(4503599627370495.5)
130+
float(-4503599627370495.5)
131+
132+
========== PHP_ROUND_CEILING ==========
133+
float(0.1234567890123456)
134+
float(-0.1234567890123456)
135+
float(12345678901234564)
136+
float(-12345678901234564)
137+
float(4503599627370495.5)
138+
float(-4503599627370495.5)
139+
140+
========== PHP_ROUND_FLOOR ==========
141+
float(0.1234567890123456)
142+
float(-0.1234567890123456)
143+
float(12345678901234564)
144+
float(-12345678901234564)
145+
float(4503599627370495.5)
146+
float(-4503599627370495.5)

0 commit comments

Comments
 (0)