append() публичный Метод

Returns values from the original and supplied values, keys will be reindexed.
public append ( array | Traversable $values ) : pinq\ITraversable
$values array | Traversable The values to append
Результат pinq\ITraversable
Пример #1
0
 /**
  * @dataProvider everything
  */
 public function testThatAppendWithEmptyReturnsSameAsTheOriginalButReindexedKeys(\Pinq\ITraversable $traversable, array $data)
 {
     $appendedWithTraversable = $traversable->append([]);
     $appendedWithArray = $traversable->append([]);
     $appendedWithIterator = $traversable->append(new \ArrayObject([]));
     $this->assertMatches($appendedWithTraversable, array_values($data));
     $this->assertMatches($appendedWithArray, array_values($data));
     $this->assertMatches($appendedWithIterator, array_values($data));
 }
Пример #2
0
 /**
  * @dataProvider emptyData
  */
 public function testThatUniqueMaintainsReferences(\Pinq\ITraversable $traversable)
 {
     $data = $this->makeRefs(array_merge(range(1, 10, 2), range(1, 10)));
     $traversable->append($data)->unique()->iterate(function (&$i) {
         $i *= 10;
     });
     $this->assertSame([10, 30, 50, 70, 90, 1, 20, 3, 40, 5, 60, 7, 80, 9, 100], $data);
 }
Пример #3
0
 /**
  * @dataProvider emptyData
  */
 public function testThatSliceMaintainsReferences(\Pinq\ITraversable $traversable)
 {
     $data = $this->makeRefs(range('Z', 'A'));
     $traversable->append($data)->skip(10)->take(7)->slice(5, 3)->iterate(function (&$i) {
         $i = "-{$i}{$i}-";
     });
     $this->assertSame('ZYXWVUTSRQPONML-KK--JJ-IHGFEDCBA', implode('', $data));
 }
Пример #4
0
 /**
  * @dataProvider emptyData
  */
 public function testThatWhereInMaintainsReferences(\Pinq\ITraversable $traversable)
 {
     $data = $this->makeRefs(range(100, 50, -10));
     $traversable->append($data)->whereIn([70, 90])->iterate(function (&$i) {
         $i /= 10;
     });
     $this->assertSame([100, 9, 80, 7, 60, 50], $data);
 }
Пример #5
0
 /**
  * @dataProvider emptyData
  */
 public function testThatIntersectMaintainsReferences(\Pinq\ITraversable $traversable)
 {
     $data = $this->makeRefs(range('A', 'Z', 2));
     //Every 2nd letter: A, C, E, G...
     $traversable->append($data)->intersect(range('A', 'Z', 3))->iterate(function (&$i) {
         $i .= ':';
     });
     $this->assertSame(explode(' ', 'A: C E G: I K M: O Q S: U W Y:'), $data);
 }
Пример #6
0
 /**
  * @dataProvider emptyData
  */
 public function testThatIndexByMaintainsReferences(\Pinq\ITraversable $traversable)
 {
     $data = $this->makeRefs(range('A', 'G', 2));
     $traversable->append($data)->indexBy(function ($i) {
         return $i . '-key';
     })->iterate(function (&$i) {
         $i .= ':';
     });
     $this->assertSame(['A:', 'C:', 'E:', 'G:'], $data);
 }
Пример #7
0
 /**
  * @dataProvider emptyData
  */
 public function testThatSelectDoesNotMaintainReferences(\Pinq\ITraversable $traversable)
 {
     $data = $this->makeRefs(range('Z', 'A'));
     $traversable->append($data)->select(function &(&$i) {
         return $i;
     })->iterate(function (&$i) {
         $i .= $i;
     });
     $this->assertSame(range('Z', 'A'), $data);
 }
Пример #8
0
 /**
  * @dataProvider emptyData
  */
 public function testThatWhereMaintainsReferences(\Pinq\ITraversable $traversable)
 {
     $data = $this->makeRefs(range(0, 30, 2));
     $traversable->append($data)->where(function ($i) {
         return $i % 3 === 0;
     })->iterate(function (&$i) {
         $i .= '?';
     });
     $this->assertSame(['0?', 2, 4, '6?', 8, 10, '12?', 14, 16, '18?', 20, 22, '24?', 26, 28, '30?'], $data);
 }
Пример #9
0
 /**
  * @dataProvider emptyData
  */
 public function testThatReindexMaintainsReferences(\Pinq\ITraversable $traversable)
 {
     $data = $this->makeRefs(range('a', 'z'));
     $traversable->append($data)->indexBy(function ($i) {
         return $i;
     })->reindex()->iterate(function (&$i) {
         $i .= ';';
     });
     $this->assertSame('a;b;c;d;e;f;g;h;i;j;k;l;m;n;o;p;q;r;s;t;u;v;w;x;y;z;', implode('', $data));
 }
Пример #10
0
 /**
  * @dataProvider emptyData
  */
 public function testThatSelectManyMaintainsReferences(\Pinq\ITraversable $traversable)
 {
     $data = $this->makeRefs(range(100, 1, -1));
     $traversable->append($data)->groupBy(function ($i) {
         return $i % 3;
     })->selectMany(function (\Pinq\ITraversable $group) {
         return $group;
     })->iterate(function (&$i) {
         $i *= 10;
     });
     $this->assertSame(range(1000, 10, -10), $data);
 }
 /**
  * @dataProvider theImplementations
  */
 public function testWithNonDeterministicQueryValuesAreNeverCached(\Pinq\ITraversable $traversable, array $data)
 {
     $query = $traversable->append(range(1, 50))->where(function ($i) {
         return (bool) mt_rand(0, 1);
     })->orderByDescending(function ($i) {
         return (int) ($i / 10);
     })->thenByAscending(function ($i) {
         return $i;
     })->slice(0, 50)->select(function ($i) {
         return ++$i;
     })->groupBy(function ($i) {
         return $i % 3;
     })->selectMany(function (\Pinq\ITraversable $group) {
         return $group;
     })->difference(range(15, 30, 2))->groupJoin(range(2, 10))->on(function ($i, $d) {
         return $i % $d === 0;
     })->to(function ($i, \Pinq\ITraversable $factors) {
         return $i . ':' . $factors->implode(',');
     });
     $this->assertNotEquals($query->asArray(), $query->asArray());
 }
Пример #12
0
 public function visitOperation(Segments\Operation $query)
 {
     $otherValues = self::evaluateSource($query->getSource(), $this->resolvedParameters);
     switch ($query->getOperationType()) {
         case Segments\Operation::UNION:
             $this->traversable = $this->traversable->union($otherValues);
             break;
         case Segments\Operation::INTERSECT:
             $this->traversable = $this->traversable->intersect($otherValues);
             break;
         case Segments\Operation::DIFFERENCE:
             $this->traversable = $this->traversable->difference($otherValues);
             break;
         case Segments\Operation::APPEND:
             $this->traversable = $this->traversable->append($otherValues);
             break;
         case Segments\Operation::WHERE_IN:
             $this->traversable = $this->traversable->whereIn($otherValues);
             break;
         case Segments\Operation::EXCEPT:
             $this->traversable = $this->traversable->except($otherValues);
             break;
     }
 }
Пример #13
0
 /**
  * @dataProvider emptyData
  */
 public function testThatOrderByMaintainsReferences(\Pinq\ITraversable $traversable)
 {
     $data = $this->makeRefs(range(1, 100));
     $traversable->append($data)->orderByAscending(function ($i) {
         return (int) ($i / 10);
     })->thenByDescending(function ($i) {
         return $i;
     })->iterate(function (&$i) {
         $i *= 10;
     });
     $this->assertSame(range(10, 1000, 10), $data);
 }
Пример #14
0
 /**
  * @dataProvider emptyData
  */
 public function testThatInterationPassesReferences(\Pinq\ITraversable $traversable)
 {
     $data = $this->makeRefs(range('A', 'Z'));
     $traversable->append($data)->iterate(function (&$i) {
         $i = null;
     });
     $this->assertSame(array_fill_keys(range(0, 25), null), $data);
 }
Пример #15
0
 /**
  * @dataProvider emptyData
  */
 public function testThatGroupByMaintainsArrayReferences(\Pinq\ITraversable $traversable, array $data)
 {
     $data = $this->makeRefs([[1], [2], [1, 2], [3, 5], [4, 2]]);
     $traversable->append($data)->groupBy(function ($i) {
         return count($i);
     })[2]->iterate(function (&$i) {
         $i['foo'] = $i[0];
     });
     $this->assertSame($data, [[1], [2], [1, 2, 'foo' => 1], [3, 5, 'foo' => 3], [4, 2, 'foo' => 4]]);
 }
Пример #16
0
 /**
  * @dataProvider emptyData
  */
 public function testThatGroupJoinOnEqualityMaintainsGroupedDataReferences(\Pinq\ITraversable $traversable)
 {
     $joinData = $this->makeRefs(range(1, 100));
     $traversable->append(range(1, 100, 10))->groupJoin($joinData)->onEquality(function ($o) {
         return (int) ($o / 10);
     }, function ($i) {
         return (int) ($i / 10);
     })->to(function ($o, \Pinq\ITraversable $group) {
         return $group;
     })[3]->iterate(function (&$i) {
         $i *= 10;
     });
     $this->assertSame(array_merge(range(1, 29), range(300, 390, 10), range(40, 100)), $joinData);
 }