File: 506-collector.t

package info (click to toggle)
liblucy-perl 0.3.3-4
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 9,328 kB
  • ctags: 8,492
  • sloc: ansic: 80,468; perl: 7,080; yacc: 681; java: 174; lex: 96; makefile: 20
file content (69 lines) | stat: -rw-r--r-- 2,407 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# 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);
    }
}