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

use strict;
use warnings;
use Test::More $^O eq 'linux' ? (tests => 15) : skip_all => 'Only works on Linux';
use File::Map qw/map_handle map_anonymous remap/;
use Test::Exception;
use Test::NoWarnings;

open my $fh, '>', undef or die "Couln't open tempfile: $!\n";

print {$fh} "$_ pidgeons are evil\n" for 1 .. 1000;

my $map;
lives_ok { map_handle $map, $fh, '+>' } 'Can map tempfile';

is length $map, -s $fh, 'map length equals file length';

lives_ok { substr $map, 0, 1, '1' } 'Can write to start of map';

print {$fh} "$_ pidgeons are evil\n" for 1001 .. 2000;

lives_ok { remap $map, -s $fh } 'Can remap file';

is length $map, -s $fh, 'map length equals file length';

lives_ok { substr $map, 1, 1, '2' } 'Can write to start of map';

lives_ok { substr $map, -1, 1, '2' } 'Can write to end of map';

my $anon;
lives_ok { map_anonymous $anon, 4096, 'private' } 'Creating an anonymous mapping';

is length $anon, 4096, 'length of anonymous map is alright';

lives_ok { substr $anon, 0, 1, '1' } 'Can write to start of anonymous map';

lives_ok { remap $anon, 65535 } 'Can remap anonymous mapping';

is length $anon, 65535, '$anon is lengthened';

lives_ok { substr $anon, 1, 1, '2' } 'Can write to start of anonymous map';

lives_ok { substr $anon, -1, 1, "\0" } 'Can write to new end of anonymous map';