Merge pull request #904 from kvedala/fix/double_factorial

bug fix: fix self-tests and unsigned comparision to zero
This commit is contained in:
Krishna Vedala 2020-06-25 15:08:46 -04:00 committed by GitHub
commit 3b948d2a04
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,8 +1,9 @@
/** /**
* @file * @file
* @brief Compute double factorial: \f$n!!\f$ * @brief Compute [double
* factorial](https://en.wikipedia.org/wiki/Double_factorial): \f$n!!\f$
* *
* Double factorial of a non-negative integer n, is defined as the product of * Double factorial of a non-negative integer `n`, is defined as the product of
* all the integers from 1 to n that have the same parity (odd or even) as n. * all the integers from 1 to n that have the same parity (odd or even) as n.
* <br/>It is also called as semifactorial of a number and is denoted by * <br/>It is also called as semifactorial of a number and is denoted by
* \f$n!!\f$ * \f$n!!\f$
@ -32,10 +33,38 @@ uint64_t double_factorial_recursive(uint64_t n) {
return n * double_factorial_recursive(n - 2); return n * double_factorial_recursive(n - 2);
} }
/// main function /** Wrapper to run tests using both recursive and iterative implementations.
int main() { * The checks are only valid in debug builds due to the use of `assert()`
uint64_t n; * statements.
std::cin >> n; * \param [in] n number to check double factorial for
assert(n >= 0); * \param [in] expected expected result
std::cout << double_factorial_iterative(n); */
void test(uint64_t n, uint64_t expected) {
assert(double_factorial_iterative(n) == expected);
assert(double_factorial_recursive(n) == expected);
}
/**
* Test implementations
*/
void tests() {
std::cout << "Test 1:\t n=5\t...";
test(5, 15);
std::cout << "passed\n";
std::cout << "Test 2:\t n=15\t...";
test(15, 2027025);
std::cout << "passed\n";
std::cout << "Test 3:\t n=0\t...";
test(0, 1);
std::cout << "passed\n";
}
/**
* Main function
*/
int main() {
tests();
return 0;
} }