public function testCount() { $this->assertSame(5, count([1, 2, 3, 4, 5])); $this->assertSame(5, count(toIter([1, 2, 3, 4, 5]))); $this->assertSame(42, count(new _CountableTestDummy())); }
public function provideTestAssertIterableFails() { (yield [function () { _assertIterable(new \stdClass(), 'Argument'); }, 'Argument must be iterable']); (yield [function () { _assertIterable("foobar", 'Argument'); }, 'Argument must be iterable']); (yield [function () { _assertAllIterable([[], new \stdClass()]); }, 'Argument 2 must be iterable']); (yield [function () { return count(new \stdClass()); }, 'Argument must be iterable or implement Countable']); (yield [function () { return toIter(new \stdClass()); }, 'Argument must be iterable']); (yield [function () { return map(function ($v) { return $v; }, new \stdClass()); }, 'Second argument must be iterable']); (yield [function () { return chain([1], [2], new \stdClass()); }, 'Argument 3 must be iterable']); (yield [function () { return zip([1], [2], new \stdClass()); }, 'Argument 3 must be iterable']); }
/** * Combines an iterable for keys and another for values into one iterator. * * Examples: * * iter\zipKeyValue(['a', 'b', 'c'], [1, 2, 3]) * => iter('a' => 1, 'b' => 2, 'c' => 3) * * @param mixed $keys Iterable of keys * @param mixed $values Iterable of values * * @return \Iterator */ function zipKeyValue($keys, $values) { $keys = toIter($keys); $values = toIter($values); for ($keys->rewind(), $values->rewind(); $keys->valid() && $values->valid(); $keys->next(), $values->next()) { (yield $keys->current() => $values->current()); } }