blob: 9e749cb848bee15f005831c750f5fcb5a1775cf7 [file] [log] [blame]
Akron5f521532016-10-21 19:30:23 +02001use Test::More;
Akrone0201942016-11-26 01:11:31 +01002use Test::Krawfish;
Akron5f521532016-10-21 19:30:23 +02003use strict;
4use warnings;
Akron5f521532016-10-21 19:30:23 +02005
Akron5f521532016-10-21 19:30:23 +02006use_ok('Krawfish::Index');
Akron573e7ec2016-11-05 19:03:01 +01007use_ok('Krawfish::Koral::Query::Builder');
Akron5f521532016-10-21 19:30:23 +02008
Akron6ccf8102016-10-26 12:41:07 +02009my $index = Krawfish::Index->new;
Akron5f521532016-10-21 19:30:23 +020010
Akron9ca7cee2016-10-23 13:46:44 +020011# Der alte Mann ging über die Straße. Er trug einen lustigen Hut
Akrondbd8bf32017-08-16 13:52:07 +020012ok_index_file($index, 'doc1.jsonld', 'Add new document');
Akron9ca7cee2016-10-23 13:46:44 +020013# Der Hut stand dem jungen Mann sehr gut. Er betrachtete sich gern im Spiegel.
Akrondbd8bf32017-08-16 13:52:07 +020014ok_index_file($index, 'doc2.jsonld', 'Add new document');
Akron5f521532016-10-21 19:30:23 +020015
Akron573e7ec2016-11-05 19:03:01 +010016ok(my $qb = Krawfish::Koral::Query::Builder->new, 'Create QueryBuilder');
Akron5f521532016-10-21 19:30:23 +020017
Akron573e7ec2016-11-05 19:03:01 +010018ok(my $wrap = $qb->seq($qb->token('sehr'), $qb->token('gut')), 'Seq');
Akron17f3adb2017-08-02 20:55:00 +020019ok(my $seq = $wrap->normalize->finalize->identify($index->dict)->optimize($index->segment), 'Rewrite');
Akron5f521532016-10-21 19:30:23 +020020
Akronc3657bf2016-10-31 00:15:43 +010021ok($seq->next, 'More');
Akron5f521532016-10-21 19:30:23 +020022is($seq->current->to_string, '[1:6-8]', 'Match');
23ok(!$seq->next, 'No more');
24
Akron56422cf2017-08-16 14:17:01 +020025ok_index($index, [qw/aa bb aa bb/], 'Add new document');
Akron5f521532016-10-21 19:30:23 +020026
Akron573e7ec2016-11-05 19:03:01 +010027ok($wrap = $qb->seq($qb->token('aa'), $qb->token('bb')), 'Seq');
Akron17f3adb2017-08-02 20:55:00 +020028ok($seq = $wrap->normalize->finalize->identify($index->dict)->optimize($index->segment), 'Rewrite');
Akron573e7ec2016-11-05 19:03:01 +010029
Akron5f521532016-10-21 19:30:23 +020030ok($seq->next, 'Init');
31is($seq->current->to_string, '[2:0-2]', 'Match');
Akron5f521532016-10-21 19:30:23 +020032ok($seq->next, 'More');
33is($seq->current->to_string, '[2:2-4]', 'Match');
34ok(!$seq->next, 'No more');
35
Akron7dbf5442016-10-28 12:50:38 +020036# Reset index - situation [aa]..[bb] -> [aa][bb]
37$index = Krawfish::Index->new;
Akron56422cf2017-08-16 14:17:01 +020038ok_index($index, '[aa][cc][aa][bb]', 'Add complex document');
Akron573e7ec2016-11-05 19:03:01 +010039ok($qb = Krawfish::Koral::Query::Builder->new, 'Create QueryBuilder');
40ok($wrap = $qb->seq($qb->token('aa'), $qb->token('bb')), 'Seq');
Akron17f3adb2017-08-02 20:55:00 +020041ok($seq = $wrap->normalize->finalize->identify($index->dict)->optimize($index->segment), 'Rewrite');
Akrone0201942016-11-26 01:11:31 +010042matches($seq, [qw/[0:2-4]/]);
Akron7dbf5442016-10-28 12:50:38 +020043
44# Reset index - situation [bb][aa] -> [aa][bb]
45$index = Krawfish::Index->new;
Akron56422cf2017-08-16 14:17:01 +020046ok_index($index, '[bb][aa][bb][aa]', 'Add complex document');
Akron573e7ec2016-11-05 19:03:01 +010047ok($qb = Krawfish::Koral::Query::Builder->new, 'Create QueryBuilder');
48ok($wrap = $qb->seq($qb->token('aa'), $qb->token('bb')), 'Seq');
Akron17f3adb2017-08-02 20:55:00 +020049ok($seq = $wrap->normalize->finalize->identify($index->dict)->optimize($index->segment), 'Rewrite');
Akrone0201942016-11-26 01:11:31 +010050matches($seq, [qw/[0:1-3]/]);
Akron7dbf5442016-10-28 12:50:38 +020051
52
53# Reset index - situation [aa]..[bb] -> [aa][bb]
54$index = Krawfish::Index->new;
Akron56422cf2017-08-16 14:17:01 +020055ok_index($index, '[aa][cc][aa][bb]', 'Add complex document');
Akron573e7ec2016-11-05 19:03:01 +010056ok($qb = Krawfish::Koral::Query::Builder->new, 'Create QueryBuilder');
57ok($wrap = $qb->seq($qb->token('aa'), $qb->token('bb')), 'Seq');
Akron17f3adb2017-08-02 20:55:00 +020058ok($seq = $wrap->normalize->finalize->identify($index->dict)->optimize($index->segment), 'Rewrite');
Akrone0201942016-11-26 01:11:31 +010059matches($seq, [qw/[0:2-4]/]);
Akron7dbf5442016-10-28 12:50:38 +020060
Akron060fc7d2017-07-18 02:04:55 +020061
Akron7dbf5442016-10-28 12:50:38 +020062# Reset index - situation [bb]..[aa] -> [aa][bb]
63$index = Krawfish::Index->new;
Akron56422cf2017-08-16 14:17:01 +020064ok_index($index, '[bb][cc][aa][bb]', 'Add complex document');
Akron573e7ec2016-11-05 19:03:01 +010065ok($qb = Krawfish::Koral::Query::Builder->new, 'Create QueryBuilder');
66ok($wrap = $qb->seq($qb->token('aa'), $qb->token('bb')), 'Seq');
Akron17f3adb2017-08-02 20:55:00 +020067ok($seq = $wrap->normalize->finalize->identify($index->dict)->optimize($index->segment), 'Rewrite');
Akrone0201942016-11-26 01:11:31 +010068matches($seq, [qw/[0:2-4]/]);
Akron7dbf5442016-10-28 12:50:38 +020069
70
71# Multiple matches
Akron6ccf8102016-10-26 12:41:07 +020072# Reset index
73$index = Krawfish::Index->new;
Akron56422cf2017-08-16 14:17:01 +020074ok_index($index, '[aa|aa][bb|bb]', 'Add complex document');
Akron573e7ec2016-11-05 19:03:01 +010075ok($qb = Krawfish::Koral::Query::Builder->new, 'Create QueryBuilder');
76ok($wrap = $qb->seq($qb->token('aa'), $qb->token('bb')), 'Seq');
Akron17f3adb2017-08-02 20:55:00 +020077ok($seq = $wrap->normalize->finalize->identify($index->dict)->optimize($index->segment), 'Rewrite');
Akrone0201942016-11-26 01:11:31 +010078matches($seq, [qw/[0:0-2] [0:0-2] [0:0-2] [0:0-2]/]);
Akron6ccf8102016-10-26 12:41:07 +020079
Akron060fc7d2017-07-18 02:04:55 +020080
Akron6ccf8102016-10-26 12:41:07 +020081# Reset index
82$index = Krawfish::Index->new;
Akron56422cf2017-08-16 14:17:01 +020083ok_index($index, '[aa][bb|bb]', 'Add complex document');
Akron573e7ec2016-11-05 19:03:01 +010084ok($qb = Krawfish::Koral::Query::Builder->new, 'Create QueryBuilder');
85ok($wrap = $qb->seq($qb->token('aa'), $qb->token('bb')), 'Seq');
Akron17f3adb2017-08-02 20:55:00 +020086ok($seq = $wrap->normalize->finalize->identify($index->dict)->optimize($index->segment), 'Rewrite');
Akron7dbf5442016-10-28 12:50:38 +020087# query language: [aa][bb]
Akrone0201942016-11-26 01:11:31 +010088matches($seq, [qw/[0:0-2] [0:0-2]/]);
Akron6ccf8102016-10-26 12:41:07 +020089
Akron060fc7d2017-07-18 02:04:55 +020090
Akron6ccf8102016-10-26 12:41:07 +020091# Reset index
92$index = Krawfish::Index->new;
Akron56422cf2017-08-16 14:17:01 +020093ok_index($index, '[aa|aa][bb]', 'Add complex document');
Akron573e7ec2016-11-05 19:03:01 +010094ok($qb = Krawfish::Koral::Query::Builder->new, 'Create QueryBuilder');
95ok($wrap = $qb->seq($qb->token('aa'), $qb->token('bb')), 'Seq');
Akron17f3adb2017-08-02 20:55:00 +020096ok($seq = $wrap->normalize->finalize->identify($index->dict)->optimize($index->segment), 'Rewrite');
Akrone0201942016-11-26 01:11:31 +010097matches($seq, [qw/[0:0-2] [0:0-2]/]);
Akron6ccf8102016-10-26 12:41:07 +020098
Akron060fc7d2017-07-18 02:04:55 +020099
Akron7dbf5442016-10-28 12:50:38 +0200100# Reset index
101$index = Krawfish::Index->new;
Akron56422cf2017-08-16 14:17:01 +0200102ok_index($index, '[aa|aa][bb|bb][aa|aa][bb|bb]', 'Add complex document');
Akron573e7ec2016-11-05 19:03:01 +0100103ok($qb = Krawfish::Koral::Query::Builder->new, 'Create QueryBuilder');
104ok($wrap = $qb->seq($qb->token('aa'), $qb->token('bb')), 'Seq');
Akron17f3adb2017-08-02 20:55:00 +0200105ok($seq = $wrap->normalize->finalize->identify($index->dict)->optimize($index->segment), 'Rewrite');
Akrone0201942016-11-26 01:11:31 +0100106matches($seq, [qw/[0:0-2] [0:0-2] [0:0-2] [0:0-2] [0:2-4] [0:2-4] [0:2-4] [0:2-4]/]);
Akron7dbf5442016-10-28 12:50:38 +0200107
108
Akron6ccf8102016-10-26 12:41:07 +0200109# Reset index
110$index = Krawfish::Index->new;
Akron56422cf2017-08-16 14:17:01 +0200111ok_index($index, '<1:aa><2:aa>[bb]</2>[bb]</1>', 'Add complex document');
Akron573e7ec2016-11-05 19:03:01 +0100112ok($qb = Krawfish::Koral::Query::Builder->new, 'Create QueryBuilder');
113ok($wrap = $qb->seq($qb->span('aa'), $qb->token('bb')), 'Seq');
114is($wrap->to_string, '<aa>[bb]', 'Stringification');
Akron17f3adb2017-08-02 20:55:00 +0200115ok($seq = $wrap->normalize->finalize->identify($index->dict)->optimize($index->segment), 'Rewrite');
Akrone0201942016-11-26 01:11:31 +0100116matches($seq, [qw/[0:0-2]/]);
Akron7dbf5442016-10-28 12:50:38 +0200117
118
Akron5f521532016-10-21 19:30:23 +0200119
120done_testing;
121__END__
Akron6ccf8102016-10-26 12:41:07 +0200122
123