The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;
use lib 'buildlib';

use Test::More tests => 3;
use KinoSearch::Test::TestUtils qw( create_index );

my @docs;
my @chars = ( 'a' .. 'z', 'B' .. 'E', 'G' .. 'Z' );
for ( 0 .. 1000 ) {
    my $content = '';
    for my $num_words ( 0 .. int( rand(20) ) ) {
        for my $num_chars ( 1 .. int( rand(10) ) ) {
            $content .= @chars[ rand(@chars) ];
        }
        $content .= ' ';
    }
    push @docs, "$content\n";
}
my $folder = create_index(
    ( 1 .. 1000 ),
    ( ("a") x 100 ),
    "Foo",
    @docs,
    "Foo",
    "A MAN",
    "A PLAN",
    "A CANAL",
    "PANAMA"
);
my $schema = KinoSearch::Test::TestSchema->new;

my $snapshot
    = KinoSearch::Index::Snapshot->new->read_file( folder => $folder );
my $segment = KinoSearch::Index::Segment->new( number => 1 );
$segment->read_file($folder);
my $lex_reader = KinoSearch::Index::DefaultLexiconReader->new(
    schema   => $schema,
    folder   => $folder,
    snapshot => $snapshot,
    segments => [$segment],
    seg_tick => 0,
);

my $lexicon = $lex_reader->lexicon( field => 'content' );
$lexicon->next;
my $last_text = $lexicon->get_term;
$lexicon->next;
my $current_text;
my $num_iters = 2;
while (1) {
    $current_text = $lexicon->get_term;
    last unless $current_text gt $last_text;
    last unless $lexicon->next;
    $num_iters++;
    $current_text = $last_text;
}
cmp_ok( $last_text, 'lt', $current_text, "term texts in sorted order" );

$lexicon->seek('A');
my $tinfo = $lexicon->get_term_info();
is( $tinfo->get_doc_freq, 3, "correct retrieval #1" );

$lexicon->seek('Foo');
$tinfo = $lexicon->get_term_info();
is( $tinfo->get_doc_freq, 2, "correct retrieval #2" );