['A', 1], 'Mismatched sortIndex count' => [[1, 2, 3, 4], 1], 'Non-numeric sortOrder' => [[1, 2, 3], 'A'], 'Invalid negative sortOrder' => [[1, 2, 3], -2], 'Zero sortOrder' => [[1, 2, 3], 0], 'Invalid positive sortOrder' => [[1, 2, 3], 2], ]; } /** * @dataProvider providerSortByRow */ public function testSortByRow(array $expectedResult, array $matrix, ...$args): void { $result = Sort::sortBy($matrix, ...$args); self::assertSame($expectedResult, $result); } public function providerSortByRow(): array { return [ 'Simple sort by age' => [ [ ['Fritz', 19], ['Xi', 19], ['Amy', 22], ['Srivan', 39], ['Tom', 52], ['Fred', 65], ['Hector', 66], ['Sal', 73], ], $this->sampleDataForSimpleSort(), array_column($this->sampleDataForSimpleSort(), 1), ], 'Simple sort by name' => [ [ ['Amy', 22], ['Fred', 65], ['Fritz', 19], ['Hector', 66], ['Sal', 73], ['Srivan', 39], ['Tom', 52], ['Xi', 19], ], $this->sampleDataForSimpleSort(), array_column($this->sampleDataForSimpleSort(), 0), ], 'Row vector' => [ [ ['Amy', 22], ['Fred', 65], ['Fritz', 19], ['Hector', 66], ['Sal', 73], ['Srivan', 39], ['Tom', 52], ['Xi', 19], ], $this->sampleDataForSimpleSort(), ['Tom', 'Fred', 'Amy', 'Sal', 'Fritz', 'Srivan', 'Xi', 'Hector'], ], 'Column vector' => [ [ ['Amy', 22], ['Fred', 65], ['Fritz', 19], ['Hector', 66], ['Sal', 73], ['Srivan', 39], ['Tom', 52], ['Xi', 19], ], $this->sampleDataForSimpleSort(), [['Tom'], ['Fred'], ['Amy'], ['Sal'], ['Fritz'], ['Srivan'], ['Xi'], ['Hector']], ], 'Sort by region asc, name asc' => [ [ ['East', 'Fritz', 19], ['East', 'Tom', 52], ['North', 'Amy', 22], ['North', 'Xi', 19], ['South', 'Hector', 66], ['South', 'Sal', 73], ['West', 'Fred', 65], ['West', 'Srivan', 39], ], $this->sampleDataForMultiSort(), array_column($this->sampleDataForMultiSort(), 0), Sort::ORDER_ASCENDING, array_column($this->sampleDataForMultiSort(), 1), ], 'Sort by region asc, age desc' => [ [ ['East', 'Tom', 52], ['East', 'Fritz', 19], ['North', 'Amy', 22], ['North', 'Xi', 19], ['South', 'Sal', 73], ['South', 'Hector', 66], ['West', 'Fred', 65], ['West', 'Srivan', 39], ], $this->sampleDataForMultiSort(), array_column($this->sampleDataForMultiSort(), 0), Sort::ORDER_ASCENDING, array_column($this->sampleDataForMultiSort(), 2), Sort::ORDER_DESCENDING, ], ]; } private function sampleDataForSimpleSort(): array { return [ ['Tom', 52], ['Fred', 65], ['Amy', 22], ['Sal', 73], ['Fritz', 19], ['Srivan', 39], ['Xi', 19], ['Hector', 66], ]; } private function sampleDataForMultiSort(): array { return [ ['North', 'Amy', 22], ['West', 'Fred', 65], ['East', 'Fritz', 19], ['South', 'Hector', 66], ['South', 'Sal', 73], ['West', 'Srivan', 39], ['East', 'Tom', 52], ['North', 'Xi', 19], ]; } }