00001 #include <iostream>
00002 #include <istream>
00003 #include <ostream>
00004 #include <sstream>
00005 #include <string>
00006
00007 #include <boost/test/auto_unit_test.hpp>
00008
00009 #include "node.hpp"
00010 #include "variables.hpp"
00011
00012 BOOST_AUTO_TEST_CASE(test_basics)
00013 {
00014 node n(1.0);
00015 BOOST_CHECK_EQUAL(1.0, n.evaluate());
00016 BOOST_CHECK_EQUAL("1", n.to_string());
00017 node s("ident");
00018 BOOST_CHECK_EQUAL("ident", s.to_string());
00019 }
00020
00021 BOOST_AUTO_TEST_CASE(test_negate)
00022 {
00023 node n(1.0);
00024 node neg('-', n);
00025 BOOST_CHECK_EQUAL(-1.0, neg.evaluate());
00026 }
00027
00028 BOOST_AUTO_TEST_CASE(test_add)
00029 {
00030 node a(1.0), b(2.0), c(3.0);
00031 BOOST_CHECK_EQUAL(3.0, node(a, '+', b).evaluate());
00032 BOOST_CHECK_EQUAL(6.0, node(node(a, '+', b), '+', c).evaluate());
00033 }
00034
00035 BOOST_AUTO_TEST_CASE(test_subtract)
00036 {
00037 node a(1.0), b(2.0), c(3.0);
00038 BOOST_CHECK_EQUAL(1.0, node(c, '-', b).evaluate());
00039 BOOST_CHECK_EQUAL(-4.0, node(node(a, '-', b), '-', c).evaluate());
00040 }
00041
00042 BOOST_AUTO_TEST_CASE(test_multiply)
00043 {
00044 node a(1.0), b(2.0), c(3.0);
00045 BOOST_CHECK_EQUAL(3.0, node(a, '*', c).evaluate());
00046 BOOST_CHECK_EQUAL(6.0, node(node(a, '*', b), '*', c).evaluate());
00047 }
00048
00049 BOOST_AUTO_TEST_CASE(test_divide)
00050 {
00051 node a(1.0), b(2.0), c(6.0);
00052 BOOST_CHECK_EQUAL(0.5, node(a, '/', b).evaluate());
00053 BOOST_CHECK_EQUAL(3.0, node(node(c, '/', a), '/', b).evaluate());
00054 }
00055
00056 BOOST_AUTO_TEST_CASE(test_mix)
00057 {
00058 node a(node(1.5), '*', node(2.0));
00059 BOOST_CHECK_EQUAL(3.0, a.evaluate());
00060
00061 node b(node(3.0), '/', node(1.5));
00062 BOOST_CHECK_EQUAL(2.0, b.evaluate());
00063
00064 node c(a, '+', b);
00065 BOOST_CHECK_EQUAL(5.0, c.evaluate());
00066
00067 node d(node(10), '-', node(3));
00068 BOOST_CHECK_EQUAL(7.0, d.evaluate());
00069
00070 node e('-', node(1.0));
00071 BOOST_CHECK_EQUAL(-1.0, e.evaluate());
00072
00073 node f(node(2), '*', e);
00074 BOOST_CHECK_EQUAL(-2.0, f.evaluate());
00075
00076 node g(d, '+', f);
00077 BOOST_CHECK_EQUAL(5.0, g.evaluate());
00078
00079 node h(c, '-', g);
00080 BOOST_CHECK_EQUAL(0.0, h.evaluate());
00081 }
00082
00083 BOOST_AUTO_TEST_CASE(test_var)
00084 {
00085 node n(node(node("half"), node(node(1), '/', node(2))));
00086 BOOST_CHECK_EQUAL(0.5, n.evaluate());
00087 BOOST_CHECK_EQUAL(0.5, get_variable("half"));
00088 }
00089
00090 BOOST_AUTO_TEST_CASE(test_copy)
00091 {
00092 node n(node(node(1), '+', node(2)));
00093 {
00094 node m(n);
00095 n = node('-', m);
00096 BOOST_CHECK_EQUAL(3.0, m.evaluate());
00097 }
00098 BOOST_CHECK_EQUAL(-3.0, n.evaluate());
00099 }
00100
00101 BOOST_AUTO_TEST_SUITE_END();