| 1 | /* |
| 2 | Copyright (c) Marshall Clow 2014. |
| 3 | |
| 4 | Distributed under the Boost Software License, Version 1.0. (See accompanying |
| 5 | file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) |
| 6 | |
| 7 | For more information, see http://www.boost.org |
| 8 | */ |
| 9 | |
| 10 | #include <iostream> |
| 11 | #include <functional> |
| 12 | |
| 13 | #include <boost/config.hpp> |
| 14 | #include <boost/algorithm/algorithm.hpp> |
| 15 | |
| 16 | #define BOOST_TEST_MAIN |
| 17 | #include <boost/test/unit_test.hpp> |
| 18 | |
| 19 | namespace ba = boost::algorithm; |
| 20 | |
| 21 | void test_power () |
| 22 | { |
| 23 | BOOST_CHECK ( ba::power(0, 0) == 1); |
| 24 | BOOST_CHECK ( ba::power(5, 0) == 1); |
| 25 | BOOST_CHECK ( ba::power(1, 1) == 1); |
| 26 | BOOST_CHECK ( ba::power(1, 4) == 1); |
| 27 | BOOST_CHECK ( ba::power(3, 2) == 9); |
| 28 | BOOST_CHECK ( ba::power(2, 3) == 8); |
| 29 | BOOST_CHECK ( ba::power(3, 3) == 27); |
| 30 | BOOST_CHECK ( ba::power(2, 30) == 0x40000000); |
| 31 | BOOST_CHECK ( ba::power(5L, 10) == 3125*3125); |
| 32 | BOOST_CHECK ( ba::power(18, 3) == 18*18*18); |
| 33 | |
| 34 | BOOST_CHECK ( ba::power(3,2) == ba::power(3,2, std::multiplies<int>())); |
| 35 | BOOST_CHECK ( ba::power(3,2, std::plus<int>()) == 6); |
| 36 | } |
| 37 | |
| 38 | |
| 39 | void test_power_constexpr () |
| 40 | { |
| 41 | BOOST_CXX14_CONSTEXPR bool check_zero_power1 = |
| 42 | ba::power(x: 0, n: 0) == 1; |
| 43 | BOOST_CHECK(check_zero_power1); |
| 44 | BOOST_CXX14_CONSTEXPR bool check_zero_power2 = |
| 45 | ba::power(x: 5, n: 0) == 1; |
| 46 | BOOST_CHECK(check_zero_power2); |
| 47 | BOOST_CXX14_CONSTEXPR bool check_one_base1 = |
| 48 | ba::power(x: 1, n: 1) == 1; |
| 49 | BOOST_CHECK(check_one_base1); |
| 50 | BOOST_CXX14_CONSTEXPR bool check_one_base2 = |
| 51 | ba::power(x: 1, n: 4) == 1; |
| 52 | BOOST_CHECK(check_one_base2); |
| 53 | BOOST_CXX14_CONSTEXPR bool check_power1 = |
| 54 | ba::power(x: 3, n: 2) == 9; |
| 55 | BOOST_CHECK(check_power1); |
| 56 | BOOST_CXX14_CONSTEXPR bool check_power2 = |
| 57 | ba::power(x: 2, n: 3) == 8; |
| 58 | BOOST_CHECK(check_power2); |
| 59 | BOOST_CXX14_CONSTEXPR bool check_power3 = |
| 60 | ba::power(x: 3, n: 3) == 27; |
| 61 | BOOST_CHECK(check_power3); |
| 62 | BOOST_CXX14_CONSTEXPR bool check_power4 = |
| 63 | ba::power(x: 2, n: 30) == 0x40000000; |
| 64 | BOOST_CHECK(check_power4); |
| 65 | BOOST_CXX14_CONSTEXPR bool check_power5 = |
| 66 | ba::power(x: 5L, n: 10) == 3125*3125; |
| 67 | BOOST_CHECK(check_power5); |
| 68 | BOOST_CXX14_CONSTEXPR bool check_power6 = |
| 69 | ba::power(x: 18, n: 3) == 18*18*18; |
| 70 | BOOST_CHECK(check_power6); |
| 71 | |
| 72 | BOOST_CXX14_CONSTEXPR bool check_multiple = |
| 73 | ba::power(x: 3, n: 2, op: std::multiplies<int>()) == ba::power(x: 3, n: 2); |
| 74 | BOOST_CHECK(check_multiple); |
| 75 | BOOST_CXX14_CONSTEXPR bool check_plus = |
| 76 | ba::power(x: 3, n: 2, op: std::plus<int>()) == 6; |
| 77 | BOOST_CHECK(check_plus); |
| 78 | } |
| 79 | |
| 80 | |
| 81 | BOOST_AUTO_TEST_CASE( test_main ) { |
| 82 | test_power (); |
| 83 | test_power_constexpr (); |
| 84 | } |
| 85 | |