use Test::More 'no_plan';
use Test::NoWarnings;
use_ok('Array::Compare');
my $comp = Array::Compare->new;
my @A = qw/0 1 2 3 4 5 6 7 8/;
my @B = qw/0 1 2 3 4 5 X 7 8/;
my @C = @A;
my %skip1 = (6 => 1);
my %skip2 = (5 => 1);
my %skip3 = (6 => 0);
# Compare two different arrays - should fail
ok(not $comp->compare(\@A, \@B));
# Compare two different arrays but ignore differing column - should succeed
$comp->Skip(\%skip1);
ok($comp->compare(\@A, \@B));
# compare two different arrays but ignore non-differing column - should fail
$comp->Skip(\%skip2);
ok(not $comp->compare(\@A, \@B));
# Compare two different arrays but ignore differing column (badly)
# - should fail as skip value is 0
$comp->Skip(\%skip3);
ok(not $comp->compare(\@A, \@B));
# Change separator and compare two identical arrays - should succeed
$comp->Sep('|');
ok($comp->compare(\@A, \@C));
# These tests should generate fatal errors - hence the evals
# Compare a number with an array
eval { print $comp->compare(1, \@A) };
ok($@);
# Compare an array with a number
eval { print $comp->compare(\@A, 1) };
ok($@);
# Call compare with only one argument
eval { print $comp->compare(\@A) };
ok($@);
# Switch to full comparison
$comp->DefFull(1);
ok($comp->DefFull);
$comp->Skip({});
# @A and @B differ in column 6
# Array context
my @diffs = $comp->compare(\@A, \@B);
ok(scalar @diffs == 1 && $diffs[0] == 6);
# Scalar context
my $diffs = $comp->compare(\@A, \@B);
ok($diffs);
# @A and @B differ in column 6 (which we ignore)
$comp->Skip(\%skip1);
# Array context
@diffs = $comp->compare(\@A, \@B);
ok(not @diffs);
# Scalar context
$diffs = $comp->compare(\@A, \@B);
ok(not $diffs);
# @A and @C are the same
# Array context
@diffs = $comp->compare(\@A, \@C);
ok(not @diffs);
# Scalar context
$diffs = $comp->compare(\@A, \@C);
ok(not $diffs);
# Test arrays of differing length
my @D = (0 .. 5);
my @E = (0 .. 10);
$comp->DefFull(0);
ok( not $comp->compare(\@D, \@E));
$comp->DefFull(1);
@diffs = $comp->compare(\@D, \@E);
ok(@diffs == 5);
@diffs = $comp->compare(\@E, \@D);
ok(@diffs == 5);
$diffs = $comp->compare(\@D, \@E);
ok($diffs == 5);
# Test Perms
my @F = (1 .. 5);
my @G = qw(5 4 3 2 1);
my @H = qw(3 4 1 2 5);
my @I = qw(4 3 6 5 2);
ok($comp->perm(\@F, \@G));
ok($comp->perm(\@F, \@H));
ok(not $comp->perm(\@F, \@I));
my @J = ('array with', 'white space');
my @K = ('array with', 'white space');
ok($comp->compare(\@J, \@K));
# Turn off whitespace
$comp->WhiteSpace(0);
ok(not $comp->compare(\@J, \@K));
$comp->DefFull(0);
ok($comp->compare(\@J, \@K));
# Turn on whitespace
$comp->WhiteSpace(1);
ok(not $comp->compare(\@J, \@K));
my @L = qw(ArRay WiTh DiFfErEnT cAsEs);
my @M = qw(aRrAY wItH dIfFeReNt CaSeS);
ok(not $comp->compare(\@L, \@M));
# Turn of case sensitivity
$comp->Case(0);
ok($comp->compare(\@L, \@M));
$comp->DefFull(1);
ok(not $comp->compare(\@L, \@M));
my @N = (undef, 1 .. 3);
my @O = (undef, 1 .. 3);
$comp->DefFull(0);
ok($comp->compare(\@N, \@O));
$comp->DefFull(1);
ok(not $comp->compare(\@N, \@O));