00001 #include <UnitTest++.h>
00002 #include "cddefines.h"
00003 #include "parser.h"
00004
00005 namespace {
00006 TEST(TestReadNumber)
00007 {
00008 Parser p;
00009 p.setline("1000");
00010 CHECK_EQUAL(1000,p.FFmtRead());
00011 }
00012 TEST(TestReadOffEnd)
00013 {
00014 Parser p;
00015 p.setline("1000");
00016 CHECK(!p.lgEOL());
00017 CHECK_EQUAL(1000,p.FFmtRead());
00018 CHECK(!p.lgEOL());
00019 CHECK_EQUAL(0,p.FFmtRead());
00020 CHECK(p.lgEOL());
00021 }
00022 TEST(TestReadNegativeNumber)
00023 {
00024 Parser p;
00025 p.setline("-1000");
00026 CHECK_EQUAL(-1000,p.FFmtRead());
00027 }
00028 TEST(TestReadPlusNumber)
00029 {
00030 Parser p;
00031 p.setline("+1000");
00032 CHECK_EQUAL(+1000,p.FFmtRead());
00033 }
00034 TEST(TestReadFraction)
00035 {
00036 Parser p;
00037 p.setline("0.125");
00038 CHECK_EQUAL(0.125,p.FFmtRead());
00039 }
00040 TEST(TestReadEmbeddedFraction)
00041 {
00042 Parser p;
00043 p.setline("Pi is 3.14159");
00044 CHECK(fp_equal_tol(3.14159,p.FFmtRead(),1e-3));
00045 }
00046 TEST(TestReadEmbeddedFractions)
00047 {
00048 Parser p;
00049 p.setline("Pi is 3.14159, e is 2.71828");
00050 CHECK(fp_equal_tol(3.14159,p.FFmtRead(),1e-3));
00051 CHECK(fp_equal_tol(2.71828,p.FFmtRead(),1e-3));
00052 }
00053
00054
00055
00056
00057
00058
00059 TEST(TestReadOKCommaNumber)
00060 {
00061 Parser p;
00062 p.setline("1000,");
00063 CHECK_EQUAL(1000,p.FFmtRead());
00064 }
00065 TEST(TestReadExponentialNumber)
00066 {
00067 Parser p;
00068 p.setline("1e3");
00069 CHECK_EQUAL(1000,p.FFmtRead());
00070 }
00071 TEST(TestReadExponentialFraction)
00072 {
00073 Parser p;
00074 p.setline("0.125e1");
00075 CHECK_EQUAL(1.25,p.FFmtRead());
00076 }
00077 TEST(TestReadPositiveExponentialFraction)
00078 {
00079 Parser p;
00080 p.setline("0.125e+1");
00081 CHECK_EQUAL(1.25,p.FFmtRead());
00082 }
00083 TEST(TestReadNegativeExponentialFraction)
00084 {
00085 Parser p;
00086 p.setline("1.25e-1");
00087 CHECK_EQUAL(0.125,p.FFmtRead());
00088 }
00089 TEST(TestReadExponentNumber)
00090 {
00091 Parser p;
00092 p.setline("10^3,");
00093 CHECK_EQUAL(1000,p.FFmtRead());
00094 }
00095 TEST(TestReadFractionalExponentNumber)
00096 {
00097 Parser p;
00098 p.setline("10.^3.5");
00099 CHECK(fp_equal_tol(3162.277,p.FFmtRead(),1e-2));
00100 }
00101 TEST(TestReadFractionalSquaredNumber)
00102 {
00103 Parser p;
00104 p.setline("2.5^2");
00105 CHECK_EQUAL(6.25,p.FFmtRead());
00106 }
00107 TEST(TestReadFractionalSquaredNegativeNumber)
00108 {
00109
00110 Parser p;
00111 p.setline("-2.5e0^2e0");
00112 CHECK_EQUAL(6.25,p.FFmtRead());
00113 }
00114 TEST(TestReadChainedExponentNumber)
00115 {
00116 Parser p;
00117 p.setline("10^2^3");
00118 CHECK_EQUAL(1e8,p.FFmtRead());
00119 }
00120 TEST(TestReadProductNumber)
00121 {
00122 Parser p;
00123 p.setline("1.25*5.0");
00124 CHECK_EQUAL(6.25,p.FFmtRead());
00125 }
00126 TEST(TestReadProductPowExpr)
00127 {
00128 Parser p;
00129 p.setline("1.25*10^2");
00130 CHECK_EQUAL(125,p.FFmtRead());
00131 }
00132 TEST(TestReadPowProductExpr)
00133 {
00134 Parser p;
00135 p.setline("10^2*1.25");
00136 CHECK_EQUAL(125,p.FFmtRead());
00137 }
00138 TEST(TestReadProductProductExpr)
00139 {
00140 Parser p;
00141 p.setline("2*2*1.25");
00142 CHECK_EQUAL(5,p.FFmtRead());
00143 }
00144 TEST(TestReadDivExpr)
00145 {
00146 Parser p;
00147 p.setline("4/2");
00148 CHECK_EQUAL(2,p.FFmtRead());
00149 }
00150 TEST(TestReadDivDivExpr)
00151 {
00152 Parser p;
00153 p.setline("9/2/2");
00154 CHECK_EQUAL(2.25,p.FFmtRead());
00155 }
00156 TEST(TestReadDivMulExpr)
00157 {
00158 Parser p;
00159 p.setline("9/2*2");
00160 CHECK_EQUAL(9,p.FFmtRead());
00161 }
00162 TEST(TestReadMulDivExpr)
00163 {
00164 Parser p;
00165 p.setline("2*9/2");
00166 CHECK_EQUAL(9,p.FFmtRead());
00167 }
00168 TEST(TestReadExpDivExpExpr)
00169 {
00170 Parser p;
00171 p.setline("3^3/2^2");
00172 CHECK_EQUAL(6.75,p.FFmtRead());
00173 }
00174 TEST(TestReadProductPowProductExpr)
00175 {
00176 Parser p;
00177 p.setline("2*10^2*1.25");
00178 CHECK_EQUAL(250,p.FFmtRead());
00179 }
00180 TEST(TestReadMultiProductProductExpr)
00181 {
00182 Parser p;
00183 p.setline("3*10*10*10*10*10");
00184 CHECK_EQUAL(3e5,p.FFmtRead());
00185 p.setline("10*10*10*10*10*3");
00186 CHECK_EQUAL(3e5,p.FFmtRead());
00187 }
00188 TEST(TestReadVariable)
00189 {
00190 Parser p;
00191 p.setline("$a=5");
00192 p.doSetVar();
00193 p.setline("$col=6");
00194 p.doSetVar();
00195 p.setline("$a");
00196 CHECK_EQUAL(5,p.FFmtRead());
00197 p.setline("$a*$col");
00198 CHECK_EQUAL(5*6,p.FFmtRead());
00199 p.setline("$col*$a");
00200 CHECK_EQUAL(5*6,p.FFmtRead());
00201 p.setline("$a*7");
00202 CHECK_EQUAL(5*7,p.FFmtRead());
00203 p.setline("7*$a");
00204 CHECK_EQUAL(5*7,p.FFmtRead());
00205 p.setline("2^$a");
00206 CHECK_EQUAL(32,p.FFmtRead());
00207 }
00208 }