IterZipMixedTest.php 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. <?php
  2. namespace MathPHP\Tests\Util;
  3. use MathPHP\Util\Iter;
  4. class IterZipMixedTest extends \PHPUnit\Framework\TestCase
  5. {
  6. /**
  7. * @test zip with three different iterables of the same size
  8. * @dataProvider dataProviderForZipThreeIterablesSameSize
  9. * @param array $array
  10. * @param \Iterator $iter
  11. * @param \Traversable $traversable
  12. * @param array $expected
  13. */
  14. public function testZipThreeIterablesSameSize(array $array, \Iterator $iter, \Traversable $traversable, array $expected)
  15. {
  16. // Given
  17. $result = [];
  18. // When
  19. foreach (Iter::zip($array, $iter, $traversable) as [$value1, $value2, $value3]) {
  20. $result[] = [$value1, $value2, $value3];
  21. }
  22. // Then
  23. $this->assertEquals($expected, $result);
  24. }
  25. /**
  26. * @return array
  27. */
  28. public function dataProviderForZipThreeIterablesSameSize(): array
  29. {
  30. return [
  31. [
  32. [],
  33. new ArrayIteratorFixture([]),
  34. new IteratorAggregateFixture([]),
  35. [],
  36. ],
  37. [
  38. [1],
  39. new ArrayIteratorFixture([2]),
  40. new IteratorAggregateFixture([3]),
  41. [[1, 2, 3]],
  42. ],
  43. [
  44. [1, 2],
  45. new ArrayIteratorFixture([3, 4]),
  46. new IteratorAggregateFixture([5, 6]),
  47. [[1, 3, 5], [2, 4, 6]],
  48. ],
  49. [
  50. [1, 2, 3],
  51. new ArrayIteratorFixture([4, 5, 6]),
  52. new IteratorAggregateFixture([7, 8, 9]),
  53. [[1, 4, 7], [2, 5, 8], [3, 6, 9]],
  54. ],
  55. [
  56. [1, 2, 3, 4, 5, 6, 7, 8, 9],
  57. new ArrayIteratorFixture([4, 5, 6, 7, 8, 9, 1, 2, 3]),
  58. new IteratorAggregateFixture([0, 9, 8, 7, 6, 5, 4, 3, 2]),
  59. [[1, 4, 0], [2, 5, 9], [3, 6, 8], [4, 7, 7], [5, 8, 6], [6, 9, 5], [7, 1, 4], [8, 2, 3], [9, 3, 2]],
  60. ],
  61. ];
  62. }
  63. /**
  64. * @test zip with three different iterables of differentSizes
  65. * @dataProvider dataProviderForZipThreeIterablesDifferentSize
  66. * @param array $array
  67. * @param \Iterator $iter
  68. * @param \Traversable $traversable
  69. * @param array $expected
  70. */
  71. public function testZipThreeIterablesDifferentSize(array $array, \Iterator $iter, \Traversable $traversable, array $expected)
  72. {
  73. // Given
  74. $result = [];
  75. // When
  76. foreach (Iter::zip($array, $iter, $traversable) as [$value1, $value2, $value3]) {
  77. $result[] = [$value1, $value2, $value3];
  78. }
  79. // Then
  80. $this->assertEquals($expected, $result);
  81. }
  82. /**
  83. * @return array
  84. */
  85. public function dataProviderForZipThreeIterablesDifferentSize(): array
  86. {
  87. return [
  88. [
  89. [],
  90. new ArrayIteratorFixture([1]),
  91. new IteratorAggregateFixture([1, 2]),
  92. [],
  93. ],
  94. [
  95. [1],
  96. new ArrayIteratorFixture([2, 2]),
  97. new IteratorAggregateFixture([3, 3, 3]),
  98. [[1, 2, 3]],
  99. ],
  100. [
  101. [1, 2, 3],
  102. new ArrayIteratorFixture([3, 4]),
  103. new IteratorAggregateFixture([5, 6, 7]),
  104. [[1, 3, 5], [2, 4, 6]],
  105. ],
  106. [
  107. [1, 2, 3],
  108. new ArrayIteratorFixture([4, 5, 6]),
  109. new IteratorAggregateFixture([7]),
  110. [[1, 4, 7]],
  111. ],
  112. [
  113. [1, 2, 3, 4, 5, 6, 7, 8, 9],
  114. new ArrayIteratorFixture([4, 5, 6, 7, 8, 9, 1, 2]),
  115. new IteratorAggregateFixture([0, 9, 8, 7, 6, 5, 4, 3, 2]),
  116. [[1, 4, 0], [2, 5, 9], [3, 6, 8], [4, 7, 7], [5, 8, 6], [6, 9, 5], [7, 1, 4], [8, 2, 3]],
  117. ],
  118. ];
  119. }
  120. }