1use strict; use warnings FATAL => 'all';
2
3BEGIN {
4  unless (eval {; require Test::Without::Module; 1 } && !$@) {
5    require Test::More;
6    Test::More::plan(skip_all => 'these tests require Test::Without::Module');
7  }
8}
9
10use Test::Without::Module 'List::UtilsBy::XS';
11
12use Test::More;
13use List::Objects::WithUtils;
14
15
16ok !$List::Objects::WithUtils::Role::Array::UsingUtilsByXS,
17  'List::UtilsBy::XS not loaded';
18
19# sort_by
20ok array->sort_by(sub { $_->foo })->is_empty, 'empty array sort_by ok';
21my $arr = array(
22  +{ id => 'c' },
23  +{ id => 'a' },
24  +{ id => 'b' },
25);
26
27my $sorted = $arr->sort_by(sub { $_->{id} });
28
29is_deeply
30  [ $sorted->all ],
31  [ +{ id => 'a' }, +{ id => 'b' }, +{ id => 'c' } ],
32  'sort_by ok';
33
34# nsort_by
35ok array->nsort_by(sub { $_->foo })->is_empty, 'empty array nsort_by ok';
36$arr = array(
37  +{ id => 2 },
38  +{ id => 1 },
39  +{ id => 3 },
40);
41
42$sorted = $arr->nsort_by(sub { $_->{id} });
43
44is_deeply
45  [ $sorted->all ],
46  [ +{ id => 1 }, +{ id => 2 }, +{ id => 3 } ],
47  'nsort_by ok';
48
49# uniq_by
50ok array->uniq_by(sub { $_->foo })->is_empty, 'empty array uniq_by ok';
51$arr = array(
52  +{ id => 1 },
53  +{ id => 2 },
54  +{ id => 1 },
55  +{ id => 3 },
56  +{ id => 3 },
57);
58my $uniq = $arr->uniq_by(sub { $_->{id} });
59is_deeply
60  [ $uniq->all ],
61  [
62    +{ id => 1 },
63    +{ id => 2 },
64    +{ id => 3 },
65  ],
66  'uniq_by ok';
67
68done_testing;
69
70