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

#########################

use Test::More tests => 46;
BEGIN { use_ok('Cache::FastMmap') };
use strict;

#########################

# Insert your test code below, the Test::More module is use()ed here so read
# its man page ( perldoc Test::More ) for help writing this test script.

my $FC = Cache::FastMmap->new(init_file => 1, expire_time => 3, raw_values => 1);
ok( defined $FC );
my $FC2 = Cache::FastMmap->new(init_file => 1, expire_time => 5, raw_values => 1);
ok( defined $FC2 );


ok( $FC->set('abc', '123'),    "expire set 1");
is( $FC->get('abc'), '123',    "expire get 2");

ok( $FC2->set('abc', '123'),    "expire set 3");
ok( $FC2->set('def', '123', 3), "expire set 4");
ok( $FC2->set('ghi', '123', 'now'), "expire set 5");
ok( $FC2->set('jkl', '123', 'never'), "expire set 6");
is( $FC2->get('abc'), '123',    "expire get 7");
is( $FC2->get('def'), '123',    "expire get 8");
is( $FC2->get('ghi'), '123',    "expire get 9");
is( $FC2->get('jkl'), '123',    "expire get 10");

sleep(2);

ok( $FC->set('def', '456'),    "expire set 11");
is( $FC->get('abc'), '123',    "expire get 12");
is( $FC->get('def'), '456',    "expire get 13");

is( $FC2->get('abc'), '123',    "expire get 14");
is( $FC2->get('def'), '123',    "expire get 15");
ok( !defined $FC2->get('ghi'),  "expire get 16");
is( $FC2->get('jkl'), '123',    "expire get 17");

sleep(2);

ok( !defined $FC->get('abc'),  "expire get 18");
is( $FC->get('def'), '456',    "expire get 19");

is( $FC2->get('abc'), '123',    "expire get 20");
ok( !defined $FC2->get('def'),  "expire get 21");
ok( !defined $FC2->get('ghi'),  "expire get 22");
is( $FC2->get('jkl'), '123',    "expire get 23");

sleep(2);

ok( !defined $FC->get('abc'),  "expire get 24");
ok( !defined $FC->get('def'),  "expire get 25");

ok( !defined $FC2->get('abc'),  "expire get 26");
ok( !defined $FC2->get('def'),  "expire get 27");
ok( !defined $FC2->get('ghi'),  "expire get 28");
is( $FC2->get('jkl'), '123',    "expire get 29");

ok( $FC->set('abc', '123', '1s'),  "expire set 31");
ok( $FC->set('abc', '123', '1m'),  "expire set 32");
ok( $FC->set('abc', '123', '1d'),  "expire set 33");
ok( $FC->set('abc', '123', '1w'),  "expire set 34");

ok( $FC->set('abc', '123', '1 second'),  "expire set 41");
ok( $FC->set('abc', '123', '1 minute'),  "expire set 42");
ok( $FC->set('abc', '123', '1 day'),     "expire set 43");
ok( $FC->set('abc', '123', '1 week'),    "expire set 44");

ok( $FC->set('abc', '123', 'now'),       "expire set 45");
ok( $FC->set('abc', '123', 'never'),     "expire set 46");

ok( $FC->set('abc', '123', 's'),         "expire set 47");
ok( $FC->set('abc', '123', ''),          "expire set 48");
ok( $FC->set('abc', '123', -1),          "expire set 49");
ok( $FC->set('abc', '123', 'garbage'),   "expire set 50");