public static function range($low = null, $high = null) { if ($low === null) { $low = 1; } if ($low == $high) { return Stream::make($low); } return new Stream($low, function () use($low, $high) { return Stream::range($low + 1, $high); }); }
public function test_scale_multiplies_stream_by_constant() { $capture = function ($x) use(&$vals) { $vals[] = $x; }; $s = Stream::range(1, 3); $m = $s->scale(10); $vals = array(); $m->walk($capture); $this->assertEquals(array(10, 20, 30), $vals); $vals = array(); $s->add($m)->walk($capture); $this->assertEquals(array(11, 22, 33), $vals); }
/** * an absolutely necessary unit test */ function test_eratosthenes_sieve() { $capture = function ($x) use(&$vals) { $vals[] = $x; }; function sieve($s) { $h = $s->head(); return new Stream($h, function () use($h, $s) { return sieve($s->tail()->filter(function ($x) use($h) { return $x % $h != 0; })); }); } $vals = array(); sieve(Stream::range(2))->take(10)->walk($capture); $this->assertEquals(array(2, 3, 5, 7, 11, 13, 17, 19, 23, 29), $vals); }