Exemplo n.º 1
0
 public function testGroupBy()
 {
     $fruitOrders = TestData::$fruit;
     $fnExtractFruitCountsForName = function ($fruit, $name) {
         return Sequence::make($fruit)->filter(FnGen::fnCallChain(FnGen::fnPluck('name'), FnGen::fnIsEqual($name)))->values()->to_a();
     };
     $fruitByName = Sequence::make($fruitOrders)->groupBy(FnGen::fnPluck('name'))->to_a();
     foreach ($fruitByName as $name => $orders) {
         $filteredOrders = $fnExtractFruitCountsForName($fruitOrders, $name);
         $this->assertEquals($filteredOrders, $orders);
     }
     $peopleByAge = Sequence::make(TestData::$people)->groupBy(fn\fnPluck('age'), array_fill(0, 100, array()))->toArray();
     $this->assertEquals(array(), $peopleByAge[0]);
     $peopleAge55 = Sequence::make(TestData::$people)->filter(fn\fnCallChain(fn\fnPluck('age'), fn\fnIsEqual(55)))->toValues();
     $this->assertEquals($peopleAge55, $peopleByAge[55]);
     // Test late binding of $init
     $peopleByAgeFnInit = Sequence::make(TestData::$people)->groupBy(fn\fnPluck('age'), function () {
         return array_fill(0, 100, array());
     })->toArray();
     $this->assertEquals($peopleByAge, $peopleByAgeFnInit);
 }
Exemplo n.º 2
0
 public function testFnNotEqual()
 {
     $fn = FnGen::fnIsNotEqual(0);
     $this->assertFalse($fn(0));
     $this->assertFalse($fn('0'));
     $this->assertFalse($fn(false));
     $this->assertFalse($fn(null));
     $this->assertFalse($fn('hello'));
     // <-- sad truth about PHP.
     $this->assertFalse($fn(0.0));
     $this->assertTrue($fn(1));
     $this->assertTrue($fn(true));
     $this->assertTrue($fn('100'));
     $fn = FnGen::fnIsNotEqual('hello');
     $this->assertFalse($fn('hello'));
     $this->assertFalse($fn(true));
     // <-- also true.
     $this->assertFalse($fn(0));
     // <-- sad truth about PHP.
     $this->assertFalse($fn(0.0));
     // <-- again, sadly this is true
     $this->assertTrue($fn('Hello'));
     $this->assertTrue($fn('0'));
     $this->assertTrue($fn(null));
     $this->assertTrue($fn(false));
     $fn1 = FnGen::fnIsNotEqual(0);
     $fn2 = FnGen::fnIsEqual(1);
     $this->assertEquals($fn1, $fn2);
     // <-- closure function == closure function --- should not be relied on.
 }