toBe(11); $coll = new Collection($arr); expect($coll->count())->toBe(11); expect($coll->first())->toBe(0); expect($coll->last())->toBe(10); $filt = $coll->filter(function($item){ return $item<5;}); expect($filt)->toBeInstanceOf(Collection::class); expect($filt->count())->toBe(5); expect($filt->first())->toBe(0); expect($filt->last())->toBe(4); // no change in initial collection expect($coll->count())->toBe(11); expect($coll->empty())->toBe(false); expect($coll->items())->toBeArray(); expect(count($coll->items()))->toBe(11); $incr = 0; $coll->each(function($item) use(&$incr){ $incr++; }); expect($incr)->toBe(11); $colmap = $coll->map(function($item) { return $item+1; }); expect($colmap)->toBeInstanceOf(Collection::class); expect($colmap->count())->toBe(11); expect($colmap->first())->toBe(1); expect($colmap->last())->toBe(11); $init = 0; $reduce = $coll->reduce(function($item,$carry){ return $item + $carry; },$init); expect($reduce)->toBe(55); });