IterZipIteratorTest.php 3.7 KB

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