1- using System ;
2- using System . Collections . Generic ;
3- using System . Collections . ObjectModel ;
4- using System . Linq ;
5- using Microsoft . VisualStudio . TestTools . UnitTesting ;
6- using Irony . Parsing ;
7- using System . Globalization ;
8- using XLParser ;
9-
10- namespace XLParser . Tests
11- {
12- [ TestClass ]
13- public class FormulaAnalysisTest
14- {
15- #region Numbers()
16- [ TestMethod ]
17- public void FixedNumbers ( )
18- {
19- var fa = new FormulaAnalyzer ( "SUM(A1,3.1+4)" ) ;
20- var nums = fa . Numbers ( ) . ToList ( ) ;
21-
22- CollectionAssert . Contains ( nums , 3.1 ) ;
23- CollectionAssert . Contains ( nums , 4.0 ) ;
24- Assert . AreEqual ( 2 , nums . Count ( ) ) ;
25- }
26-
27- [ TestMethod ]
28- public void NoFixedNumbers ( )
29- {
30- var fa = new FormulaAnalyzer ( "A1+B2" ) ;
31- var nums = fa . Numbers ( ) . ToList ( ) ;
32- Assert . AreEqual ( 0 , nums . Count ( ) ) ;
33- }
34-
35- [ TestMethod ]
36- public void FixedInt ( )
37- {
38- var fa = new FormulaAnalyzer ( "3" ) ;
39- var nums = fa . Numbers ( ) . ToList ( ) ;
40- CollectionAssert . Contains ( nums , 3.0 ) ;
41- Assert . AreEqual ( 1 , nums . Count ( ) ) ;
42- }
43-
44- [ TestMethod ]
45- public void FixedReal ( )
46- {
47- var fa = new FormulaAnalyzer ( "0.1" ) ;
48- var nums = fa . Numbers ( ) . ToList ( ) ;
49- CollectionAssert . Contains ( nums , 0.1 ) ;
50- Assert . AreEqual ( 1 , nums . Count ( ) ) ;
51- }
52-
53- [ TestMethod ]
54- public void Duplicate ( )
55- {
56- var fa = new FormulaAnalyzer ( "3+3" ) ;
57- var nums = fa . Numbers ( ) . ToList ( ) ;
58- Assert . AreEqual ( 2 , nums . Count ( ) ) ;
59- }
60- #endregion
61-
62- #region Functions()
63- [ TestMethod ]
64- public void CountInfixOperations ( )
65- {
66- var fa = new FormulaAnalyzer ( "3+4/5" ) ;
67- var ops = fa . Functions ( ) . ToList ( ) ;
68- Assert . AreEqual ( 2 , ops . Count ( ) ) ;
69- CollectionAssert . Contains ( ops , "+" ) ;
70- CollectionAssert . Contains ( ops , "/" ) ;
71- }
72-
73- [ TestMethod ]
74- public void CountFunctionOperations ( )
75- {
76- var fa = new FormulaAnalyzer ( "SUM(3,5)" ) ;
77- var ops = fa . Functions ( ) . ToList ( ) ;
78- Assert . AreEqual ( 1 , ops . Count ( ) ) ;
79- CollectionAssert . Contains ( ops , "SUM" ) ;
80- }
81-
82- [ TestMethod ]
83- public void CountPostfixOperations ( )
84- {
85- var fa = new FormulaAnalyzer ( "A6%" ) ;
86- var ops = fa . Functions ( ) . ToList ( ) ;
87- Assert . AreEqual ( 1 , ops . Count ( ) ) ;
88- CollectionAssert . Contains ( ops , "%" ) ;
89- }
90-
91- [ TestMethod ]
92- public void DontCountSheetReferenes ( )
93- {
94- string formula = "Weight!B1" ;
95- var fa = new FormulaAnalyzer ( formula ) ;
96- Assert . AreEqual ( 0 , fa . Functions ( ) . Count ( ) ) ;
97- }
98-
99- [ TestMethod ]
100- public void CountComparisons ( )
101- {
102- var fa = new FormulaAnalyzer ( "IF(A1>A2,3,4)" ) ;
103- var ops = fa . Functions ( ) . Distinct ( ) . ToList ( ) ;
104- Assert . AreEqual ( 2 , ops . Count ( ) ) ;
105- CollectionAssert . Contains ( ops , ">" ) ;
106- CollectionAssert . Contains ( ops , "IF" ) ;
107- }
108-
109- [ TestMethod ]
110- public void ComparisonIsFunction ( )
111- {
112- var fa = new FormulaAnalyzer ( "IF(A1<=A2,A1+1,A2)" ) ;
113- CollectionAssert . Contains ( fa . Functions ( ) . ToList ( ) , "<=" ) ;
114- }
115-
116- [ TestMethod ]
117- public void IntersectIsFunction ( )
118- {
119- var fa = new FormulaAnalyzer ( "SUM(A1:A3 A2:A3)" ) ;
120- var functions = fa . Functions ( ) . Distinct ( ) . ToList ( ) ;
121- CollectionAssert . Contains ( functions , "INTERSECT" ) ;
122- }
123- #endregion
124-
125- #region References()
126-
127- [ TestMethod ]
128- public void OnlyDirectReferences ( )
129- {
130- // Make sure A1:A10 isn't returned as "A1:A10", "A1" and "A10"
131- var fa = new FormulaAnalyzer ( "SUM(A1:A10)" ) ;
132- var references = fa . References ( ) . ToList ( ) ;
133- CollectionAssert . AreEqual ( references . Select ( ExcelFormulaParser . Print ) . ToList ( ) , new [ ] { "A1:A10" } ) ;
134- fa = new FormulaAnalyzer ( "(A1)+2" ) ;
135- references = fa . References ( ) . ToList ( ) ;
136- CollectionAssert . AreEqual ( references . Select ( ExcelFormulaParser . Print ) . ToList ( ) , new [ ] { "A1" } ) ;
137- }
138- #endregion
139-
140- #region Depth() and ConditionalComplexity()
141-
142- [ TestMethod ]
143- public void TestDepth ( )
144- {
145- var fa = new FormulaAnalyzer ( "SUM(1,2+SUM(3),3)" ) ;
146- Assert . AreEqual ( fa . Depth ( ) , 4 ) ;
147- Assert . AreEqual ( fa . OperatorDepth ( ) , 3 ) ;
148- }
149-
150- [ TestMethod ]
151- public void TestConditionalComplexity ( )
152- {
153- var fa1 = new FormulaAnalyzer ( "1" ) ;
154- Assert . AreEqual ( fa1 . ConditionalComplexity ( ) , 0 ) ;
155- var fa2 = new FormulaAnalyzer ( "IF(TRUE,IF(FALSE,1,0),0)" ) ;
156- Assert . AreEqual ( fa2 . ConditionalComplexity ( ) , 2 ) ;
157- }
158- #endregion
159-
160- #region Constants()
161-
162- [ TestMethod ]
163- public void TestConstants ( )
164- {
165- var fa = new FormulaAnalyzer ( "1*3-8-(-9)+VLOOKUP($A:$B,5,10)&\" ABC\" +TRUE*-3" ) ;
166- var constants = fa . Constants ( ) . ToList ( ) ;
167- CollectionAssert . AreEqual ( new [ ] { "1" , "3" , "8" , "-9" , "5" , "10" , "\" ABC\" " , "TRUE" , "-3" } , constants ) ;
168- }
169- #endregion
170- }
171- }
1+ using System ;
2+ using System . Collections . Generic ;
3+ using System . Collections . ObjectModel ;
4+ using System . Linq ;
5+ using Microsoft . VisualStudio . TestTools . UnitTesting ;
6+ using Irony . Parsing ;
7+ using System . Globalization ;
8+ using XLParser ;
9+
10+ namespace XLParser . Tests
11+ {
12+ [ TestClass ]
13+ public class FormulaAnalysisTest
14+ {
15+ #region Numbers()
16+ [ TestMethod ]
17+ public void FixedNumbers ( )
18+ {
19+ var fa = new FormulaAnalyzer ( "SUM(A1,3.1+4)" ) ;
20+ var nums = fa . Numbers ( ) . ToList ( ) ;
21+
22+ CollectionAssert . Contains ( nums , 3.1 ) ;
23+ CollectionAssert . Contains ( nums , 4.0 ) ;
24+ Assert . AreEqual ( 2 , nums . Count ( ) ) ;
25+ }
26+
27+ [ TestMethod ]
28+ public void NoFixedNumbers ( )
29+ {
30+ var fa = new FormulaAnalyzer ( "A1+B2" ) ;
31+ var nums = fa . Numbers ( ) . ToList ( ) ;
32+ Assert . AreEqual ( 0 , nums . Count ( ) ) ;
33+ }
34+
35+ [ TestMethod ]
36+ public void FixedInt ( )
37+ {
38+ var fa = new FormulaAnalyzer ( "3" ) ;
39+ var nums = fa . Numbers ( ) . ToList ( ) ;
40+ CollectionAssert . Contains ( nums , 3.0 ) ;
41+ Assert . AreEqual ( 1 , nums . Count ( ) ) ;
42+ }
43+
44+ [ TestMethod ]
45+ public void FixedReal ( )
46+ {
47+ var fa = new FormulaAnalyzer ( "0.1" ) ;
48+ var nums = fa . Numbers ( ) . ToList ( ) ;
49+ CollectionAssert . Contains ( nums , 0.1 ) ;
50+ Assert . AreEqual ( 1 , nums . Count ( ) ) ;
51+ }
52+
53+ [ TestMethod ]
54+ public void Duplicate ( )
55+ {
56+ var fa = new FormulaAnalyzer ( "3+3" ) ;
57+ var nums = fa . Numbers ( ) . ToList ( ) ;
58+ Assert . AreEqual ( 2 , nums . Count ( ) ) ;
59+ }
60+ #endregion
61+
62+ #region Functions()
63+ [ TestMethod ]
64+ public void CountInfixOperations ( )
65+ {
66+ var fa = new FormulaAnalyzer ( "3+4/5" ) ;
67+ var ops = fa . Functions ( ) . ToList ( ) ;
68+ Assert . AreEqual ( 2 , ops . Count ( ) ) ;
69+ CollectionAssert . Contains ( ops , "+" ) ;
70+ CollectionAssert . Contains ( ops , "/" ) ;
71+ }
72+
73+ [ TestMethod ]
74+ public void CountFunctionOperations ( )
75+ {
76+ var fa = new FormulaAnalyzer ( "SUM(3,5)" ) ;
77+ var ops = fa . Functions ( ) . ToList ( ) ;
78+ Assert . AreEqual ( 1 , ops . Count ( ) ) ;
79+ CollectionAssert . Contains ( ops , "SUM" ) ;
80+ }
81+
82+ [ TestMethod ]
83+ public void CountPostfixOperations ( )
84+ {
85+ var fa = new FormulaAnalyzer ( "A6%" ) ;
86+ var ops = fa . Functions ( ) . ToList ( ) ;
87+ Assert . AreEqual ( 1 , ops . Count ( ) ) ;
88+ CollectionAssert . Contains ( ops , "%" ) ;
89+ }
90+
91+ [ TestMethod ]
92+ public void DontCountSheetReferenes ( )
93+ {
94+ string formula = "Weight!B1" ;
95+ var fa = new FormulaAnalyzer ( formula ) ;
96+ Assert . AreEqual ( 0 , fa . Functions ( ) . Count ( ) ) ;
97+ }
98+
99+ [ TestMethod ]
100+ public void CountComparisons ( )
101+ {
102+ var fa = new FormulaAnalyzer ( "IF(A1>A2,3,4)" ) ;
103+ var ops = fa . Functions ( ) . Distinct ( ) . ToList ( ) ;
104+ Assert . AreEqual ( 2 , ops . Count ( ) ) ;
105+ CollectionAssert . Contains ( ops , ">" ) ;
106+ CollectionAssert . Contains ( ops , "IF" ) ;
107+ }
108+
109+ [ TestMethod ]
110+ public void ComparisonIsFunction ( )
111+ {
112+ var fa = new FormulaAnalyzer ( "IF(A1<=A2,A1+1,A2)" ) ;
113+ CollectionAssert . Contains ( fa . Functions ( ) . ToList ( ) , "<=" ) ;
114+ }
115+
116+ [ TestMethod ]
117+ public void IntersectIsFunction ( )
118+ {
119+ var fa = new FormulaAnalyzer ( "SUM(A1:A3 A2:A3)" ) ;
120+ var functions = fa . Functions ( ) . Distinct ( ) . ToList ( ) ;
121+ CollectionAssert . Contains ( functions , "INTERSECT" ) ;
122+ }
123+ #endregion
124+
125+ #region References()
126+
127+ [ TestMethod ]
128+ public void OnlyDirectReferences ( )
129+ {
130+ // Make sure A1:A10 isn't returned as "A1:A10", "A1" and "A10"
131+ var fa = new FormulaAnalyzer ( "SUM(A1:A10)" ) ;
132+ var references = fa . References ( ) . ToList ( ) ;
133+ CollectionAssert . AreEqual ( references . Select ( ExcelFormulaParser . Print ) . ToList ( ) , new [ ] { "A1:A10" } ) ;
134+ fa = new FormulaAnalyzer ( "(A1)+2" ) ;
135+ references = fa . References ( ) . ToList ( ) ;
136+ CollectionAssert . AreEqual ( references . Select ( ExcelFormulaParser . Print ) . ToList ( ) , new [ ] { "A1" } ) ;
137+ }
138+ #endregion
139+
140+ #region Depth() and ConditionalComplexity()
141+
142+ [ TestMethod ]
143+ public void TestDepth ( )
144+ {
145+ var fa = new FormulaAnalyzer ( "SUM(1,2+SUM(3),3)" ) ;
146+ Assert . AreEqual ( fa . Depth ( ) , 4 ) ;
147+ Assert . AreEqual ( fa . OperatorDepth ( ) , 3 ) ;
148+ }
149+
150+ [ TestMethod ]
151+ public void TestConditionalComplexity ( )
152+ {
153+ var fa1 = new FormulaAnalyzer ( "1" ) ;
154+ Assert . AreEqual ( fa1 . ConditionalComplexity ( ) , 0 ) ;
155+ var fa2 = new FormulaAnalyzer ( "IF(TRUE,IF(FALSE,1,0),0)" ) ;
156+ Assert . AreEqual ( fa2 . ConditionalComplexity ( ) , 2 ) ;
157+ }
158+ #endregion
159+
160+ #region Constants()
161+
162+ [ TestMethod ]
163+ public void TestConstants ( )
164+ {
165+ var fa = new FormulaAnalyzer ( "1*3-8-(-9)+VLOOKUP($A:$B,5,10)&\" ABC\" +TRUE*-3" ) ;
166+ var constants = fa . Constants ( ) . ToList ( ) ;
167+ CollectionAssert . AreEqual ( new [ ] { "1" , "3" , "8" , "-9" , "5" , "10" , "\" ABC\" " , "TRUE" , "-3" } , constants ) ;
168+ }
169+ #endregion
170+ }
171+ }
0 commit comments