From 22cfb24b2786029b5b20eaa5c462d3ed1407a227 Mon Sep 17 00:00:00 2001 From: Saki Takamachi Date: Thu, 15 Feb 2024 22:55:25 +0900 Subject: [PATCH] Added tests to check operation with existing implementation --- .../round_gh12143_expand-rounding-target.phpt | 146 ++++++++++++++++++ 1 file changed, 146 insertions(+) create mode 100644 ext/standard/tests/math/round_gh12143_expand-rounding-target.phpt diff --git a/ext/standard/tests/math/round_gh12143_expand-rounding-target.phpt b/ext/standard/tests/math/round_gh12143_expand-rounding-target.phpt new file mode 100644 index 0000000000000..472d6a35f617d --- /dev/null +++ b/ext/standard/tests/math/round_gh12143_expand-rounding-target.phpt @@ -0,0 +1,146 @@ +--TEST-- +Feature GH-12143: Extend the maximum precision round can handle by one digit +--INI-- +serialize_precisiion=17 +--FILE-- + [ + [0.12345678901234565, 16], + [-0.12345678901234565, 16], + [12345678901234565, -1], + [-12345678901234565, -1], + [4503599627370495.5, 0], + [-4503599627370495.5, 0], + ], + 'PHP_ROUND_HALF_DOWN' => [ + [0.12345678901234565, 16], + [-0.12345678901234565, 16], + [12345678901234565, -1], + [-12345678901234565, -1], + [4503599627370495.5, 0], + [-4503599627370495.5, 0], + ], + 'PHP_ROUND_HALF_EVEN' => [ + [0.12345678901234565, 16], + [-0.12345678901234565, 16], + [12345678901234565, -1], + [-12345678901234565, -1], + [4503599627370495.5, 0], + [-4503599627370495.5, 0], + ], + 'PHP_ROUND_HALF_ODD' => [ + [0.12345678901234565, 16], + [-0.12345678901234565, 16], + [12345678901234565, -1], + [-12345678901234565, -1], + [4503599627370495.5, 0], + [-4503599627370495.5, 0], + ], + 'PHP_ROUND_AWAY_FROM_ZERO' => [ + [0.12345678901234560, 16], + [-0.12345678901234560, 16], + [12345678901234567, -1], + [-12345678901234567, -1], + [4503599627370495.5, 0], + [-4503599627370495.5, 0], + ], + 'PHP_ROUND_TOWARD_ZERO' => [ + [0.12345678901234566, 16], + [-0.12345678901234566, 16], + [12345678901234565, -1], + [-12345678901234565, -1], + [4503599627370495.5, 0], + [-4503599627370495.5, 0], + ], + 'PHP_ROUND_CEILING' => [ + [0.12345678901234560, 16], + [-0.12345678901234560, 16], + [12345678901234564, -1], + [-12345678901234564, -1], + [4503599627370495.5, 0], + [-4503599627370495.5, 0], + ], + 'PHP_ROUND_FLOOR' => [ + [0.12345678901234560, 16], + [-0.12345678901234560, 16], + [12345678901234564, -1], + [-12345678901234564, -1], + [4503599627370495.5, 0], + [-4503599627370495.5, 0], + ], +]; + +foreach ($testCases as $mode => $cases) { + echo "========== {$mode} ==========\n"; + foreach ($cases as [$val, $precision]) { + var_dump(round($val, $precision, constant($mode))); + } + echo "\n"; +} +?> +--EXPECT-- +========== PHP_ROUND_HALF_UP ========== +float(0.12345678901234565) +float(-0.12345678901234565) +float(12345678901234564) +float(-12345678901234564) +float(4503599627370495.5) +float(-4503599627370495.5) + +========== PHP_ROUND_HALF_DOWN ========== +float(0.12345678901234565) +float(-0.12345678901234565) +float(12345678901234564) +float(-12345678901234564) +float(4503599627370495.5) +float(-4503599627370495.5) + +========== PHP_ROUND_HALF_EVEN ========== +float(0.12345678901234565) +float(-0.12345678901234565) +float(12345678901234564) +float(-12345678901234564) +float(4503599627370495.5) +float(-4503599627370495.5) + +========== PHP_ROUND_HALF_ODD ========== +float(0.12345678901234565) +float(-0.12345678901234565) +float(12345678901234564) +float(-12345678901234564) +float(4503599627370495.5) +float(-4503599627370495.5) + +========== PHP_ROUND_AWAY_FROM_ZERO ========== +float(0.1234567890123456) +float(-0.1234567890123456) +float(12345678901234568) +float(-12345678901234568) +float(4503599627370495.5) +float(-4503599627370495.5) + +========== PHP_ROUND_TOWARD_ZERO ========== +float(0.12345678901234566) +float(-0.12345678901234566) +float(12345678901234564) +float(-12345678901234564) +float(4503599627370495.5) +float(-4503599627370495.5) + +========== PHP_ROUND_CEILING ========== +float(0.1234567890123456) +float(-0.1234567890123456) +float(12345678901234564) +float(-12345678901234564) +float(4503599627370495.5) +float(-4503599627370495.5) + +========== PHP_ROUND_FLOOR ========== +float(0.1234567890123456) +float(-0.1234567890123456) +float(12345678901234564) +float(-12345678901234564) +float(4503599627370495.5) +float(-4503599627370495.5)