#define PROBLEM "http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_1_A" #include <iostream> #include <cassert> #include "../../Util/fix-point.hpp" void FixPoint_test() { const auto factorial = FixPoint([](auto f, int n) -> int { if (n <= 1) return 1; return n * f(n - 1); }); assert(factorial(5) == 120); std::clog << __func__ << " : OK" << std::endl; } int main() { std::cout << "Hello World" << std::endl; FixPoint_test(); return 0; }
#line 1 "test/helloworld/fix-point.test.cpp" #define PROBLEM "http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_1_A" #include <iostream> #include <cassert> #line 2 "Util/fix-point.hpp" #include <functional> /** * @brief FixPoint (ラムダ式の再帰) * * (Ex) FixPoint([&](auto func, int n) -> int {...})(10); */ template <class F> struct FixPoint : F { FixPoint(F&& f) : F(std::forward<F>(f)) {} template <class... Args> decltype(auto) operator()(Args&&... args) const { return F::operator()(*this, std::forward<Args>(args)...); } }; #line 6 "test/helloworld/fix-point.test.cpp" void FixPoint_test() { const auto factorial = FixPoint([](auto f, int n) -> int { if (n <= 1) return 1; return n * f(n - 1); }); assert(factorial(5) == 120); std::clog << __func__ << " : OK" << std::endl; } int main() { std::cout << "Hello World" << std::endl; FixPoint_test(); return 0; }