public function testFlatten()
{
$this->assertEquals([1, 2, 3, 4, 5, 6, 7, 8, 9], flatten([[1, 2, 3], [4, 5, 6], [7, 8, 9]]));
$this->assertEquals([1, 2, 3, 4, 5, 6, 7, 8, 9], flatten(new \ArrayIterator([[1, 2, 3], new \ArrayIterator([4, 5, 6]), [7, 8, 9]])));
$this->assertEquals([1, 2, 3, 4, 5, 6, 7, 8, 9], flatten([[1, [2, [3]]], [[[4, 5, 6]]], 7, 8, [9]]));
$this->assertEquals([1, [2, [3]], [[4, 5, 6]], 7, 8, 9], flatten([[1, [2, [3]]], [[[4, 5, 6]]], 7, 8, [9]], 1));
$this->assertEquals([1, 2, [3], [4, 5, 6], 7, 8, 9], flatten([[1, [2, [3]]], [[[4, 5, 6]]], 7, 8, [9]], 2));
$this->assertEquals([1], flatten([1]));
$this->assertEquals([], flatten([]));
$this->assertEquals([1, 2, 3, 4, 5, 6, 7, 8, 9], call_user_func(flatten, [[1, 2, 3], [4, 5, 6], [7, 8, 9]]));
$this->assertEquals('\\nspl\\a\\flatten', flatten);
}