cloudy  trunk
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
TestParser.cpp
Go to the documentation of this file.
1 /* This file is part of Cloudy and is copyright (C)1978-2022 by Gary J. Ferland and
2  * others. For conditions of distribution and use see copyright notice in license.txt */
3 #include "cdstd.h"
4 #include <UnitTest++.h>
5 #include "cddefines.h"
6 #include "parser.h"
7 
8 namespace {
9  TEST(TestReadNumber)
10  {
11  Parser p;
12  p.setline("1000");
13  CHECK_EQUAL(1000,p.FFmtRead());
14  }
15  TEST(TestReadOffEnd)
16  {
17  Parser p;
18  p.setline("1000");
19  CHECK(!p.lgEOL());
20  CHECK_EQUAL(1000,p.FFmtRead());
21  CHECK(!p.lgEOL());
22  CHECK_EQUAL(0,p.FFmtRead());
23  CHECK(p.lgEOL());
24  }
25  TEST(TestReadNegativeNumber)
26  {
27  Parser p;
28  p.setline("-1000");
29  CHECK_EQUAL(-1000,p.FFmtRead());
30  }
31  TEST(TestReadPlusNumber)
32  {
33  Parser p;
34  p.setline("+1000");
35  CHECK_EQUAL(+1000,p.FFmtRead());
36  }
37  TEST(TestReadFraction)
38  {
39  Parser p;
40  p.setline("0.125");
41  CHECK_EQUAL(0.125,p.FFmtRead());
42  }
43  TEST(TestReadEmbeddedFraction)
44  {
45  Parser p;
46  p.setline("Pi is 3.14159");
47  CHECK(fp_equal_tol(3.14159,p.FFmtRead(),1e-3));
48  }
49  TEST(TestReadEmbeddedFractions)
50  {
51  Parser p;
52  p.setline("Pi is 3.14159, e is 2.71828");
53  CHECK(fp_equal_tol(3.14159,p.FFmtRead(),1e-3));
54  CHECK(fp_equal_tol(2.71828,p.FFmtRead(),1e-3));
55  }
56 // TEST(TestReadCommaNumber)
57 // {
58 // Parser p;
59 // p.setline("1,000");
60 // CHECK_EQUAL(1000,p.FFmtRead());
61 // }
62  TEST(TestReadOKCommaNumber)
63  {
64  Parser p;
65  p.setline("1000,");
66  CHECK_EQUAL(1000,p.FFmtRead());
67  }
68  TEST(TestReadExponentialNumber)
69  {
70  Parser p;
71  p.setline("1e3");
72  CHECK_EQUAL(1000,p.FFmtRead());
73  }
74  TEST(TestReadExponentialFraction)
75  {
76  Parser p;
77  p.setline("0.125e1");
78  CHECK_EQUAL(1.25,p.FFmtRead());
79  }
80  TEST(TestReadPositiveExponentialFraction)
81  {
82  Parser p;
83  p.setline("0.125e+1");
84  CHECK_EQUAL(1.25,p.FFmtRead());
85  }
86  TEST(TestReadNegativeExponentialFraction)
87  {
88  Parser p;
89  p.setline("1.25e-1");
90  CHECK_EQUAL(0.125,p.FFmtRead());
91  }
92  TEST(TestReadExponentNumber)
93  {
94  Parser p;
95  p.setline("10^3,");
96  CHECK_EQUAL(1000,p.FFmtRead());
97  }
98  TEST(TestReadFractionalExponentNumber)
99  {
100  Parser p;
101  p.setline("10.^3.5");
102  CHECK(fp_equal_tol(3162.277,p.FFmtRead(),1e-2));
103  }
104  TEST(TestReadFractionalSquaredNumber)
105  {
106  Parser p;
107  p.setline("2.5^2");
108  CHECK_EQUAL(6.25,p.FFmtRead());
109  }
110  TEST(TestReadFractionalSquaredNegativeNumber)
111  {
112  // At present unary - binds tighter that the exponential
113  Parser p;
114  p.setline("-2.5e0^2e0");
115  CHECK_EQUAL(6.25,p.FFmtRead());
116  }
117  TEST(TestReadChainedExponentNumber)
118  {
119  Parser p;
120  p.setline("10^2^3");
121  CHECK_EQUAL(1e8,p.FFmtRead());
122  }
123  TEST(TestReadProductNumber)
124  {
125  Parser p;
126  p.setline("1.25*5.0");
127  CHECK_EQUAL(6.25,p.FFmtRead());
128  }
129  TEST(TestReadProductPowExpr)
130  {
131  Parser p;
132  p.setline("1.25*10^2");
133  CHECK_EQUAL(125,p.FFmtRead());
134  }
135  TEST(TestReadPowProductExpr)
136  {
137  Parser p;
138  p.setline("10^2*1.25");
139  CHECK_EQUAL(125,p.FFmtRead());
140  }
141  TEST(TestReadProductProductExpr)
142  {
143  Parser p;
144  p.setline("2*2*1.25");
145  CHECK_EQUAL(5,p.FFmtRead());
146  }
147  TEST(TestReadDivExpr)
148  {
149  Parser p;
150  p.setline("4/2");
151  CHECK_EQUAL(2,p.FFmtRead());
152  }
153  TEST(TestReadDivDivExpr)
154  {
155  Parser p;
156  p.setline("9/2/2");
157  CHECK_EQUAL(2.25,p.FFmtRead());
158  }
159  TEST(TestReadDivMulExpr)
160  {
161  Parser p;
162  p.setline("9/2*2");
163  CHECK_EQUAL(9,p.FFmtRead());
164  }
165  TEST(TestReadMulDivExpr)
166  {
167  Parser p;
168  p.setline("2*9/2");
169  CHECK_EQUAL(9,p.FFmtRead());
170  }
171  TEST(TestReadExpDivExpExpr)
172  {
173  Parser p;
174  p.setline("3^3/2^2");
175  CHECK_EQUAL(6.75,p.FFmtRead());
176  }
177  TEST(TestReadProductPowProductExpr)
178  {
179  Parser p;
180  p.setline("2*10^2*1.25");
181  CHECK_EQUAL(250,p.FFmtRead());
182  }
183  TEST(TestReadMultiProductProductExpr)
184  {
185  Parser p;
186  p.setline("3*10*10*10*10*10");
187  CHECK_EQUAL(3e5,p.FFmtRead());
188  p.setline("10*10*10*10*10*3");
189  CHECK_EQUAL(3e5,p.FFmtRead());
190  }
191  TEST(TestReadVariable)
192  {
193  Parser p;
194  p.setline("$a=5");
195  p.doSetVar();
196  p.setline("$col=6");
197  p.doSetVar();
198  p.setline("$a");
199  CHECK_EQUAL(5,p.FFmtRead());
200  p.setline("$a*$col");
201  CHECK_EQUAL(5*6,p.FFmtRead());
202  p.setline("$col*$a");
203  CHECK_EQUAL(5*6,p.FFmtRead());
204  p.setline("$a*7");
205  CHECK_EQUAL(5*7,p.FFmtRead());
206  p.setline("7*$a");
207  CHECK_EQUAL(5*7,p.FFmtRead());
208  p.setline("2^$a");
209  CHECK_EQUAL(32,p.FFmtRead());
210  }
211 }
double FFmtRead(void)
Definition: parser.cpp:472
void setline(const char *const card)
Definition: parser.h:82
bool fp_equal_tol(sys_float x, sys_float y, sys_float tol)
Definition: cddefines.h:904
Definition: parser.h:43
bool lgEOL(void) const
Definition: parser.h:113
void doSetVar(void)
Definition: parser.cpp:161