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