<?php 
 
namespace Tests\Collections; 
 
use Collections\ArrayList; 
 
class RxTest extends CollectionsTestCase 
{ 
 
    public function peopleProvider() 
    { 
        $user = new \stdClass(); 
        $user->name = 'Test'; 
 
        $male = new \stdClass(); 
        $male->name = 'Marc'; 
        $male->user = $user; 
        $male->gender = 'male'; 
        $male->age = 40; 
 
        $male2 = new \stdClass(); 
        $male2->name = 'Anderson'; 
        $male2->user = $user; 
        $male2->gender = 'male'; 
        $male2->age = 19; 
 
        $female = new \stdClass(); 
        $female->name = 'Ana Martha'; 
        $female->user = $user; 
        $female->gender = 'female'; 
        $female->age = 21; 
 
        $female2 = new \stdClass(); 
        $female2->name = 'Daize'; 
        $female2->gender = 'female'; 
        $female2->age = 30; 
 
        return [ 
            [new ArrayList([$male, $male2, $female, $female2])] 
        ]; 
    } 
 
    /** 
     * 
     * @param $people 
     * @dataProvider peopleProvider 
     */ 
    public function testExtractSucess(ArrayList $people) 
    { 
        $this->assertEquals($people->extract('name')->toArray(), ['Marc', 'Anderson', 'Ana Martha', 'Daize']); 
    } 
 
//    public function testUnfold() 
//    { 
//        $collection = new ArrayList([[1, 2, 3], [4, 5]]); 
//        dump($collection->unfold()->toArray()); 
//        $this->assertEquals($collection->unfold()->toArray(), [1, 2, 3, 4, 5]); 
//    } 
 
 
    /** 
     * @param $people 
     * @dataProvider peopleProvider 
     */ 
    public function testReject(ArrayList $people) 
    { 
        $ladies = $people->reject(function ($person) { 
            return $person->gender === 'male'; 
        }); 
 
        $this->assertCount(2, $ladies); 
    } 
 
    /** 
     * @param $people 
     * @dataProvider peopleProvider 
     */ 
    public function testSomePeople(ArrayList $people) 
    { 
        $hasYoungPeople = $people->some(function ($person) { 
            return $person->age < 21; 
        }); 
 
        $this->assertTrue($hasYoungPeople); 
    } 
 
    /** 
     * @param $people 
     * @dataProvider peopleProvider 
     */ 
    public function testMachName($people) 
    { 
        $commentsFromMark = $people->match(['user.name' => 'Test']); 
        $this->assertCount(3, $commentsFromMark); 
    } 
 
    public function testReduce() 
    { 
        $collection = new ArrayList([100, 200]); 
        $totalPrice = $collection->reduce(function ($accumulated, $orderLine) { 
            return $accumulated + $orderLine; 
        }, 0); 
 
        $this->assertEquals(300, $totalPrice); 
    } 
 
    /** 
     * @param $people 
     * @dataProvider peopleProvider 
     */ 
    public function testSample(ArrayList $people) 
    { 
        $testSubjects = $people->sample(20); 
        $this->assertNotEmpty($testSubjects); 
    } 
}
 
 |