コード例 #1
0
ファイル: EitherTest.php プロジェクト: tmciver/functional-php
 public function testEitherErrorMessage()
 {
     $errMsg = 'No power in the \'verse can stop me.';
     $either = Either::fromValue(null, $errMsg);
     $expected = Either::left($errMsg);
     $this->assertEquals($expected, $either);
 }
コード例 #2
0
 public function testFlatMapForLeft()
 {
     $eitherInt = Either::left("Error!");
     $eitherIntPlusOne = $eitherInt->flatMap(function ($i) {
         return Either::fromValue($i + 1);
     });
     $this->assertInstanceOf('TMciver\\Functional\\Either\\Left', $eitherIntPlusOne);
 }
コード例 #3
0
 public function testMaybeToEitherForNothing()
 {
     $nothing = Maybe::nothing("I am Error!");
     $conversionVisitor = new MaybeToEither("Hey, I was Nothing but now I'm Left!");
     $actualEither = $nothing->accept($conversionVisitor);
     $expectedEither = Either::left("Hey, I was Nothing but now I'm Left!");
     $this->assertEquals($expectedEither, $actualEither);
 }
コード例 #4
0
 public function testEitherToMaybeForLeft()
 {
     $left = Either::left("I am Error!");
     $conversionVisitor = new EitherToMaybe();
     $actualMaybe = $left->accept($conversionVisitor);
     $expectedMaybe = Maybe::nothing();
     $this->assertEquals($expectedMaybe, $actualMaybe);
 }
コード例 #5
0
 public function testMapLeft()
 {
     $toUpper = function ($str) {
         return strtoupper($str);
     };
     $eitherStr = Either::left("We have a problem!");
     $mappedEitherStr = $eitherStr->map($toUpper);
     $this->assertInstanceOf('TMciver\\Functional\\Either\\Left', $mappedEitherStr);
 }
コード例 #6
0
ファイル: MaybeTTest.php プロジェクト: tmciver/functional-php
 public function testPure()
 {
     // create a MaybeT that represents an `Either Maybe`
     $mt = new MaybeT(Either::left("I am Error."));
     // create a pure value
     $newMt = $mt->pure("Hello!");
     $expectedMt = new MaybeT(Either::fromValue(Maybe::fromValue("Hello!")));
     $this->assertEquals($newMt, $expectedMt);
 }
コード例 #7
0
ファイル: ArrayTest.php プロジェクト: tmciver/functional-php
 public function testTraverseForReturningNull()
 {
     $intsArray = new AssociativeArray([2, 0, 6]);
     $instance = Either::left('');
     $eitherResults = $intsArray->traverse(function ($ignore) {
         return null;
     }, $instance);
     $expected = $instance->fail();
     $this->assertInstanceOf(TMciver\Functional\Either\Left::class, $expected);
 }
コード例 #8
0
ファイル: Left.php プロジェクト: tmciver/functional-php
 public function orElse(callable $f, array $args)
 {
     // Since we don't know if $f will throw an exception, we wrap the call
     // in a try/catch. The result wiil be Left if there's an exception.
     try {
         $eitherResult = call_user_func_array($f, $args);
     } catch (\Exception $e) {
         $eitherResult = Either::left($e->getMessage());
     }
     return $eitherResult;
 }
コード例 #9
0
 public function testApplicativeForLeft()
 {
     // The function
     $eitherFn = Either::left('There is no function!');
     // The args
     $eitherStr = Either::fromValue('Hello world!');
     $eitherStart = Either::fromValue(6);
     $eitherLength = Either::fromValue(5);
     // Apply the function applicatively
     $eitherResult = $eitherFn($eitherStr, $eitherStart, $eitherLength);
     $expectedResult = $eitherFn;
     $this->assertEquals($expectedResult, $eitherResult);
 }
コード例 #10
0
 public function __construct()
 {
     $this->maybet = new MaybeT(Either::left(''));
 }
コード例 #11
0
 public function visitNothing($nothing)
 {
     return Either::left($this->leftVal);
 }