// Boost pow_test.cpp test file // Tests the pow function // (C) Copyright Bruno Lalande 2008. // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #include #include #include #include #include template void test_pow(T base) { if (base == 0 && N < 0) return; BOOST_CHECK_CLOSE(::boost::math::pow(base), ::pow(base, static_cast(N)), 0.001); } template void test_with_big_bases() { for (T base = T(); base < T(1000); ++base) test_pow(base); } template void test_with_small_bases() { double base = 0.9; for (int i = 0; i < 10; ++i) { base += base/50; test_pow(base); } } template void test_with_small_exponents() { test_with_big_bases<0, T>(); test_with_big_bases(); test_with_big_bases(); test_with_big_bases(); test_with_big_bases(); test_with_big_bases(); test_with_big_bases(); test_with_big_bases(); test_with_big_bases(); test_with_big_bases(); test_with_big_bases(); test_with_big_bases(); } template void test_with_big_exponents() { test_with_small_bases(); test_with_small_bases(); test_with_small_bases(); test_with_small_bases(); test_with_small_bases(); test_with_small_bases(); test_with_small_bases(); test_with_small_bases(); test_with_small_bases(); test_with_small_bases(); } int test_main(int, char* []) { using namespace std; cout << "Testing with integral bases and positive small exponents" << endl; test_with_small_exponents(); cout << "Testing with integral bases and negative small exponents" << endl; test_with_small_exponents(); cout << "Testing with double precision bases and positive small exponents" << endl; test_with_small_exponents(); cout << "Testing with double precision bases and negative small exponents" << endl; test_with_small_exponents(); cout << "Testing with positive big exponents" << endl; test_with_big_exponents<1>(); cout << "Testing with negative big exponents" << endl; test_with_big_exponents<-1>(); return 0; }