Skip to content

Commit e0e86fe

Browse files
test paginate
1 parent dac57b6 commit e0e86fe

File tree

4 files changed

+99
-19
lines changed

4 files changed

+99
-19
lines changed

composer.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
"src/Map.php",
4646
"src/None.php",
4747
"src/Only.php",
48+
"src/Paginate.php",
4849
"src/Pipe.php",
4950
"src/Pull.php",
5051
"src/Pull.php",

src/Paginate.php

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?php
2+
declare(strict_types=1);
3+
4+
namespace BrenoRoosevelt;
5+
6+
/**
7+
* Returns array pagination
8+
* If <b>page</b> or <b>per_page</b> is less than 1, this function will return empty array
9+
*
10+
* @param array $items The array to be paginated
11+
* @param int $page The page number (first page is `1`)
12+
* @param int $per_page Number of elements per page
13+
* @param bool $preserve_keys Preserve keys
14+
* @return array
15+
*/
16+
function paginate(array $items, int $page, int $per_page, bool $preserve_keys = true): array
17+
{
18+
if ($per_page < 1 || $page < 1) {
19+
return [];
20+
}
21+
22+
$offset = max(0, ($page - 1) * $per_page);
23+
24+
return array_slice($items, $offset, $per_page, $preserve_keys);
25+
}

src/array_functions.php

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3,25 +3,6 @@
33

44
namespace BrenoRoosevelt;
55

6-
function column(iterable $items, $column): array
7-
{
8-
$result = [];
9-
foreach ($items as $element) {
10-
if (is_array($element) && array_key_exists($column, $element)) {
11-
$result[] = $element[$column];
12-
}
13-
}
14-
15-
return $result;
16-
}
17-
18-
function paginate(array $items, int $page, int $per_page, bool $preserve_keys = true): array
19-
{
20-
$offset = max(0, ($page - 1) * $per_page);
21-
22-
return array_slice($items, $offset, $per_page, $preserve_keys);
23-
}
24-
256
function sum(iterable $items, callable $callback, int $mode = 0)
267
{
278
$sum = 0;

tests/PaginateTest.php

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
<?php
2+
declare(strict_types=1);
3+
4+
namespace BrenoRoosevelt\Tests;
5+
6+
use PHPUnit\Framework\TestCase;
7+
use function BrenoRoosevelt\paginate;
8+
9+
class PaginateTest extends TestCase
10+
{
11+
public function testPaginate()
12+
{
13+
$elements = range(0, 100);
14+
$result = paginate($elements, 1, 5);
15+
$this->assertEquals([0, 1, 2, 3, 4], $result);
16+
}
17+
18+
public function testPaginateCase2()
19+
{
20+
$elements = range(0, 2);
21+
$result = paginate($elements, 1, 5);
22+
$this->assertEquals([0, 1, 2], $result);
23+
}
24+
25+
public function testPaginateCase3()
26+
{
27+
$elements = range(0, 8);
28+
$result = paginate($elements, 2, 5);
29+
$this->assertEquals([5 => 5, 6 => 6, 7 => 7, 8 => 8], $result);
30+
}
31+
32+
public function testPaginateCasePreserveKey()
33+
{
34+
$elements = range(0, 8);
35+
$result = paginate($elements, 2, 5, false);
36+
$this->assertEquals([5, 6, 7, 8], $result);
37+
}
38+
39+
public function testPaginateCaseInvalidPage()
40+
{
41+
$elements = range(0, 8);
42+
$result = paginate($elements, 3, 5);
43+
$this->assertEquals([], $result);
44+
}
45+
46+
public function testPaginateCaseEmpty()
47+
{
48+
$elements = [];
49+
$result = paginate($elements, 3, 5);
50+
$this->assertEquals([], $result);
51+
}
52+
53+
public function testPaginateNegativeOffset()
54+
{
55+
$elements = range(0, 100);
56+
$result = paginate($elements, 3, -2);
57+
$this->assertEquals([], $result);
58+
}
59+
60+
public function testPaginateNegativePage()
61+
{
62+
$elements = range(0, 100);
63+
$result = paginate($elements, -1, 5);
64+
$this->assertEquals([], $result);
65+
}
66+
67+
public function testPaginatePageZero()
68+
{
69+
$elements = range(0, 100);
70+
$result = paginate($elements, 0, 5);
71+
$this->assertEquals([], $result);
72+
}
73+
}

0 commit comments

Comments
 (0)