test() public static méthode

Generic test to verify if a type obey the applicative laws.
public static test ( callable $assertEqual, callable $pure, Widmogrod\FantasyLand\Applicative $u, Widmogrod\FantasyLand\Applicative $v, Widmogrod\FantasyLand\Applicative $w, callable $f, mixed $x )
$assertEqual callable Asserting function (Applicative $a1, Applicative $a2, $message)
$pure callable Applicative "constructor"
$u Widmogrod\FantasyLand\Applicative Applicative f => f (a -> b)
$v Widmogrod\FantasyLand\Applicative Applicative f => f (a -> b)
$w Widmogrod\FantasyLand\Applicative Applicative f => f (a -> b)
$f callable (a -> b)
$x mixed Value to put into a applicative
 /**
  * @dataProvider provideApplicativeTestData
  */
 public function test_it_should_obey_applicative_laws(Applicative $u, Applicative $v, Applicative $w, callable $f, $x)
 {
     ApplicativeLaws::test(f\curryN(3, [$this, 'assertEquals']), f\curryN(1, Identity::of), $u, $v, $w, $f, $x);
 }
 /**
  * @dataProvider provideApplicativeTestData
  */
 public function test_it_should_obey_applicative_laws($pure, Applicative $u, Applicative $v, Applicative $w, callable $f, $x, $reader)
 {
     ApplicativeLaws::test(function (Reader $a, Reader $b, $message) use($reader) {
         $this->assertEquals($a->runReader($reader), $b->runReader($reader), $message);
     }, $pure, $u, $v, $w, $f, $x);
 }
 /**
  * @dataProvider provideApplicativeTestData
  */
 public function test_it_should_obey_applicative_laws($pure, Applicative $u, Applicative $v, Applicative $w, callable $f, $x)
 {
     ApplicativeLaws::test(function (Writer $a, Writer $b, $message) {
         $this->assertEquals($a->runWriter(), $b->runWriter(), $message);
     }, $pure, $u, $v, $w, $f, $x);
 }
 /**
  * @dataProvider provideApplicativeTestData
  */
 public function test_it_should_obey_applicative_laws($pure, Applicative $u, Applicative $v, Applicative $w, callable $f, $x, $state)
 {
     ApplicativeLaws::test(function (State $a, State $b, $message) use($state) {
         $this->assertEquals($a->runState($state), $b->runState($state), $message);
     }, f\curryN(1, $pure), $u, $v, $w, $f, $x);
 }