/** * 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 * @param array $processed * @throws ComparisonFailure Thrown when the comparison * fails. Contains information about the * specific errors that lead to the failure. */ public function assertEquals($expected, $actual, $delta = 0.0, $canonicalize = false, $ignoreCase = false, array &$processed = array()) { if (get_class($actual) !== get_class($expected)) { throw new ComparisonFailure($expected, $actual, $this->exporter->export($expected), $this->exporter->export($actual), false, sprintf('%s is not instance of expected class "%s".', $this->exporter->export($actual), get_class($expected))); } // don't compare twice to allow for cyclic dependencies if (in_array(array($actual, $expected), $processed, true) || in_array(array($expected, $actual), $processed, true)) { return; } $processed[] = array($actual, $expected); // don't compare objects if they are identical // this helps to avoid the error "maximum function nesting level reached" // CAUTION: this conditional clause is not tested if ($actual !== $expected) { try { parent::assertEquals($this->toArray($expected), $this->toArray($actual), $delta, $canonicalize, $ignoreCase, $processed); } catch (ComparisonFailure $e) { throw new ComparisonFailure($expected, $actual, substr_replace($e->getExpectedAsString(), get_class($expected) . ' Object', 0, 5), substr_replace($e->getActualAsString(), get_class($actual) . ' Object', 0, 5), false, 'Failed asserting that two objects are equal.'); } } }
/** * @dataProvider customEqualityCmpDataProvider * * @param array $arr1 * @param array $arr2 * @param boolean $areEqual true if these two arrays should be considered as equal */ public function testCustomEqualityCompareFunction(array $arr1, array $arr2, $areEqual) { $this->assertEquals($areEqual, ArrayComparator::arraysHoldEqualElements($arr1, $arr2, function ($arr1Elem, $arr2Elem) { return 2 * $arr1Elem === $arr2Elem; })); }