cloudy trunk
Loading...
Searching...
No Matches
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 "cdstd.h"
4#include <UnitTest++.h>
5#include "cddefines.h"
6#include "parser.h"
7
8namespace {
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}
bool fp_equal_tol(sys_float x, sys_float y, sys_float tol)
Definition cddefines.h:854
double FFmtRead(void)
Definition parser.cpp:353
void setline(const char *const card)
Definition parser.h:69
bool lgEOL(void) const
Definition parser.h:98
void doSetVar(void)
Definition parser.cpp:119