| Akron | 4763ea6 | 2016-11-02 19:36:18 +0100 | [diff] [blame] | 1 | use Test::More; |
| Akron | e020194 | 2016-11-26 01:11:31 +0100 | [diff] [blame] | 2 | use Test::Krawfish; |
| Akron | 4763ea6 | 2016-11-02 19:36:18 +0100 | [diff] [blame] | 3 | use strict; |
| 4 | use warnings; |
| Akron | 4763ea6 | 2016-11-02 19:36:18 +0100 | [diff] [blame] | 5 | |
| 6 | use_ok('Krawfish::Koral'); |
| 7 | use_ok('Krawfish::Index'); |
| 8 | |
| 9 | my $index = Krawfish::Index->new; |
| 10 | |
| Akron | 56422cf | 2017-08-16 14:17:01 +0200 | [diff] [blame] | 11 | ok_index($index, '<1:opennlp/c=NP>[Der][hey]</1>', 'Add new document'); |
| Akron | 4763ea6 | 2016-11-02 19:36:18 +0100 | [diff] [blame] | 12 | |
| 13 | my $koral = Krawfish::Koral->new; |
| 14 | |
| 15 | my $builder = $koral->query_builder; |
| 16 | |
| Akron | ddf077a | 2016-11-05 15:00:00 +0100 | [diff] [blame] | 17 | # isAround(<opennlp/c=NP>, Der) |
| Akron | 6621e11 | 2016-11-05 17:21:39 +0100 | [diff] [blame] | 18 | my $query = $builder->position( |
| Akron | 4763ea6 | 2016-11-02 19:36:18 +0100 | [diff] [blame] | 19 | ['isAround'], |
| 20 | $builder->span('opennlp/c=NP'), |
| 21 | $builder->token('Der') |
| 22 | ); |
| Akron | 655a10a | 2017-09-11 14:13:18 +0200 | [diff] [blame] | 23 | ok(!$query->is_anywhere, 'Is anywhere'); |
| Akron | 4763ea6 | 2016-11-02 19:36:18 +0100 | [diff] [blame] | 24 | ok(!$query->is_optional, 'Isn\'t optional'); |
| 25 | ok(!$query->is_null, 'Isn\'t null'); |
| 26 | ok(!$query->is_negative, 'Isn\'t negative'); |
| 27 | ok(!$query->is_extended, 'Isn\'t extended'); |
| Akron | 17c0a3d | 2017-06-11 23:19:16 +0200 | [diff] [blame] | 28 | is($query->to_string, 'constr(pos=isAround:<opennlp/c=NP>,[Der])', 'Stringification'); |
| 29 | ok($query = $query->normalize, 'Normalize'); |
| Akron | c552937 | 2017-06-21 15:56:18 +0200 | [diff] [blame] | 30 | is($query->to_string, 'constr(pos=isAround:<opennlp/c=NP>,Der)', 'Stringification'); |
| Akron | 6621e11 | 2016-11-05 17:21:39 +0100 | [diff] [blame] | 31 | ok(!$query->has_error, 'Builder has no error'); |
| Akron | 5864cf0 | 2017-08-02 19:38:41 +0200 | [diff] [blame] | 32 | ok($query = $query->identify($index->dict), 'Optimize'); |
| Akron | 92d9f67 | 2017-08-16 12:23:11 +0200 | [diff] [blame] | 33 | is($query->to_string, "constr(pos=isAround:#3,#2)", 'Stringification'); |
| Akron | 5864cf0 | 2017-08-02 19:38:41 +0200 | [diff] [blame] | 34 | ok($query = $query->optimize($index->segment), 'Optimize'); |
| Akron | 92d9f67 | 2017-08-16 12:23:11 +0200 | [diff] [blame] | 35 | is($query->to_string, "constr(pos=128:#3,#2)", 'Stringification'); |
| Akron | 5864cf0 | 2017-08-02 19:38:41 +0200 | [diff] [blame] | 36 | |
| 37 | |
| Akron | ddf077a | 2016-11-05 15:00:00 +0100 | [diff] [blame] | 38 | |
| 39 | ##################### |
| 40 | # Test 0 as element # |
| 41 | ##################### |
| Akron | 2083bc4 | 2016-11-13 21:07:32 +0100 | [diff] [blame] | 42 | # isAround(<opennlp/c=NP>,0) |
| Akron | 6621e11 | 2016-11-05 17:21:39 +0100 | [diff] [blame] | 43 | $query = $builder->position( |
| Akron | ddf077a | 2016-11-05 15:00:00 +0100 | [diff] [blame] | 44 | ['isAround'], |
| 45 | $builder->span('opennlp/c=NP'), |
| 46 | $builder->null |
| 47 | ); |
| Akron | 655a10a | 2017-09-11 14:13:18 +0200 | [diff] [blame] | 48 | ok(!$query->is_anywhere, 'Is anywhere'); |
| Akron | ddf077a | 2016-11-05 15:00:00 +0100 | [diff] [blame] | 49 | ok(!$query->is_optional, 'Isn\'t optional'); |
| 50 | ok(!$query->is_null, 'Isn\'t null'); |
| 51 | ok(!$query->is_negative, 'Isn\'t negative'); |
| 52 | ok(!$query->is_extended, 'Isn\'t extended'); |
| Akron | c552937 | 2017-06-21 15:56:18 +0200 | [diff] [blame] | 53 | is($query->to_string, 'constr(pos=isAround:<opennlp/c=NP>,-)', 'Stringification'); |
| Akron | c048b18 | 2017-06-13 01:29:03 +0200 | [diff] [blame] | 54 | ok($query = $query->normalize, 'Normalize'); |
| Akron | 6621e11 | 2016-11-05 17:21:39 +0100 | [diff] [blame] | 55 | ok(!$query->has_error, 'Builder has no error'); |
| Akron | c048b18 | 2017-06-13 01:29:03 +0200 | [diff] [blame] | 56 | is($query->to_string, '<opennlp/c=NP>', 'Stringification'); |
| Akron | 5864cf0 | 2017-08-02 19:38:41 +0200 | [diff] [blame] | 57 | ok($query = $query->identify($index->dict)->optimize($index->segment), 'Optimize'); |
| Akron | 92d9f67 | 2017-08-16 12:23:11 +0200 | [diff] [blame] | 58 | is($query->to_string, "#3", 'Planned Stringification'); |
| Akron | ddf077a | 2016-11-05 15:00:00 +0100 | [diff] [blame] | 59 | |
| Akron | 1fe979b | 2017-07-25 14:58:47 +0200 | [diff] [blame] | 60 | |
| Akron | ddf077a | 2016-11-05 15:00:00 +0100 | [diff] [blame] | 61 | ##################### |
| 62 | # Test 0 as element # |
| 63 | ##################### |
| Akron | 2083bc4 | 2016-11-13 21:07:32 +0100 | [diff] [blame] | 64 | # isAround(<opennlp/c=NP>,0) |
| Akron | 6621e11 | 2016-11-05 17:21:39 +0100 | [diff] [blame] | 65 | $query = $builder->position( |
| Akron | ddf077a | 2016-11-05 15:00:00 +0100 | [diff] [blame] | 66 | ['isWithin'], |
| 67 | $builder->span('opennlp/c=NP'), |
| 68 | $builder->null |
| 69 | ); |
| Akron | 1fe979b | 2017-07-25 14:58:47 +0200 | [diff] [blame] | 70 | |
| Akron | 655a10a | 2017-09-11 14:13:18 +0200 | [diff] [blame] | 71 | ok(!$query->is_anywhere, 'Is anywhere'); |
| Akron | ddf077a | 2016-11-05 15:00:00 +0100 | [diff] [blame] | 72 | ok(!$query->is_optional, 'Isn\'t optional'); |
| 73 | ok(!$query->is_null, 'Isn\'t null'); |
| 74 | ok(!$query->is_negative, 'Isn\'t negative'); |
| 75 | ok(!$query->is_extended, 'Isn\'t extended'); |
| Akron | c552937 | 2017-06-21 15:56:18 +0200 | [diff] [blame] | 76 | is($query->to_string, 'constr(pos=isWithin:<opennlp/c=NP>,-)', 'Stringification'); |
| Akron | c048b18 | 2017-06-13 01:29:03 +0200 | [diff] [blame] | 77 | ok(!$query->normalize, 'Normalize'); |
| Akron | 6621e11 | 2016-11-05 17:21:39 +0100 | [diff] [blame] | 78 | ok($query->has_error, 'Builder has error'); |
| Akron | ddf077a | 2016-11-05 15:00:00 +0100 | [diff] [blame] | 79 | |
| 80 | |
| Akron | ded01ae | 2016-11-23 13:43:54 +0100 | [diff] [blame] | 81 | ########################## |
| 82 | # Test freq=0 as element # |
| 83 | ########################## |
| 84 | # isAround(<opennlp/c=NP>,Bus) |
| 85 | $query = $builder->position( |
| 86 | ['isWithin'], |
| 87 | $builder->span('opennlp/c=NP'), |
| 88 | $builder->token('Bus') |
| 89 | ); |
| Akron | c048b18 | 2017-06-13 01:29:03 +0200 | [diff] [blame] | 90 | is($query->to_string, 'constr(pos=isWithin:<opennlp/c=NP>,[Bus])', 'Stringification'); |
| 91 | ok($query = $query->normalize, 'Normalize'); |
| Akron | c552937 | 2017-06-21 15:56:18 +0200 | [diff] [blame] | 92 | is($query->to_string, 'constr(pos=isWithin:<opennlp/c=NP>,Bus)', 'Stringification'); |
| Akron | 5864cf0 | 2017-08-02 19:38:41 +0200 | [diff] [blame] | 93 | ok($query = $query->identify($index->dict)->optimize($index->segment), 'Normalize'); |
| Akron | c048b18 | 2017-06-13 01:29:03 +0200 | [diff] [blame] | 94 | is($query->to_string, '[0]', 'Stringification'); |
| Akron | ded01ae | 2016-11-23 13:43:54 +0100 | [diff] [blame] | 95 | |
| 96 | |
| Akron | bc7dd43 | 2017-07-18 14:21:51 +0200 | [diff] [blame] | 97 | TODO: { |
| 98 | local $TODO = "Test further"; |
| Akron | 655a10a | 2017-09-11 14:13:18 +0200 | [diff] [blame] | 99 | # extendedLeft, extendedRight, negative, anywhere, optional ... |
| Akron | bc7dd43 | 2017-07-18 14:21:51 +0200 | [diff] [blame] | 100 | }; |
| 101 | |
| Akron | 4763ea6 | 2016-11-02 19:36:18 +0100 | [diff] [blame] | 102 | |
| 103 | done_testing; |
| 104 | __END__ |
| 105 | |