Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ public function _enumerate(
$pool_deficit = ($count + $this->overfetch_count) - count($pool);
if ($pool_deficit > 0) {
// need to refill!
$refill_result = $this->inner->enumerate($pool_deficit, $inner_cursor, $tracer);
$refill_result = $this->inner->enumerate($pool_deficit, $inner_cursor, $tracer, $option);
$refill_elements = $refill_result->get_elements();
$inner_cursor = $refill_result->get_combined_cursor();
$pool = array_merge($pool, $refill_elements);
Expand Down
4 changes: 2 additions & 2 deletions lib/Tumblr/StreamBuilder/Streams/FilteredStream.php
Original file line number Diff line number Diff line change
Expand Up @@ -202,14 +202,14 @@ private function _filter_rec(

// if we got nothing, abort. we can't recurse because the cursor would be unchanged:
if ($inner_result->get_size() == 0) {
$tracer and $tracer->filter_abort($this, $want_count, $inner_cursor, $depth);
$tracer && $tracer->filter_abort($this, $want_count, $inner_cursor, $depth);
$propagated_is_exhaustive = true;
return new StreamResult(true, []);
}

// we got some stuff, run the filter on it:
$filter_result = $this->filter->filter($inner_result->get_elements(), $filter_state, $tracer);
$tracer and $tracer->filter_apply($this, $inner_result->get_size(), $filter_result);
$tracer && $tracer->filter_apply($this, $inner_result->get_size(), $filter_result);

// we only care about the retained elements
$retained = $filter_result->get_retained();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
use Test\Tumblr\StreamBuilder\StreamElements\MockMaxStreamElement;
use Test\Tumblr\StreamBuilder\StreamRankers\DummyStreamRanker;
use Tumblr\StreamBuilder\CacheProvider;
use Tumblr\StreamBuilder\EnumerationOptions\EnumerationPreFilteringOptions;
use Tumblr\StreamBuilder\Exceptions\InappropriateCursorException;
use Tumblr\StreamBuilder\StreamContext;
use Tumblr\StreamBuilder\StreamCursors\MultiCursor;
Expand Down Expand Up @@ -143,4 +144,30 @@ public function test_from_template(array $template)
$context = new StreamContext($template, []);
$this->assertSame($template, BufferedRankedStream::from_template($context)->to_template());
}

/**
* Test that enumerate passes the enumeration options to the inner stream when refilling the buffer.
*/
public function test_enumerate_passes_option_to_inner_stream()
{
$e1 = new MockMaxStreamElement(1, 'p1', new MockMaxCursor(1));
$option = new EnumerationPreFilteringOptions([42], null, null);

/** @var StreamRanker|\PHPUnit\Framework\MockObject\MockObject $ranker */
$ranker = $this->getMockBuilder(StreamRanker::class)->disableOriginalConstructor()->getMockForAbstractClass();
$ranker->method('rank_inner')->willReturn([$e1]);

/** @var Stream|\PHPUnit\Framework\MockObject\MockObject $inner_stream */
$inner_stream = $this->getMockBuilder(Stream::class)->disableOriginalConstructor()->getMockForAbstractClass();
$inner_stream->expects($this->once())
->method('_enumerate')
->with(4, null, null, $this->identicalTo($option))
->willReturn(new StreamResult(true, [$e1]));

/** @var CacheProvider|\PHPUnit\Framework\MockObject\MockObject $cache_provider */
$cache_provider = $this->getMockBuilder(CacheProvider::class)->disableOriginalConstructor()->getMockForAbstractClass();

$ranked_stream = new BufferedRankedStream($inner_stream, $ranker, 3, 'amazing_ranked_stream', $cache_provider);
$ranked_stream->enumerate(1, null, null, $option);
}
}
Loading