1use Test::More;
2use strict; use warnings FATAL => 'all';
3
4use List::Objects::WithUtils 'array';
5
6is_deeply
7  [ array(1 .. 3)->diff([ 3, 2, 1 ])->all ],
8  [ ],
9  'zero element diff ok';
10
11my $first  = array(qw/a b c d e /);
12my $second =      [qw/a b c x y /];
13
14my $diff = $first->diff($second);
15is_deeply
16  [ $diff->sort->all ],
17  [ qw/d e x y / ],
18  'two-array diff ok'
19  or diag explain $diff;
20
21my $third = array(qw/a b c x z /);
22$diff = $first->diff($second, $third);
23is_deeply
24  [ $diff->sort->all ],
25  [ qw/d e x y z/ ],
26  'three-array diff ok'
27  or diag explain $diff;
28
29$diff = array(1 .. 3)->diff( array('2') );
30is_deeply
31  [ $diff->sort(sub { $_[0] <=> $_[1] })->all ],
32  [ 1, 3 ],
33  'uneven array diff ok'
34  or diag explain $diff;
35
36$diff = array(1 .. 3)->diff(array);
37is_deeply
38  [ $diff->sort(sub { $_[0] <=> $_[1] })->all ],
39  [ 1 .. 3 ],
40  'diff against empty array ok'
41  or diag explain $diff;
42
43$diff = array->diff( [ 1 .. 3 ] );
44is_deeply
45  [ $diff->sort(sub { $_[0] <=> $_[1] })->all ],
46  [ 1 .. 3 ],
47  'diff from empty array ok'
48  or diag explain $diff;
49
50ok array->diff(array)->is_empty, 'empty arrays diff ok';
51
52done_testing
53