1--TEST--
2bcround() function with early return
3--EXTENSIONS--
4bcmath
5--FILE--
6<?php
7$otherModes = [
8    'PHP_ROUND_HALF_DOWN',
9    'PHP_ROUND_HALF_EVEN',
10    'PHP_ROUND_HALF_ODD',
11    'PHP_ROUND_FLOOR',
12    'PHP_ROUND_CEILING',
13    'PHP_ROUND_AWAY_FROM_ZERO',
14    'PHP_ROUND_TOWARD_ZERO',
15];
16
17$early_return_cases = [
18    ['123', -4],
19    ['123.123456', -4],
20    ['123', 1],
21    ['123.5', 1],
22    ['123.5', 2],
23    ['123.0000000000000000000001', 22],
24    ['123.0000000000000000000001', 23],
25    ['-123', -4],
26    ['-123.123456', -4],
27    ['-123', 1],
28    ['-123.5', 1],
29    ['-123.5', 2],
30    ['-123.0000000000000000000001', 22],
31    ['-123.0000000000000000000001', 23],
32    ['0', 0],
33    ['0.0', 0],
34    ['0.0000', 0],
35    ['-0', 0],
36    ['-0.0', 0],
37    ['-0.0000', 0],
38];
39
40$results = [
41    'PHP_ROUND_HALF_UP' => [],
42    'PHP_ROUND_HALF_DOWN' => [],
43    'PHP_ROUND_HALF_EVEN' => [],
44    'PHP_ROUND_HALF_ODD' => [],
45    'PHP_ROUND_FLOOR' => [],
46    'PHP_ROUND_CEIL' => [],
47    'PHP_ROUND_AWAY_FROM_ZERO' => [],
48    'PHP_ROUND_TOWARD_ZERO' => [],
49];
50foreach ($early_return_cases as [$num, $precision]) {
51    $result = str_pad("[{$num}, {$precision}]", 33, ' ', STR_PAD_LEFT) . ' => ' . bcround($num, $precision, PHP_ROUND_HALF_UP) . "\n";
52    echo $result;
53    $results['PHP_ROUND_HALF_UP'][] = $result;
54}
55
56echo "\n";
57
58foreach ($otherModes as $mode) {
59    foreach ($early_return_cases as [$num, $precision]) {
60        $result = str_pad("[{$num}, {$precision}]", 33, ' ', STR_PAD_LEFT) . ' => ' . bcround($num, $precision, constant($mode)) . "\n";
61        $results[$mode][] = $result;
62    }
63
64    if ($results['PHP_ROUND_HALF_UP'] === $results[$mode]) {
65        echo str_pad($mode, 24, ' ', STR_PAD_LEFT) . ": result is same to PHP_ROUND_HALF_UP\n";
66    } else {
67        echo str_pad($mode, 24, ' ', STR_PAD_LEFT) . ": result is not same to PHP_ROUND_HALF_UP, failed\n";
68    }
69}
70?>
71--EXPECT--
72                        [123, -4] => 0
73                 [123.123456, -4] => 0
74                         [123, 1] => 123.0
75                       [123.5, 1] => 123.5
76                       [123.5, 2] => 123.50
77 [123.0000000000000000000001, 22] => 123.0000000000000000000001
78 [123.0000000000000000000001, 23] => 123.00000000000000000000010
79                       [-123, -4] => 0
80                [-123.123456, -4] => 0
81                        [-123, 1] => -123.0
82                      [-123.5, 1] => -123.5
83                      [-123.5, 2] => -123.50
84[-123.0000000000000000000001, 22] => -123.0000000000000000000001
85[-123.0000000000000000000001, 23] => -123.00000000000000000000010
86                           [0, 0] => 0
87                         [0.0, 0] => 0
88                      [0.0000, 0] => 0
89                          [-0, 0] => 0
90                        [-0.0, 0] => 0
91                     [-0.0000, 0] => 0
92
93     PHP_ROUND_HALF_DOWN: result is same to PHP_ROUND_HALF_UP
94     PHP_ROUND_HALF_EVEN: result is same to PHP_ROUND_HALF_UP
95      PHP_ROUND_HALF_ODD: result is same to PHP_ROUND_HALF_UP
96         PHP_ROUND_FLOOR: result is same to PHP_ROUND_HALF_UP
97       PHP_ROUND_CEILING: result is same to PHP_ROUND_HALF_UP
98PHP_ROUND_AWAY_FROM_ZERO: result is same to PHP_ROUND_HALF_UP
99   PHP_ROUND_TOWARD_ZERO: result is same to PHP_ROUND_HALF_UP
100