1use Test::More;
2use strict; use warnings FATAL => 'all';
3
4use List::Objects::WithUtils 'array';
5
6my $arr = array( 1 .. 10 );
7
8my $halved = $arr->nsect(2);
9
10isa_ok $halved, 'List::Objects::WithUtils::Array',
11  'nsect returned array obj';
12
13ok $halved->count == 2, 'nsect(2) returned two items';
14
15ok $halved->get(0)->count == $halved->get(1)->count,
16  'nsect(2) on even set returned even sets';
17
18is_deeply [ $halved->get(0)->all ], [ 1 .. 5 ],
19  'nsect(2) first set ok' or diag explain $halved;
20is_deeply [ $halved->get(1)->all ], [ 6 .. 10 ],
21  'nsect(2) second set ok' or diag explain $halved;
22
23my $thrice = $arr->nsect(3);
24is_deeply [ $thrice->get(0)->all ], [ 1 .. 4 ],
25  'nsect(3) first set ok' or diag explain $thrice;
26is_deeply [ $thrice->get(1)->all ], [ 5 .. 7 ],
27  'nsect(3) second set ok' or diag explain $thrice;
28is_deeply [ $thrice->get(2)->all ], [ 8 .. 10 ],
29  'nsect(4) third set ok' or diag explain $thrice;
30
31my $zeroarg = array(1..10)->nsect;
32isa_ok $zeroarg, 'List::Objects::WithUtils::Array';
33ok $zeroarg->is_empty, 'zero arg nsect produced empty array obj'
34  or diag explain $zeroarg;
35
36my $too_many = array(1..3)->nsect(5);
37ok $too_many->count == 3, 'total sections limited to array count';
38
39ok array->nsect(3)->is_empty, 'nsect on empty array returns empty array';
40
41done_testing;
42