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