// Copyright (C) 2009-2012 Lorenzo Caminiti // Distributed under the Boost Software License, Version 1.0 // (see accompanying file LICENSE_1_0.txt or a copy at // http://www.boost.org/LICENSE_1_0.txt) // Home at http://www.boost.org/libs/local_function #include #define BOOST_TEST_MODULE TestFactorialSeq #include #include #include struct calculator { std::vector results; void factorials(const std::vector& nums) { int BOOST_LOCAL_FUNCTION( (bind this_) (int num) (bool recursion)(default false) ) { int result = 0; if(num <= 0) result = 1; else result = num * factorial(num - 1, true); if(!recursion) this_->results.push_back(result); return result; } BOOST_LOCAL_FUNCTION_NAME(recursive factorial) std::for_each(nums.begin(), nums.end(), factorial); } }; BOOST_AUTO_TEST_CASE(test_factorial_seq) { std::vector v(3); v[0] = 1; v[1] = 3; v[2] = 4; calculator calc; calc.factorials(v); BOOST_CHECK(calc.results[0] == 1); BOOST_CHECK(calc.results[1] == 6); BOOST_CHECK(calc.results[2] == 24); }