The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl -w

print "1..1\n";

use strict;
use File::CounterFile;

my $cf = "./zz-counter-$$";  # the name for out temprary counter

# Test normal object creation and increment

unlink $cf;
my $c = new File::CounterFile $cf;

my $id1 = $c->inc;
my $id2 = $c->inc;

$c = new File::CounterFile $cf;
my $id3 = $c->inc;
my $id4 = $c->dec;

die "test failed" unless ($id1 == 1 && $id2 == 2 && $id3 == 3 && $id4 == 2);
unlink $cf or die "Can't unlink $cf: $!";

# Test magic increment

$id1 = (new File::CounterFile $cf, "aa98")->inc;
$id2 = (new File::CounterFile $cf)->inc;
$id3 = (new File::CounterFile $cf)->inc;

eval {
    # This should now work because "Decrement is not magical in perl"
    $c = new File::CounterFile $cf; $id4 = $c->dec; $c = undef;
};
die "test failed (No exception to catch)" unless $@;

#print "$id1 $id2 $id3\n";

die "test failed" unless ($id1 eq "aa99" && $id2 eq "ab00" && $id3 eq "ab01");
unlink $cf or die "Can't unlink $cf: $!";

# Test operator overloading

$c = new File::CounterFile $cf, "100";

$c->lock;

$c++;  # counter is now 101
$c++;  # counter is now 102
$c++;  # counter is now 103
$c--;  # counter is now 102 again

$id1 = "$c";
$id2 = ++$c;

$c = undef;  # destroy object

unlink $cf;

die "test failed" unless $id1 == 102 && $id2 == 103;

print "# Selftest for File::CounterFile $File::CounterFile::VERSION ok\n";
print "ok 1\n";