- Main Page
- Classes
- Files

# test_number.cpp

Go to the documentation of this file.

    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 "calc_error.hpp"
    00010 #include "number.hpp"
    00011
    00012 BOOST_AUTO_TEST_CASE(test_basics)
    00013 {
    00014   number n(1L);
    00015   BOOST_CHECK_EQUAL("1", n.to_string());
    00016   number m(2.0);
    00017   BOOST_CHECK_EQUAL("2", m.to_string());
    00018   m = n;
    00019   BOOST_CHECK_EQUAL("1", m.to_string());
    00020   number x((number(n)));
    00021   BOOST_CHECK_EQUAL("1", x.to_string());
    00022 }
    00023
    00024 BOOST_AUTO_TEST_CASE(test_library)
    00025 {
    00026   number i(1), f(2.0), v;
    00027   std::stringstream stream;
    00028   i.save(stream);
    00029   f.save(stream);
    00030   v.save(stream);
    00031
    00032   number n1(stream);
    00033   number n2(stream);
    00034   number n3(stream);
    00035
    00036   BOOST_CHECK_EQUAL(number(1), n1);
    00037   BOOST_CHECK_EQUAL(number(2), n2);
    00038   BOOST_CHECK_EQUAL("",  n3.to_string());
    00039 }
    00040
    00041 BOOST_AUTO_TEST_CASE(test_compare)
    00042 {
    00043   BOOST_CHECK(number(1) < number(2));
    00044   BOOST_CHECK(number(1) <= number(2));
    00045   BOOST_CHECK(number(1) != number(2));
    00046   BOOST_CHECK(number(2) > number(1));
    00047   BOOST_CHECK(number(2) >= number(1));
    00048   BOOST_CHECK(number(2) != number(1));
    00049   BOOST_CHECK(number(1) == number(1));
    00050   BOOST_CHECK(not (number(1) != number(1)));
    00051   BOOST_CHECK(not (number(1) > number(2)));
    00052   BOOST_CHECK(not (number(1) >= number(2)));
    00053   BOOST_CHECK(not (number(1) == number(2)));
    00054   BOOST_CHECK(not (number(2) < number(1)));
    00055   BOOST_CHECK(not (number(2) <= number(1)));
    00056   BOOST_CHECK(not (number(2) == number(1)));
    00057
    00058   BOOST_CHECK(number(1) < number(1.5));
    00059   BOOST_CHECK(number(1) <= number(1.5));
    00060   BOOST_CHECK(number(1) != number(1.5));
    00061   BOOST_CHECK(number(1.5) > number(1));
    00062   BOOST_CHECK(number(1.5) >= number(1));
    00063   BOOST_CHECK(number(1.5) != number(1));
    00064   BOOST_CHECK(number(1.0) == number(1));
    00065 }
    00066
    00067 BOOST_AUTO_TEST_CASE(test_add)
    00068 {
    00069   number a(1.0), b(2), c;
    00070   c = a + b;
    00071   BOOST_CHECK_EQUAL(number(3), c);
    00072 }
    00073
    00074 BOOST_AUTO_TEST_CASE(test_subtract)
    00075 {
    00076   number a(2.0), b(1), c;
    00077   c = a - b;
    00078   BOOST_CHECK_EQUAL(number(1), c);
    00079 }
    00080
    00081 BOOST_AUTO_TEST_CASE(test_multiply)
    00082 {
    00083   number a(2.0), b(3), c;
    00084   c = a * b;
    00085   BOOST_CHECK_EQUAL(number(6), c);
    00086 }
    00087
    00088 BOOST_AUTO_TEST_CASE(test_divide)
    00089 {
    00090   number a(5), b(2), c;
    00091   c = a / b;
    00092   BOOST_CHECK_EQUAL(number(rational<long>(5, 2)), c);
    00093   a = number(5.0);
    00094   c = a / b;
    00095   BOOST_CHECK_EQUAL(number(2.5), c);
    00096   BOOST_CHECK_THROW(a / number(0), calc_error);
    00097 }
    00098
    00099 BOOST_AUTO_TEST_CASE(test_rational)
    00100 {
    00101   number half(rational<long>(1, 2));
    00102   number a(half);
    00103   a = a * number(2);
    00104   BOOST_CHECK_EQUAL(number(1), a);
    00105   a = a / number(3);
    00106   a = a * number(3);
    00107   BOOST_CHECK_EQUAL(number(1), a);
    00108   a = a - half;
    00109   BOOST_CHECK_EQUAL(half, a);
    00110   a = half + a;
    00111   BOOST_CHECK_EQUAL(number(1), a);
    00112 }