public function test_fix() { $actual = Functools::fix(function ($rec) { return function ($n) use($rec) { return $n == 0 ? 1 : $n * $rec($n - 1); }; }); $this->assertEquals(120, $actual(5)); }
public function test_functools_wrapper() { $f = function () { }; $this->assertEquals(f::arity('explode'), _::arity('explode')); $this->assertEquals(f::tuple('hoge'), _::tuple('hoge')); $this->assertEquals(f::cons("a", "b"), _::cons("a", "b")); $this->assertEquals(f::curry($f), _::curry($f)); $this->assertEquals(f::fix($f), _::fix($f, $f)); $this->assertEquals(f::compose($f, $f), _::compose($f, $f)); }