Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Merge pull request #394 from asm89/numeric-comparator

  • Loading branch information...
commit 478490136ec6055cbdeb377433a3be5a8c3bc802 2 parents 75abcc6 + f5dc8fd
Sebastian Bergmann authored
1  PHPUnit/Autoload.php
View
@@ -71,6 +71,7 @@ function phpunit_autoload($class = NULL)
'phpunit_framework_comparator_double' => '/Framework/Comparator/Double.php',
'phpunit_framework_comparator_exception' => '/Framework/Comparator/Exception.php',
'phpunit_framework_comparator_mockobject' => '/Framework/Comparator/MockObject.php',
+ 'phpunit_framework_comparator_numeric' => '/Framework/Comparator/Numeric.php',
'phpunit_framework_comparator_object' => '/Framework/Comparator/Object.php',
'phpunit_framework_comparator_resource' => '/Framework/Comparator/Resource.php',
'phpunit_framework_comparator_scalar' => '/Framework/Comparator/Scalar.php',
28 PHPUnit/Framework/Comparator/Double.php
View
@@ -55,7 +55,7 @@
* @link http://www.phpunit.de/
* @since Class available since Release 3.6.0
*/
-class PHPUnit_Framework_Comparator_Double extends PHPUnit_Framework_Comparator_Scalar
+class PHPUnit_Framework_Comparator_Double extends PHPUnit_Framework_Comparator_Numeric
{
/**
* Smallest value available in PHP.
@@ -93,34 +93,10 @@ public function accepts($expected, $actual)
*/
public function assertEquals($expected, $actual, $delta = 0, $canonicalize = FALSE, $ignoreCase = FALSE)
{
- if (is_infinite($actual) && is_infinite($expected)) {
- return;
- }
-
- if (is_nan($actual) && is_nan($expected)) {
- return;
- }
-
if ($delta == 0) {
$delta = self::EPSILON;
}
- if ((is_infinite($actual) XOR is_infinite($expected)) ||
- (is_nan($actual) XOR is_nan($expected)) ||
- abs($actual - $expected) >= $delta) {
- throw new PHPUnit_Framework_ComparisonFailure(
- $expected,
- $actual,
- '',
- '',
- FALSE,
- sprintf(
- 'Failed asserting that %s matches expected %s.',
-
- PHPUnit_Util_Type::export($actual),
- PHPUnit_Util_Type::export($expected)
- )
- );
- }
+ parent::assertEquals($expected, $actual, $delta, $canonicalize, $ignoreCase);
}
}
117 PHPUnit/Framework/Comparator/Numeric.php
View
@@ -0,0 +1,117 @@
+<?php
+/**
+ * PHPUnit
+ *
+ * Copyright (c) 2002-2011, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * * Neither the name of Sebastian Bergmann nor the names of his
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @package PHPUnit
+ * @subpackage Framework
+ * @author Bernhard Schussek <bschussek@2bepublished.at>
+ * @copyright 2002-2011 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license http://www.opensource.org/licenses/bsd-license.php BSD License
+ * @link http://www.phpunit.de/
+ * @since File available since Release 3.6.0
+ */
+
+/**
+ * Compares numerical values for equality.
+ *
+ * @package PHPUnit
+ * @subpackage Framework_Comparator
+ * @author Bernhard Schussek <bschussek@2bepublished.at>
+ * @author Alexander <iam.asm89@gmail.com>
+ * @copyright 2002-2011 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license http://www.opensource.org/licenses/bsd-license.php BSD License
+ * @version Release: @package_version@
+ * @link http://www.phpunit.de/
+ * @since Class available since Release 3.6.0
+ */
+class PHPUnit_Framework_Comparator_Numeric extends PHPUnit_Framework_Comparator_Scalar
+{
+ /**
+ * Returns whether the comparator can compare two values.
+ *
+ * @param mixed $expected The first value to compare
+ * @param mixed $actual The second value to compare
+ * @return boolean
+ */
+ public function accepts($expected, $actual)
+ {
+ // all numerical values, but not if one of them is a double
+ return is_numeric($expected) && is_numeric($actual) && !(is_double($expected) || is_double($actual));
+ }
+
+ /**
+ * Asserts that two values are equal.
+ *
+ * @param mixed $expected The first value to compare
+ * @param mixed $actual The second value to compare
+ * @param float $delta The allowed numerical distance between two values to
+ * consider them equal
+ * @param bool $canonicalize If set to TRUE, arrays are sorted before
+ * comparison
+ * @param bool $ignoreCase If set to TRUE, upper- and lowercasing is
+ * ignored when comparing string values
+ * @throws PHPUnit_Framework_ComparisonFailure Thrown when the comparison
+ * fails. Contains information about the
+ * specific errors that lead to the failure.
+ */
+ public function assertEquals($expected, $actual, $delta = 0, $canonicalize = FALSE, $ignoreCase = FALSE)
+ {
+ if (is_infinite($actual) && is_infinite($expected)) {
+ return;
+ }
+
+ if (is_nan($actual) && is_nan($expected)) {
+ return;
+ }
+
+ if ((is_infinite($actual) XOR is_infinite($expected)) ||
+ (is_nan($actual) XOR is_nan($expected)) ||
+ abs($actual - $expected) > $delta) {
+ throw new PHPUnit_Framework_ComparisonFailure(
+ $expected,
+ $actual,
+ '',
+ '',
+ FALSE,
+ sprintf(
+ 'Failed asserting that %s matches expected %s.',
+
+ PHPUnit_Util_Type::export($actual),
+ PHPUnit_Util_Type::export($expected)
+ )
+ );
+ }
+ }
+}
1  PHPUnit/Framework/ComparatorFactory.php
View
@@ -74,6 +74,7 @@ public function __construct()
{
$this->register(new PHPUnit_Framework_Comparator_Type);
$this->register(new PHPUnit_Framework_Comparator_Scalar);
+ $this->register(new PHPUnit_Framework_Comparator_Numeric);
$this->register(new PHPUnit_Framework_Comparator_Double);
$this->register(new PHPUnit_Framework_Comparator_Array);
$this->register(new PHPUnit_Framework_Comparator_Resource);
2  Tests/Framework/AssertTest.php
View
@@ -654,6 +654,8 @@ protected function equalValues()
array(array(array(2.3)), array(array(2.5)), 0.5),
array(new Struct(2.3), new Struct(2.5), 0.5),
array(array(new Struct(2.3)), array(new Struct(2.5)), 0.5),
+ // numeric with delta
+ array(1, 2, 1),
// objects
array($object1, $object2),
array($book1, $book2),
8 Tests/Framework/ComparatorTest.php
View
@@ -76,10 +76,10 @@ public function instanceProvider()
array(true, false, 'PHPUnit_Framework_Comparator_Scalar'),
array(false, true, 'PHPUnit_Framework_Comparator_Scalar'),
array('', '', 'PHPUnit_Framework_Comparator_Scalar'),
- array('0', '0', 'PHPUnit_Framework_Comparator_Scalar'),
- array('0', 0, 'PHPUnit_Framework_Comparator_Scalar'),
- array(0, '0', 'PHPUnit_Framework_Comparator_Scalar'),
- array(0, 0, 'PHPUnit_Framework_Comparator_Scalar'),
+ array('0', '0', 'PHPUnit_Framework_Comparator_Numeric'),
+ array('0', 0, 'PHPUnit_Framework_Comparator_Numeric'),
+ array(0, '0', 'PHPUnit_Framework_Comparator_Numeric'),
+ array(0, 0, 'PHPUnit_Framework_Comparator_Numeric'),
array(1.0, 0, 'PHPUnit_Framework_Comparator_Double'),
array(0, 1.0, 'PHPUnit_Framework_Comparator_Double'),
array(1.0, 1.0, 'PHPUnit_Framework_Comparator_Double'),
Please sign in to comment.
Something went wrong with that request. Please try again.