1+ <?php
2+
3+ declare (strict_types=1 );
4+
5+ namespace Mathematicator \Engine \Test ;
6+
7+
8+ use Mathematicator \Engine \QueryNormalizer ;
9+ use Model \Math \NumberRewriter ;
10+ use Tester \Assert ;
11+ use Tester \TestCase ;
12+
13+ require __DIR__ . '/../../../autoload.php ' ;
14+
15+ class QueryNormalizerTest extends TestCase
16+ {
17+
18+ /**
19+ * @var QueryNormalizer
20+ */
21+ private $ queryNormalizer ;
22+
23+ /**
24+ * @var NumberRewriter
25+ */
26+ private $ numberRewriter ;
27+
28+ public function __construct ()
29+ {
30+ $ this ->numberRewriter = new NumberRewriter ;
31+ $ this ->queryNormalizer = new QueryNormalizer ($ this ->numberRewriter );
32+ }
33+
34+ /**
35+ * @dataprovider getQueries
36+ * @param string $expected
37+ * @param string $query
38+ */
39+ public function testQueryNormalizer (string $ expected , string $ query ): void
40+ {
41+ Assert::same ($ expected , $ this ->queryNormalizer ->normalize ($ query ));
42+ }
43+
44+ /**
45+ * @dataprovider getNumberRewriterToNumber
46+ * @param string $expected
47+ * @param string $query
48+ */
49+ public function testNumberRewriterToNumber (string $ expected , string $ query ): void
50+ {
51+ Assert::same ($ expected , $ this ->numberRewriter ->toNumber ($ query ));
52+ }
53+
54+ /**
55+ * @return string[]
56+ */
57+ public function getQueries (): array
58+ {
59+ return [
60+ ['5+3 ' , '5 + 3 ' ],
61+ ['123456789 ' , '123456789 ' ],
62+ ['(5+9)*5 ' , '(5 + 9) * 5 ' ],
63+ ['5+3*(2-1) ' , '5 + 3 * (2-1 ' ],
64+ ['(10.2+0.5*(2-0.4))*2+(2.1*4) ' , '(10.2+0.5 * (2-0.4)) * 2 + (2.1 * 4) ' ],
65+ ['15+3*6 ' , '15 + 3 * 6 ' ],
66+ ['15+3*6 ' , '15 + 3 * 6 ' ],
67+ ['9223372036854775.808000 ' , '9,223,3720,36854,775.808000 ' ],
68+ ['3.14+2.36+91.24+11 ' , '3,14+2,36+91,24+11 ' ],
69+ ['(x^3)/(x^2-1) ' , '(x^3)/(x^2-1) ' ],
70+ ['(x-2)^2 ' , '(x-2)^2 ' ],
71+ ['x^3-5*x^2+7*x ' , 'x^3-5x^2+7x ' ],
72+ ['((5*x+1)/(2*x-4))-5 ' , '((5x+1)/(2x-4))-5 ' ],
73+ ['(3*x*5-3*x^3)*(x^3-2+sin(x))/(cos(x)*x-sin(x)*x^3) ' , '(3x*5-3x^3)*(x^3-2+sin(x))/(cos(x)*x-sin(x)*x^3) ' ],
74+ ['(x^2-4*x+4)/(4*x^3-2*x^4) ' , '(x^2-4 x+4)/(4 x^3-2 x^4) ' ],
75+ ['INF ' , 'nekonečno ' ],
76+ ['INF^2 ' , 'nekonečno^2 ' ],
77+ ['INF+INF ' , 'nekonečno+inf ' ],
78+ ['INF-0 ' , '∞-0 ' ],
79+ ['INF-INF ' , 'INF-inf ' ],
80+ ['2^4 ' , '2˘4 ' ],
81+ ['PI ' , 'π ' ],
82+ ['6 ' , 'šest ' ],
83+ ['5+3*2 ' , 'pět plus tři krát dva ' ],
84+ ];
85+ }
86+
87+ /**
88+ * @return string[]
89+ */
90+ public function getNumberRewriterToNumber (): array
91+ {
92+ return [
93+ ['5 ' , 'pět ' ],
94+ ['2 a 3 ' , 'dva a tři ' ],
95+ ];
96+ }
97+
98+ }
99+
100+ (new QueryNormalizerTest )->run ();
0 commit comments