# This test is not inside of runtest.py because when a recursive remote
# function is defined inside of another function, we currently can't handle
# that.

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function

import ray

ray.init(num_cpus=1)


@ray.remote
def factorial(n):
    if n == 0:
        return 1
    return n * ray.get(factorial.remote(n - 1))


def test_recursion():
    assert ray.get(factorial.remote(0)) == 1
    assert ray.get(factorial.remote(1)) == 1
    assert ray.get(factorial.remote(2)) == 2
    assert ray.get(factorial.remote(3)) == 6
    assert ray.get(factorial.remote(4)) == 24
    assert ray.get(factorial.remote(5)) == 120
