Esempio n. 1
0
 /**
  * @param callable $callable
  * @param string[] $paramMap
  * @return \Closure
  */
 public static function fnBindFieldsToParams($callable, $paramMap)
 {
     return function ($record) use($callable, $paramMap) {
         $params = Sequence::make($paramMap)->map(FnGen::fnPluckFrom($record))->to_a();
         return call_user_func_array($callable, $params);
     };
 }
Esempio n. 2
0
 public function testFnRevComp()
 {
     $range = range(1, 100);
     $rangeReverse = array_reverse($range);
     // Check the values are sorted.
     $result = $range;
     usort($result, FnSort::fnRevComp(FnGen::fnIdentity()));
     $this->assertEquals($rangeReverse, $result);
 }
Esempio n. 3
0
 public function __construct($fnPrev = null)
 {
     if (!$fnPrev) {
         $fnPrev = FnGen::fnIdentity();
     }
     $this->fnToApply = function ($values) use($fnPrev) {
         return Sequence::make($fnPrev($values));
     };
 }
Esempio n. 4
0
 /**
  * @param Iterator      $iterator
  * @param callable|null $fnMapValueFunction($value, $key)
  * @param callable|null $fnMapKeyFunction($key, $value)
  */
 public function __construct(Iterator $iterator, $fnMapValueFunction, $fnMapKeyFunction)
 {
     parent::__construct($iterator);
     if (!$fnMapKeyFunction) {
         $fnMapKeyFunction = FnGen::fnIdentity();
     }
     if (!$fnMapValueFunction) {
         $fnMapValueFunction = FnGen::fnIdentity();
     }
     $this->fnMapValueFunction = $fnMapValueFunction;
     $this->fnMapKeyFunction = $fnMapKeyFunction;
 }
Esempio n. 5
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);
 }
Esempio n. 6
0
 /**
  * @param Iterator $iterator
  * @return MappedSequence
  */
 public static function sequenceNumericKeys(Iterator $iterator)
 {
     return new MappedSequence($iterator, FnGen::fnIdentity(), FnGen::fnIfMap(FnGen::fnIsNumeric(), FnGen::fnCounter(), FnGen::fnIdentity()));
 }
Esempio n. 7
0
 /**
  * Returns the key of the first element where $fnTest returns true.
  *
  * @param callable|null $fnTest($value, $key)
  * @return mixed
  */
 public function firstKey($fnTest = null)
 {
     $fnTest = $fnTest ?: fn\fnTrue();
     return $this->filter($fnTest)->limit(1)->keys()->reduce(null, FnGen::fnSwapParamsPassThrough(FnGen::fnIdentity()));
 }
Esempio n. 8
0
 public function testFnNestedUKeyBy()
 {
     $data = array(array('name' => 'Bob'), array('name' => 'Alex'), array('name' => 'Bill'), array('name' => 'Ben'), array('name' => 'Ann'), array('name' => 'Tim'), array('name' => 'Jerry'), array('name' => 'Phil'), array('name' => 'Ken'));
     $fn = FnGen::fnNestedUkeyBy(FnGen::fnPluck('name'));
     $expected = Sequence::make($data)->keyBy(FnGen::fnPluck('name'))->to_a();
     $this->assertEquals($expected, $fn($data));
 }