/** * @test */ public function shouldSortArrayByCompoundComparator() { //given $product1 = new Product(array('name' => 'b', 'description' => '2')); $product2 = new Product(array('name' => 'a', 'description' => '1')); $product3 = new Product(array('name' => 'a', 'description' => '2')); $array = array($product3, $product1, $product2); $comparator = Comparator::compound(Comparator::reverse(Comparator::compareBy('name')), Comparator::compareBy('description')); //when $sorted = Arrays::sort($array, $comparator); //then Assert::thatArray($sorted)->containsExactly($product1, $product2, $product3); }
/** * @test */ public function shouldNotUseFinalTieBreakerWhenAnyPriorResolves() { //given $alwaysLess = Functions::constant(-1); $alwaysGreater = Functions::constant(1); $alwaysEqual = Functions::constant(0); $greaterComparator = Comparator::compound($alwaysEqual, $alwaysGreater, $alwaysLess); $lesserComparator1 = Comparator::compound($alwaysEqual, $alwaysLess, $alwaysGreater); $lesserComparator2 = Comparator::compound($alwaysLess, $alwaysEqual, $alwaysEqual); //when $greater = $greaterComparator(null, null); $lesser1 = $lesserComparator1(null, null); $lesser2 = $lesserComparator2(null, null); //then $this->assertEquals(-1, $lesser1); $this->assertEquals(1, $greater); $this->assertEquals(-1, $lesser2); }