Skip to content

Commit 8fd4e39

Browse files
committed
Test: Add first test for QueryNormalizer
1 parent a3bedc3 commit 8fd4e39

File tree

2 files changed

+102
-1
lines changed

2 files changed

+102
-1
lines changed

composer.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@
99
}
1010
],
1111
"require": {
12-
"php": ">=7.1"
12+
"php": ">=7.1",
13+
"nette/tester": "^2.0"
1314
},
1415
"autoload": {
1516
"classmap": [

tests/QueryNormalizerTest.php

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
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

Comments
 (0)