blob: 9fa0714c442764d0652c5fc94ccb64e7d0530bf4 [file] [log] [blame]
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
use strict;
use warnings;
use Test::More tests => 5;
use Lucy::Test;
use LucyX::Search::MockMatcher;
my @docs = ( 1, 5, 10, 1000 );
my @scores = ( 2, 0, 0, 1 );
my $collector = Lucy::Search::Collector::SortCollector->new( wanted => 3 );
test_collect($collector);
my @got = map { $_->get_score } @{ $collector->pop_match_docs };
is_deeply( \@got, [ 2, 1, 0 ], "collect into HitQueue" );
$collector = Lucy::Search::Collector::SortCollector->new( wanted => 0 );
test_collect($collector);
is( $collector->get_total_hits, 4,
"get_total_hits is accurate when no hits are requested" );
my $match_docs = $collector->pop_match_docs;
is( scalar @$match_docs, 0, "no hits wanted, so no hits returned" );
my $bit_vec = Lucy::Object::BitVector->new;
$collector
= Lucy::Search::Collector::BitCollector->new( bit_vector => $bit_vec );
test_collect($collector);
is_deeply(
$bit_vec->to_arrayref,
[ 1, 5, 10, 1000 ],
"BitCollector collects the right doc nums"
);
$bit_vec = Lucy::Object::BitVector->new;
my $inner_coll
= Lucy::Search::Collector::BitCollector->new( bit_vector => $bit_vec );
my $offset_coll = Lucy::Search::Collector::OffsetCollector->new(
collector => $inner_coll,
offset => 10,
);
test_collect($offset_coll);
is_deeply( $bit_vec->to_arrayref, [ 11, 15, 20, 1010 ], "Offset collector" );
sub test_collect {
my $collector = shift;
my $matcher = LucyX::Search::MockMatcher->new(
doc_ids => \@docs,
scores => \@scores,
);
$collector->set_matcher($matcher);
while ( my $doc_id = $matcher->next ) {
$collector->collect($doc_id);
}
}