| Akron | 5f52153 | 2016-10-21 19:30:23 +0200 | [diff] [blame] | 1 | use Test::More; |
| Akron | e020194 | 2016-11-26 01:11:31 +0100 | [diff] [blame] | 2 | use Test::Krawfish; |
| Akron | 5f52153 | 2016-10-21 19:30:23 +0200 | [diff] [blame] | 3 | use strict; |
| 4 | use warnings; |
| Akron | 5f52153 | 2016-10-21 19:30:23 +0200 | [diff] [blame] | 5 | |
| Akron | 5f52153 | 2016-10-21 19:30:23 +0200 | [diff] [blame] | 6 | use_ok('Krawfish::Index'); |
| Akron | 573e7ec | 2016-11-05 19:03:01 +0100 | [diff] [blame] | 7 | use_ok('Krawfish::Koral::Query::Builder'); |
| Akron | 5f52153 | 2016-10-21 19:30:23 +0200 | [diff] [blame] | 8 | |
| Akron | 6ccf810 | 2016-10-26 12:41:07 +0200 | [diff] [blame] | 9 | my $index = Krawfish::Index->new; |
| Akron | 5f52153 | 2016-10-21 19:30:23 +0200 | [diff] [blame] | 10 | |
| Akron | 9ca7cee | 2016-10-23 13:46:44 +0200 | [diff] [blame] | 11 | # Der alte Mann ging über die Straße. Er trug einen lustigen Hut |
| Akron | dbd8bf3 | 2017-08-16 13:52:07 +0200 | [diff] [blame] | 12 | ok_index_file($index, 'doc1.jsonld', 'Add new document'); |
| Akron | 9ca7cee | 2016-10-23 13:46:44 +0200 | [diff] [blame] | 13 | # Der Hut stand dem jungen Mann sehr gut. Er betrachtete sich gern im Spiegel. |
| Akron | dbd8bf3 | 2017-08-16 13:52:07 +0200 | [diff] [blame] | 14 | ok_index_file($index, 'doc2.jsonld', 'Add new document'); |
| Akron | 5f52153 | 2016-10-21 19:30:23 +0200 | [diff] [blame] | 15 | |
| Akron | 573e7ec | 2016-11-05 19:03:01 +0100 | [diff] [blame] | 16 | ok(my $qb = Krawfish::Koral::Query::Builder->new, 'Create QueryBuilder'); |
| Akron | 5f52153 | 2016-10-21 19:30:23 +0200 | [diff] [blame] | 17 | |
| Akron | 573e7ec | 2016-11-05 19:03:01 +0100 | [diff] [blame] | 18 | ok(my $wrap = $qb->seq($qb->token('sehr'), $qb->token('gut')), 'Seq'); |
| Akron | 17f3adb | 2017-08-02 20:55:00 +0200 | [diff] [blame] | 19 | ok(my $seq = $wrap->normalize->finalize->identify($index->dict)->optimize($index->segment), 'Rewrite'); |
| Akron | 5f52153 | 2016-10-21 19:30:23 +0200 | [diff] [blame] | 20 | |
| Akron | c3657bf | 2016-10-31 00:15:43 +0100 | [diff] [blame] | 21 | ok($seq->next, 'More'); |
| Akron | 5f52153 | 2016-10-21 19:30:23 +0200 | [diff] [blame] | 22 | is($seq->current->to_string, '[1:6-8]', 'Match'); |
| 23 | ok(!$seq->next, 'No more'); |
| 24 | |
| Akron | 56422cf | 2017-08-16 14:17:01 +0200 | [diff] [blame^] | 25 | ok_index($index, [qw/aa bb aa bb/], 'Add new document'); |
| Akron | 5f52153 | 2016-10-21 19:30:23 +0200 | [diff] [blame] | 26 | |
| Akron | 573e7ec | 2016-11-05 19:03:01 +0100 | [diff] [blame] | 27 | ok($wrap = $qb->seq($qb->token('aa'), $qb->token('bb')), 'Seq'); |
| Akron | 17f3adb | 2017-08-02 20:55:00 +0200 | [diff] [blame] | 28 | ok($seq = $wrap->normalize->finalize->identify($index->dict)->optimize($index->segment), 'Rewrite'); |
| Akron | 573e7ec | 2016-11-05 19:03:01 +0100 | [diff] [blame] | 29 | |
| Akron | 5f52153 | 2016-10-21 19:30:23 +0200 | [diff] [blame] | 30 | ok($seq->next, 'Init'); |
| 31 | is($seq->current->to_string, '[2:0-2]', 'Match'); |
| Akron | 5f52153 | 2016-10-21 19:30:23 +0200 | [diff] [blame] | 32 | ok($seq->next, 'More'); |
| 33 | is($seq->current->to_string, '[2:2-4]', 'Match'); |
| 34 | ok(!$seq->next, 'No more'); |
| 35 | |
| Akron | 7dbf544 | 2016-10-28 12:50:38 +0200 | [diff] [blame] | 36 | # Reset index - situation [aa]..[bb] -> [aa][bb] |
| 37 | $index = Krawfish::Index->new; |
| Akron | 56422cf | 2017-08-16 14:17:01 +0200 | [diff] [blame^] | 38 | ok_index($index, '[aa][cc][aa][bb]', 'Add complex document'); |
| Akron | 573e7ec | 2016-11-05 19:03:01 +0100 | [diff] [blame] | 39 | ok($qb = Krawfish::Koral::Query::Builder->new, 'Create QueryBuilder'); |
| 40 | ok($wrap = $qb->seq($qb->token('aa'), $qb->token('bb')), 'Seq'); |
| Akron | 17f3adb | 2017-08-02 20:55:00 +0200 | [diff] [blame] | 41 | ok($seq = $wrap->normalize->finalize->identify($index->dict)->optimize($index->segment), 'Rewrite'); |
| Akron | e020194 | 2016-11-26 01:11:31 +0100 | [diff] [blame] | 42 | matches($seq, [qw/[0:2-4]/]); |
| Akron | 7dbf544 | 2016-10-28 12:50:38 +0200 | [diff] [blame] | 43 | |
| 44 | # Reset index - situation [bb][aa] -> [aa][bb] |
| 45 | $index = Krawfish::Index->new; |
| Akron | 56422cf | 2017-08-16 14:17:01 +0200 | [diff] [blame^] | 46 | ok_index($index, '[bb][aa][bb][aa]', 'Add complex document'); |
| Akron | 573e7ec | 2016-11-05 19:03:01 +0100 | [diff] [blame] | 47 | ok($qb = Krawfish::Koral::Query::Builder->new, 'Create QueryBuilder'); |
| 48 | ok($wrap = $qb->seq($qb->token('aa'), $qb->token('bb')), 'Seq'); |
| Akron | 17f3adb | 2017-08-02 20:55:00 +0200 | [diff] [blame] | 49 | ok($seq = $wrap->normalize->finalize->identify($index->dict)->optimize($index->segment), 'Rewrite'); |
| Akron | e020194 | 2016-11-26 01:11:31 +0100 | [diff] [blame] | 50 | matches($seq, [qw/[0:1-3]/]); |
| Akron | 7dbf544 | 2016-10-28 12:50:38 +0200 | [diff] [blame] | 51 | |
| 52 | |
| 53 | # Reset index - situation [aa]..[bb] -> [aa][bb] |
| 54 | $index = Krawfish::Index->new; |
| Akron | 56422cf | 2017-08-16 14:17:01 +0200 | [diff] [blame^] | 55 | ok_index($index, '[aa][cc][aa][bb]', 'Add complex document'); |
| Akron | 573e7ec | 2016-11-05 19:03:01 +0100 | [diff] [blame] | 56 | ok($qb = Krawfish::Koral::Query::Builder->new, 'Create QueryBuilder'); |
| 57 | ok($wrap = $qb->seq($qb->token('aa'), $qb->token('bb')), 'Seq'); |
| Akron | 17f3adb | 2017-08-02 20:55:00 +0200 | [diff] [blame] | 58 | ok($seq = $wrap->normalize->finalize->identify($index->dict)->optimize($index->segment), 'Rewrite'); |
| Akron | e020194 | 2016-11-26 01:11:31 +0100 | [diff] [blame] | 59 | matches($seq, [qw/[0:2-4]/]); |
| Akron | 7dbf544 | 2016-10-28 12:50:38 +0200 | [diff] [blame] | 60 | |
| Akron | 060fc7d | 2017-07-18 02:04:55 +0200 | [diff] [blame] | 61 | |
| Akron | 7dbf544 | 2016-10-28 12:50:38 +0200 | [diff] [blame] | 62 | # Reset index - situation [bb]..[aa] -> [aa][bb] |
| 63 | $index = Krawfish::Index->new; |
| Akron | 56422cf | 2017-08-16 14:17:01 +0200 | [diff] [blame^] | 64 | ok_index($index, '[bb][cc][aa][bb]', 'Add complex document'); |
| Akron | 573e7ec | 2016-11-05 19:03:01 +0100 | [diff] [blame] | 65 | ok($qb = Krawfish::Koral::Query::Builder->new, 'Create QueryBuilder'); |
| 66 | ok($wrap = $qb->seq($qb->token('aa'), $qb->token('bb')), 'Seq'); |
| Akron | 17f3adb | 2017-08-02 20:55:00 +0200 | [diff] [blame] | 67 | ok($seq = $wrap->normalize->finalize->identify($index->dict)->optimize($index->segment), 'Rewrite'); |
| Akron | e020194 | 2016-11-26 01:11:31 +0100 | [diff] [blame] | 68 | matches($seq, [qw/[0:2-4]/]); |
| Akron | 7dbf544 | 2016-10-28 12:50:38 +0200 | [diff] [blame] | 69 | |
| 70 | |
| 71 | # Multiple matches |
| Akron | 6ccf810 | 2016-10-26 12:41:07 +0200 | [diff] [blame] | 72 | # Reset index |
| 73 | $index = Krawfish::Index->new; |
| Akron | 56422cf | 2017-08-16 14:17:01 +0200 | [diff] [blame^] | 74 | ok_index($index, '[aa|aa][bb|bb]', 'Add complex document'); |
| Akron | 573e7ec | 2016-11-05 19:03:01 +0100 | [diff] [blame] | 75 | ok($qb = Krawfish::Koral::Query::Builder->new, 'Create QueryBuilder'); |
| 76 | ok($wrap = $qb->seq($qb->token('aa'), $qb->token('bb')), 'Seq'); |
| Akron | 17f3adb | 2017-08-02 20:55:00 +0200 | [diff] [blame] | 77 | ok($seq = $wrap->normalize->finalize->identify($index->dict)->optimize($index->segment), 'Rewrite'); |
| Akron | e020194 | 2016-11-26 01:11:31 +0100 | [diff] [blame] | 78 | matches($seq, [qw/[0:0-2] [0:0-2] [0:0-2] [0:0-2]/]); |
| Akron | 6ccf810 | 2016-10-26 12:41:07 +0200 | [diff] [blame] | 79 | |
| Akron | 060fc7d | 2017-07-18 02:04:55 +0200 | [diff] [blame] | 80 | |
| Akron | 6ccf810 | 2016-10-26 12:41:07 +0200 | [diff] [blame] | 81 | # Reset index |
| 82 | $index = Krawfish::Index->new; |
| Akron | 56422cf | 2017-08-16 14:17:01 +0200 | [diff] [blame^] | 83 | ok_index($index, '[aa][bb|bb]', 'Add complex document'); |
| Akron | 573e7ec | 2016-11-05 19:03:01 +0100 | [diff] [blame] | 84 | ok($qb = Krawfish::Koral::Query::Builder->new, 'Create QueryBuilder'); |
| 85 | ok($wrap = $qb->seq($qb->token('aa'), $qb->token('bb')), 'Seq'); |
| Akron | 17f3adb | 2017-08-02 20:55:00 +0200 | [diff] [blame] | 86 | ok($seq = $wrap->normalize->finalize->identify($index->dict)->optimize($index->segment), 'Rewrite'); |
| Akron | 7dbf544 | 2016-10-28 12:50:38 +0200 | [diff] [blame] | 87 | # query language: [aa][bb] |
| Akron | e020194 | 2016-11-26 01:11:31 +0100 | [diff] [blame] | 88 | matches($seq, [qw/[0:0-2] [0:0-2]/]); |
| Akron | 6ccf810 | 2016-10-26 12:41:07 +0200 | [diff] [blame] | 89 | |
| Akron | 060fc7d | 2017-07-18 02:04:55 +0200 | [diff] [blame] | 90 | |
| Akron | 6ccf810 | 2016-10-26 12:41:07 +0200 | [diff] [blame] | 91 | # Reset index |
| 92 | $index = Krawfish::Index->new; |
| Akron | 56422cf | 2017-08-16 14:17:01 +0200 | [diff] [blame^] | 93 | ok_index($index, '[aa|aa][bb]', 'Add complex document'); |
| Akron | 573e7ec | 2016-11-05 19:03:01 +0100 | [diff] [blame] | 94 | ok($qb = Krawfish::Koral::Query::Builder->new, 'Create QueryBuilder'); |
| 95 | ok($wrap = $qb->seq($qb->token('aa'), $qb->token('bb')), 'Seq'); |
| Akron | 17f3adb | 2017-08-02 20:55:00 +0200 | [diff] [blame] | 96 | ok($seq = $wrap->normalize->finalize->identify($index->dict)->optimize($index->segment), 'Rewrite'); |
| Akron | e020194 | 2016-11-26 01:11:31 +0100 | [diff] [blame] | 97 | matches($seq, [qw/[0:0-2] [0:0-2]/]); |
| Akron | 6ccf810 | 2016-10-26 12:41:07 +0200 | [diff] [blame] | 98 | |
| Akron | 060fc7d | 2017-07-18 02:04:55 +0200 | [diff] [blame] | 99 | |
| Akron | 7dbf544 | 2016-10-28 12:50:38 +0200 | [diff] [blame] | 100 | # Reset index |
| 101 | $index = Krawfish::Index->new; |
| Akron | 56422cf | 2017-08-16 14:17:01 +0200 | [diff] [blame^] | 102 | ok_index($index, '[aa|aa][bb|bb][aa|aa][bb|bb]', 'Add complex document'); |
| Akron | 573e7ec | 2016-11-05 19:03:01 +0100 | [diff] [blame] | 103 | ok($qb = Krawfish::Koral::Query::Builder->new, 'Create QueryBuilder'); |
| 104 | ok($wrap = $qb->seq($qb->token('aa'), $qb->token('bb')), 'Seq'); |
| Akron | 17f3adb | 2017-08-02 20:55:00 +0200 | [diff] [blame] | 105 | ok($seq = $wrap->normalize->finalize->identify($index->dict)->optimize($index->segment), 'Rewrite'); |
| Akron | e020194 | 2016-11-26 01:11:31 +0100 | [diff] [blame] | 106 | matches($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]/]); |
| Akron | 7dbf544 | 2016-10-28 12:50:38 +0200 | [diff] [blame] | 107 | |
| 108 | |
| Akron | 6ccf810 | 2016-10-26 12:41:07 +0200 | [diff] [blame] | 109 | # Reset index |
| 110 | $index = Krawfish::Index->new; |
| Akron | 56422cf | 2017-08-16 14:17:01 +0200 | [diff] [blame^] | 111 | ok_index($index, '<1:aa><2:aa>[bb]</2>[bb]</1>', 'Add complex document'); |
| Akron | 573e7ec | 2016-11-05 19:03:01 +0100 | [diff] [blame] | 112 | ok($qb = Krawfish::Koral::Query::Builder->new, 'Create QueryBuilder'); |
| 113 | ok($wrap = $qb->seq($qb->span('aa'), $qb->token('bb')), 'Seq'); |
| 114 | is($wrap->to_string, '<aa>[bb]', 'Stringification'); |
| Akron | 17f3adb | 2017-08-02 20:55:00 +0200 | [diff] [blame] | 115 | ok($seq = $wrap->normalize->finalize->identify($index->dict)->optimize($index->segment), 'Rewrite'); |
| Akron | e020194 | 2016-11-26 01:11:31 +0100 | [diff] [blame] | 116 | matches($seq, [qw/[0:0-2]/]); |
| Akron | 7dbf544 | 2016-10-28 12:50:38 +0200 | [diff] [blame] | 117 | |
| 118 | |
| Akron | 5f52153 | 2016-10-21 19:30:23 +0200 | [diff] [blame] | 119 | |
| 120 | done_testing; |
| 121 | __END__ |
| Akron | 6ccf810 | 2016-10-26 12:41:07 +0200 | [diff] [blame] | 122 | |
| 123 | |