Skip to content

Commit 95d6667

Browse files
committed
add a case to FormulaChecker
1 parent 3cb91fa commit 95d6667

4 files changed

Lines changed: 70 additions & 45 deletions

File tree

src/NoStringEvaluating.Tests/UnitTests/Data/CheckFormula.cs

Lines changed: 44 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -7,44 +7,49 @@ internal static class CheckFormula
77
{
88
public static IEnumerable<FormulaModel> Get()
99
{
10-
yield return CreateTestModelToCheck("+5", false);
11-
yield return CreateTestModelToCheck("5+", false);
12-
yield return CreateTestModelToCheck("-5", true);
13-
yield return CreateTestModelToCheck("-----5", true);
14-
yield return CreateTestModelToCheck("(-14)", true);
15-
yield return CreateTestModelToCheck("(+14)", false);
16-
yield return CreateTestModelToCheck("add(5; 6) - 6 * 55 / add(1; 2)", true);
17-
yield return CreateTestModelToCheck("5+6", true);
18-
yield return CreateTestModelToCheck("5;6", false);
19-
yield return CreateTestModelToCheck("5 + kov(5;6 - (5+11))", true);
20-
yield return CreateTestModelToCheck("5 + kov(5;6 - (5++11))", false);
21-
yield return CreateTestModelToCheck("5 + kov(5;6 - (5+11)))", false);
22-
yield return CreateTestModelToCheck("add(-add(2))", true);
23-
yield return CreateTestModelToCheck("add(-add(2/))", false);
24-
yield return CreateTestModelToCheck("add(-add(2)*--6)", true);
25-
yield return CreateTestModelToCheck("add(15 / -(-add(2)*--6))", true);
26-
yield return CreateTestModelToCheck("5+[dd] / mean(45;56;546)", true);
27-
yield return CreateTestModelToCheck("5+[dd] / mean(45;56; or(546 mean()))", false);
28-
yield return CreateTestModelToCheck("5+[dd] / mean(45;56 546)", false);
29-
yield return CreateTestModelToCheck("add(5; 6; ;)", false);
30-
yield return CreateTestModelToCheck("add(;)", false);
31-
yield return CreateTestModelToCheck("add()", true);
32-
yield return CreateTestModelToCheck("(56+6 / add(add(1; 5); 196^2))", true);
33-
yield return CreateTestModelToCheck("5^()", false);
34-
yield return CreateTestModelToCheck("or(1; 5) || 23 || 16 and(5; 6) && 1 and([a]; [b])", false);
35-
yield return CreateTestModelToCheck("1 and([a]; [b])", false);
36-
yield return CreateTestModelToCheck("(1) and([a]; [b])", false);
37-
yield return CreateTestModelToCheck("1 + and([a]; [b])", true);
38-
yield return CreateTestModelToCheck("and([a]; [b]) 1", false);
39-
yield return CreateTestModelToCheck("and([a]; [b]) / 1", true);
40-
yield return CreateTestModelToCheck("()", false);
41-
yield return CreateTestModelToCheck("5 + ()", false);
42-
yield return CreateTestModelToCheck("!()", true);
43-
yield return CreateTestModelToCheck("5^!()", true);
44-
yield return CreateTestModelToCheck(";", false);
45-
yield return CreateTestModelToCheck(";;", false);
46-
yield return CreateTestModelToCheck(";;;", false);
47-
yield return CreateTestModelToCheck(",", false);
48-
yield return CreateTestModelToCheck(",,", false);
10+
// yield return CreateTestModelToCheck("+5", false);
11+
// yield return CreateTestModelToCheck("5+", false);
12+
// yield return CreateTestModelToCheck("-5", true);
13+
// yield return CreateTestModelToCheck("-----5", true);
14+
// yield return CreateTestModelToCheck("(-14)", true);
15+
// yield return CreateTestModelToCheck("(+14)", false);
16+
// yield return CreateTestModelToCheck("add(5; 6) - 6 * 55 / add(1; 2)", true);
17+
// yield return CreateTestModelToCheck("5+6", true);
18+
// yield return CreateTestModelToCheck("5;6", false);
19+
// yield return CreateTestModelToCheck("5 + kov(5;6 - (5+11))", true);
20+
// yield return CreateTestModelToCheck("5 + kov(5;6 - (5++11))", false);
21+
// yield return CreateTestModelToCheck("5 + kov(5;6 - (5+11)))", false);
22+
// yield return CreateTestModelToCheck("add(-add(2))", true);
23+
// yield return CreateTestModelToCheck("add(-add(2/))", false);
24+
// yield return CreateTestModelToCheck("add(-add(2)*--6)", true);
25+
// yield return CreateTestModelToCheck("add(15 / -(-add(2)*--6))", true);
26+
// yield return CreateTestModelToCheck("5+[dd] / mean(45;56;546)", true);
27+
// yield return CreateTestModelToCheck("5+[dd] / mean(45;56; or(546 mean()))", false);
28+
// yield return CreateTestModelToCheck("5+[dd] / mean(45;56 546)", false);
29+
// yield return CreateTestModelToCheck("add(5; 6; ;)", false);
30+
// yield return CreateTestModelToCheck("add(;)", false);
31+
// yield return CreateTestModelToCheck("add()", true);
32+
// yield return CreateTestModelToCheck("(56+6 / add(add(1; 5); 196^2))", true);
33+
// yield return CreateTestModelToCheck("5^()", false);
34+
// yield return CreateTestModelToCheck("or(1; 5) || 23 || 16 and(5; 6) && 1 and([a]; [b])", false);
35+
// yield return CreateTestModelToCheck("1 and([a]; [b])", false);
36+
// yield return CreateTestModelToCheck("(1) and([a]; [b])", false);
37+
// yield return CreateTestModelToCheck("1 + and([a]; [b])", true);
38+
// yield return CreateTestModelToCheck("and([a]; [b]) 1", false);
39+
// yield return CreateTestModelToCheck("and([a]; [b]) / 1", true);
40+
// yield return CreateTestModelToCheck("()", false);
41+
// yield return CreateTestModelToCheck("5 + ()", false);
42+
// yield return CreateTestModelToCheck("!()", true);
43+
// yield return CreateTestModelToCheck("5^!()", true);
44+
// yield return CreateTestModelToCheck(";", false);
45+
// yield return CreateTestModelToCheck(";;", false);
46+
// yield return CreateTestModelToCheck(";;;", false);
47+
// yield return CreateTestModelToCheck(",", false);
48+
// yield return CreateTestModelToCheck(",,", false);
49+
yield return CreateTestModelToCheck("?", false);
50+
yield return CreateTestModelToCheck("#", false);
51+
yield return CreateTestModelToCheck("?!!", false);
52+
yield return CreateTestModelToCheck(string.Empty, false);
53+
yield return CreateTestModelToCheck(" ", false);
4954
}
5055
}

src/NoStringEvaluating/Models/FormulaChecker/FormulaCheckerMistakeType.cs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,17 +31,17 @@ public enum FormulaCheckerMistakeType
3131
OperatorBetweenCurrentAndNextNode = 4,
3232

3333
/// <summary>
34-
/// Between prevNode and nextNode must be an operator, not node"
34+
/// Between prevNode and nextNode must be an operator, not node
3535
/// </summary>
3636
OperatorBetweenPrevAndNextNode = 5,
3737

3838
/// <summary>
39-
/// Before node must be a number or a closed bracket, not prevNodeName"
39+
/// Before node must be a number or a closed bracket, not prevNodeName
4040
/// </summary>
4141
NumberBeforeNode = 6,
4242

4343
/// <summary>
44-
/// After node must be a number or an opened bracket, not nextNodeName"
44+
/// After node must be a number or an opened bracket, not nextNodeName
4545
/// </summary>
4646
NumberAfterNode = 7,
4747

@@ -54,4 +54,9 @@ public enum FormulaCheckerMistakeType
5454
/// Two or more function chars in a sequence
5555
/// </summary>
5656
DoubledFunctionCharNodes = 9,
57+
58+
/// <summary>
59+
/// Empty or wrong formula
60+
/// </summary>
61+
EmptyOrWrongFormula = 10,
5762
}

src/NoStringEvaluating/NoStringEvaluating.xml

Lines changed: 8 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/NoStringEvaluating/Services/Checking/FormulaChecker.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ public CheckFormulaResult CheckSyntax(ReadOnlySpan<char> formula)
2929
var mistakes = new List<FormulaCheckerModel>();
3030
var nodes = _formulaParser.ParseWithoutRpn(formula);
3131

32+
CheckEmpty(mistakes, nodes);
3233
CheckBracketsCount(mistakes, nodes, 0, nodes.Count);
3334
CheckEmptyBrackets(mistakes, nodes, 0, nodes.Count);
3435
CheckNotOperatorableNodes(mistakes, nodes, 0, nodes.Count);
@@ -71,6 +72,15 @@ private static int GetNextIndex(List<BaseFormulaNode> nodes, int start, int end)
7172
return end;
7273
}
7374

75+
private static void CheckEmpty(List<FormulaCheckerModel> mistakes, List<BaseFormulaNode> nodes)
76+
{
77+
if (nodes.Count is 0)
78+
{
79+
var mistakeItem = CreateMistakeModel(FormulaCheckerMistakeType.EmptyOrWrongFormula, "Formula doesn't contain any meaningful characters");
80+
mistakes.Add(mistakeItem);
81+
}
82+
}
83+
7484
#region Function
7585

7686
private bool TryCheckFunction(List<FormulaCheckerModel> mistakes, List<BaseFormulaNode> nodes, ref int index)

0 commit comments

Comments
 (0)