]> git.openstreetmap.org Git - nominatim.git/blob - test/php/Nominatim/PhraseTest.php
42166e34f330da72a06f2089e6e99d0a4b73db21
[nominatim.git] / test / php / Nominatim / PhraseTest.php
1 <?php
2
3 namespace Nominatim;
4
5 require_once(CONST_LibDir.'/Phrase.php');
6
7 class TokensFullSet
8 {
9     public function containsAny($sTerm)
10     {
11         return true;
12     }
13 }
14
15 // phpcs:ignore PSR1.Classes.ClassDeclaration.MultipleClasses
16 class TokensPartialSet
17 {
18     public function __construct($aTokens)
19     {
20         $this->aTokens = array_flip($aTokens);
21     }
22
23     public function containsAny($sTerm)
24     {
25         return isset($this->aTokens[$sTerm]);
26     }
27 }
28
29 // phpcs:ignore PSR1.Classes.ClassDeclaration.MultipleClasses
30 class PhraseTest extends \PHPUnit\Framework\TestCase
31 {
32
33
34     private function serializeSets($aSets)
35     {
36         $aParts = array();
37         foreach ($aSets as $aSet) {
38             $aParts[] = '(' . join('|', $aSet) . ')';
39         }
40         return join(',', $aParts);
41     }
42
43
44     public function testEmptyPhrase()
45     {
46         $oPhrase = new Phrase('', '');
47         $oPhrase->computeWordSets(new TokensFullSet());
48
49         $this->assertEquals(
50             array(array('')),
51             $oPhrase->getWordSets()
52         );
53     }
54
55
56     public function testSingleWordPhrase()
57     {
58         $oPhrase = new Phrase('a', '');
59         $oPhrase->computeWordSets(new TokensFullSet());
60
61         $this->assertEquals(
62             '(a)',
63             $this->serializeSets($oPhrase->getWordSets())
64         );
65     }
66
67
68     public function testMultiWordPhrase()
69     {
70         $oPhrase = new Phrase('a b', '');
71         $oPhrase->computeWordSets(new TokensFullSet());
72         $this->assertEquals(
73             '(a b),(a|b)',
74             $this->serializeSets($oPhrase->getWordSets())
75         );
76
77         $oPhrase = new Phrase('a b c', '');
78         $oPhrase->computeWordSets(new TokensFullSet());
79         $this->assertEquals(
80             '(a b c),(a|b c),(a b|c),(a|b|c)',
81             $this->serializeSets($oPhrase->getWordSets())
82         );
83
84         $oPhrase = new Phrase('a b c d', '');
85         $oPhrase->computeWordSets(new TokensFullSet());
86         $this->assertEquals(
87             '(a b c d),(a b c|d),(a b|c d),(a|b c d),(a b|c|d),(a|b c|d),(a|b|c d),(a|b|c|d)',
88             $this->serializeSets($oPhrase->getWordSets())
89         );
90     }
91
92
93     public function testInverseWordSets()
94     {
95         $oPhrase = new Phrase('a b c', '');
96         $oPhrase->computeWordSets(new TokensFullSet());
97         $oPhrase->invertWordSets();
98
99         $this->assertEquals(
100             '(a b c),(b c|a),(c|a b),(c|b|a)',
101             $this->serializeSets($oPhrase->getWordSets())
102         );
103     }
104
105
106     public function testMaxWordSets()
107     {
108         $oPhrase = new Phrase(join(' ', array_fill(0, 4, 'a')), '');
109         $oPhrase->computeWordSets(new TokensFullSet());
110         $this->assertEquals(8, count($oPhrase->getWordSets()));
111         $oPhrase->invertWordSets();
112         $this->assertEquals(8, count($oPhrase->getWordSets()));
113
114         $oPhrase = new Phrase(join(' ', array_fill(0, 18, 'a')), '');
115         $oPhrase->computeWordSets(new TokensFullSet());
116         $this->assertEquals(100, count($oPhrase->getWordSets()));
117         $oPhrase->invertWordSets();
118         $this->assertEquals(100, count($oPhrase->getWordSets()));
119     }
120
121
122     public function testPartialTokensShortTerm()
123     {
124         $oPhrase = new Phrase('a b c d', '');
125         $oPhrase->computeWordSets(new TokensPartialSet(array('a', 'b', 'd', 'b c', 'b c d')));
126         $this->assertEquals(
127             '(a|b c d),(a|b c|d)',
128             $this->serializeSets($oPhrase->getWordSets())
129         );
130     }
131
132
133     public function testPartialTokensLongTerm()
134     {
135         $oPhrase = new Phrase(join(' ', array_fill(0, 18, 'a')), '');
136         $oPhrase->computeWordSets(new TokensPartialSet(array('a', 'a a a a a')));
137         $this->assertEquals(80, count($oPhrase->getWordSets()));
138     }
139 }