From f0274aca89ebcac0b2828b16523c051ccfff1dfa Mon Sep 17 00:00:00 2001 From: upstream Date: Fri, 4 Sep 2026 06:21:06 +0200 Subject: [PATCH] Upstream doctrine/collections state of the touched files before 990f3f475a --- src/Expr/ClosureExpressionVisitor.php | 6 ++-- tests/ClosureExpressionVisitorTest.php | 46 -------------------------- 2 files changed, 2 insertions(+), 50 deletions(-) diff --git a/src/Expr/ClosureExpressionVisitor.php b/src/Expr/ClosureExpressionVisitor.php index fdf76eb..a397b4b 100644 --- a/src/Expr/ClosureExpressionVisitor.php +++ b/src/Expr/ClosureExpressionVisitor.php @@ -170,13 +170,11 @@ class ClosureExpressionVisitor extends ExpressionVisitor $aValue = ClosureExpressionVisitor::getObjectFieldValue($a, $name, $accessRawFieldValues); $bValue = ClosureExpressionVisitor::getObjectFieldValue($b, $name, $accessRawFieldValues); - $comparison = $aValue <=> $bValue; - - if ($comparison === 0) { + if ($aValue === $bValue) { return $next($a, $b); } - return $comparison * $orientation; + return ($aValue > $bValue ? 1 : -1) * $orientation; }; } diff --git a/tests/ClosureExpressionVisitorTest.php b/tests/ClosureExpressionVisitorTest.php index 764b304..182f783 100644 --- a/tests/ClosureExpressionVisitorTest.php +++ b/tests/ClosureExpressionVisitorTest.php @@ -6,7 +6,6 @@ namespace Doctrine\Tests\Common\Collections; use ArrayAccess; use ArrayIterator; -use DateTimeImmutable; use Doctrine\Common\Collections\Expr\ClosureExpressionVisitor; use Doctrine\Common\Collections\Expr\Comparison; use Doctrine\Common\Collections\Expr\CompositeExpression; @@ -488,51 +487,6 @@ class ClosureExpressionVisitorTest extends TestCase self::assertEquals('c', $objects[2]->getBar()); } - public function testSortDelegateWithEqualButNotIdenticalObjectPrimaryField(): void - { - // Value-equal but not identical primary values must still fall through to - // the secondary field. - $sameInstant = static fn (): DateTimeImmutable => new DateTimeImmutable('2024-12-10 16:04:11'); - - $objects = [ - new TestObject($sameInstant(), 5), - new TestObject($sameInstant(), 6), - ]; - - self::assertNotSame($objects[0]->getFoo(), $objects[1]->getFoo()); - self::assertEquals($objects[0]->getFoo(), $objects[1]->getFoo()); - - $sort = ClosureExpressionVisitor::sortByField('bar', -1, null, true); - $sort = ClosureExpressionVisitor::sortByField('foo', -1, $sort, true); - - usort($objects, $sort); - - self::assertEquals(6, $objects[0]->getBar()); - self::assertEquals(5, $objects[1]->getBar()); - } - - public function testSortByFieldComparatorIsAntisymmetricForEqualButNotIdenticalObjects(): void - { - // Swapping the input order of two value-equal elements must not change - // which one sorts first. - $sameInstant = static fn (): DateTimeImmutable => new DateTimeImmutable('2024-12-10 16:04:11'); - - $element5 = new TestObject($sameInstant(), 5); - $element6 = new TestObject($sameInstant(), 6); - - $sort = ClosureExpressionVisitor::sortByField('bar', -1, null, true); - $sort = ClosureExpressionVisitor::sortByField('foo', -1, $sort, true); - - $orderedFromAscendingInput = [$element5, $element6]; - usort($orderedFromAscendingInput, $sort); - - $orderedFromDescendingInput = [$element6, $element5]; - usort($orderedFromDescendingInput, $sort); - - self::assertEquals(6, $orderedFromAscendingInput[0]->getBar()); - self::assertEquals(6, $orderedFromDescendingInput[0]->getBar()); - } - public function testArrayComparison(): void { $closure = $this->visitor->walkComparison($this->builder->eq('foo', 42));