public function testCallbackTypes($callback, $params, $expected, $required, $transformer = null)
{
if (is_null($transformer)) {
$transformer = 'Functional\\id';
}
$curryied = $this->getCurryiedCallable($callback, $params, $required);
$this->assertEquals($transformer($expected), $transformer(call_user_func_array($curryied, $params)));
$length = count($params);
for ($i = 0; $i < $length; ++$i) {
$p = array_shift($params);
$curryied = $curryied($p);
if (count($params) > 0) {
$this->assertTrue(is_callable($curryied));
$this->assertEquals($transformer($expected), $transformer(call_user_func_array($curryied, $params)));
} else {
$this->assertEquals($transformer($expected), $transformer($curryied));
}
}
}