FreeCAD
98 строк · 3.3 Кб
1import unittest
2from unittest.mock import patch, MagicMock
3
4from importXLSX import FormulaTranslator, getText, handleStrings, open
5
6
7class TestFormulaTranslator(unittest.TestCase):
8def test_translate_expressions(self):
9# With
10formulas_and_expressions = [
11("1=2", "1==2"),
12("a<b", "a<b"),
13("a>b", "a>b"),
14("1<>2", "1!=2"),
15("a>=b", "a>=b"),
16("a<=b", "a<=b"),
17("a!b", "a.b"),
18("a+b", "a+b"),
19("a-b", "a-b"),
20("a*b", "a*b"),
21("a/b", "a/b"),
22("a^b", "a^b"),
23("c*(a+b)", "c*(a+b)"),
24("IF(a=b, c, d)", "(a==b? c: d)"),
25("ABS(a)", "abs(a)"),
26("ACOS(a)", "pi/180deg*acos(a)"),
27("ASIN(a)", "pi/180deg*asin(a)"),
28("ATAN(a)", "pi/180deg*atan(a)"),
29("ATAN2(a)", "pi/180deg*atan2(a)"),
30("COS(a)", "cos(1rad*(a))"),
31("COSH(a)", "cosh(1rad*(a))"),
32("EXP(a)", "exp(a)"),
33("LOG(n)", "log(n)"),
34("LOG10(n)", "log10(n)"),
35("MOD(n,d)", "mod(n,d)"),
36("POWER(n,p)", "pow(n,p)"),
37("SIN(a)", "sin(1rad*(a))"),
38("SINH(a)", "sinh(1rad*(a))"),
39("SQRT(a)", "sqrt(a)"),
40("TAN(a)", "tan(1rad*(a))"),
41("TANH(a)", "tanh(1rad*(a))"),
42("AVERAGE(a,b,c)", "average(a,b,c)"),
43("COUNT(a,b,c)", "count(a,b,c)"),
44("MAX(a,b,c)", "max(a,b,c)"),
45("MIN(a,b,c)", "min(a,b,c)"),
46("STDEVA(a,b,c)", "stddev(a,b,c)"),
47("SUM(a,b,c)", "sum(a,b,c)"),
48("PI", "pi"),
49("_xlfn.CEILING.MATH(a)", "ceil(a)"),
50("_xlfn.FLOOR.MATH(a)", "floor(a)"),
51]
52
53# When
54result = []
55for formula, _ in formulas_and_expressions:
56translator = FormulaTranslator()
57result.append(translator.translateForm(formula))
58
59# Then
60expected = [f"={expression}" for _, expression in formulas_and_expressions]
61self.assertListEqual(expected, result)
62
63def test_translate_multi_character_branching_operators(self):
64# With
65formulas_and_expressions = [
66("1<>2", "1!=2"),
67("a>=b", "a>=b"),
68("a<=b", "a<=b"),
69]
70
71# When
72result = []
73for formula, _ in formulas_and_expressions:
74translator = FormulaTranslator()
75result.append(translator.translateForm(formula))
76
77# Then
78expected = [f"={expression}" for _, expression in formulas_and_expressions]
79self.assertListEqual(expected, result)
80
81def test_translate_nested_expression(self):
82# With
83formulas_and_expressions = [
84(
85"IF(a<b+c,0.1+SIN(0.5),0.3+MAX(COS(0.2),SIN(0.1)))",
86"(a<b+c?0.1+sin(1rad*(0.5)):0.3+max(cos(1rad*(0.2)),sin(1rad*(0.1))))",
87),
88]
89
90# When
91result = []
92for formula, _ in formulas_and_expressions:
93translator = FormulaTranslator()
94result.append(translator.translateForm(formula))
95
96# Then
97expected = [f"={expression}" for _, expression in formulas_and_expressions]
98self.assertListEqual(expected, result)
99