}); }); describe("->reduce()", function () { it("reduces a collection down to a single value", function () { $collection = new Collection(['data' => [1, 2, 3]]); $filter = function ($memo, $item) { return $memo + $item; }; expect($collection->reduce($filter, 0))->toBe(6); expect($collection->reduce($filter, 1))->toBe(7); }); }); describe("->slice()", function () { it("extracts a slice of items", function () { $collection = new Collection(['data' => [1, 2, 3, 4, 5]]); $result = $collection->slice(2, 2); expect($result)->not->toBe($collection); expect($result->data())->toBe([3, 4]); }); }); describe("->sort()", function () { it("sorts a collection", function () { $collection = new Collection(['data' => [5, 3, 4, 1, 2]]); $result = $collection->sort(); expect($result->data())->toBe([1, 2, 3, 4, 5]); }); it("sorts a collection using a compare function", function () { $collection = new Collection(['data' => ['Alan', 'Dave', 'betsy', 'carl']]); $result = $collection->sort('strcasecmp'); expect($result->data())->toBe(['Alan', 'betsy', 'carl', 'Dave']); });