1<?php 2/** 3 * PHPUnit 4 * 5 * Copyright (c) 2001-2012, Sebastian Bergmann <sebastian@phpunit.de>. 6 * All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions 10 * are met: 11 * 12 * * Redistributions of source code must retain the above copyright 13 * notice, this list of conditions and the following disclaimer. 14 * 15 * * Redistributions in binary form must reproduce the above copyright 16 * notice, this list of conditions and the following disclaimer in 17 * the documentation and/or other materials provided with the 18 * distribution. 19 * 20 * * Neither the name of Sebastian Bergmann nor the names of his 21 * contributors may be used to endorse or promote products derived 22 * from this software without specific prior written permission. 23 * 24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 25 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 26 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 27 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 28 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 29 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 30 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 31 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 32 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 33 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 34 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 35 * POSSIBILITY OF SUCH DAMAGE. 36 * 37 * @package PHPUnit 38 * @subpackage Framework 39 * @author Bernhard Schussek <bschussek@2bepublished.at> 40 * @copyright 2001-2012 Sebastian Bergmann <sebastian@phpunit.de> 41 * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License 42 * @link http://www.phpunit.de/ 43 * @since File available since Release 3.6.0 44 */ 45 46/** 47 * Compares numerical values for equality. 48 * 49 * @package PHPUnit 50 * @subpackage Framework_Comparator 51 * @author Bernhard Schussek <bschussek@2bepublished.at> 52 * @author Alexander <iam.asm89@gmail.com> 53 * @copyright 2001-2012 Sebastian Bergmann <sebastian@phpunit.de> 54 * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License 55 * @version Release: @package_version@ 56 * @link http://www.phpunit.de/ 57 * @since Class available since Release 3.6.0 58 */ 59class PHPUnit_Framework_Comparator_Numeric extends PHPUnit_Framework_Comparator_Scalar 60{ 61 /** 62 * Returns whether the comparator can compare two values. 63 * 64 * @param mixed $expected The first value to compare 65 * @param mixed $actual The second value to compare 66 * @return boolean 67 */ 68 public function accepts($expected, $actual) 69 { 70 // all numerical values, but not if one of them is a double 71 return is_numeric($expected) && is_numeric($actual) && !(is_double($expected) || is_double($actual)); 72 } 73 74 /** 75 * Asserts that two values are equal. 76 * 77 * @param mixed $expected The first value to compare 78 * @param mixed $actual The second value to compare 79 * @param float $delta The allowed numerical distance between two values to 80 * consider them equal 81 * @param bool $canonicalize If set to TRUE, arrays are sorted before 82 * comparison 83 * @param bool $ignoreCase If set to TRUE, upper- and lowercasing is 84 * ignored when comparing string values 85 * @throws PHPUnit_Framework_ComparisonFailure Thrown when the comparison 86 * fails. Contains information about the 87 * specific errors that lead to the failure. 88 */ 89 public function assertEquals($expected, $actual, $delta = 0, $canonicalize = FALSE, $ignoreCase = FALSE) 90 { 91 if (is_infinite($actual) && is_infinite($expected)) { 92 return; 93 } 94 95 if (is_nan($actual) && is_nan($expected)) { 96 return; 97 } 98 99 if ((is_infinite($actual) XOR is_infinite($expected)) || 100 (is_nan($actual) XOR is_nan($expected)) || 101 abs($actual - $expected) > $delta) { 102 throw new PHPUnit_Framework_ComparisonFailure( 103 $expected, 104 $actual, 105 '', 106 '', 107 FALSE, 108 sprintf( 109 'Failed asserting that %s matches expected %s.', 110 111 PHPUnit_Util_Type::export($actual), 112 PHPUnit_Util_Type::export($expected) 113 ) 114 ); 115 } 116 } 117} 118