#!/usr/bin/perl use strict; use warnings; use Test::More; use Test::Moose; #foreach my $impl qw(Cache::Ref::Util::LRU::Array Cache::Ref::Util::LRU::List) { foreach my $impl (qw(Cache::Ref::Util::LRU::List)) { use_ok($impl); isa_ok( my $l = $impl->new, $impl ); does_ok( $l, "Cache::Ref::Util::LRU::API" ); is( $l->lru, undef, "no mru" ); is( $l->mru, undef, "no lru" ); my ( $foo, $bar ) = $l->insert(qw(foo bar)); is( $l->mru, "foo", "get mru" ); is( $l->lru, "bar", "get lru" ); $l->hit($bar); is( $l->mru, "bar", "get mru" ); is( $l->lru, "foo", "get lru" ); my $baz = $l->insert("baz"); is( $l->mru, "baz", "get mru" ); is( $l->lru, "foo", "get lru" ); $l->hit($bar); is( $l->mru, "bar", "get mru" ); is( $l->lru, "foo", "get lru" ); $l->hit($foo); is( $l->mru, "foo", "get mru" ); is( $l->lru, "baz", "get lru" ); is( $l->remove_lru, "baz", "remove lru" ); is( $l->remove_lru, "bar", "remove lru" ); is( $l->remove_lru, "foo", "remove lru" ); is( $l->remove_lru, undef, "remove lru" ); foreach my $remove ( qw(remove_lru remove_mru) ) { $l->insert("foo"); is( $l->lru, "foo", "lru" ); is( $l->mru, "foo", "mru" ); is( $l->$remove, "foo", "remove" ); is( $l->remove_lru, undef, "nothing to remove" ); is( $l->remove_mru, undef, "nothing to remove" ); } $foo = $l->insert("foo"); $bar = $l->insert("bar"); $baz = $l->insert("baz"); $l->hit($baz); is( $l->mru, "baz", "get mru" ); is( $l->lru, "foo", "get lru" ); $l->hit($bar); is( $l->mru, "bar", "get mru" ); is( $l->lru, "foo", "get lru" ); $l->hit($foo); is( $l->mru, "foo", "get mru" ); is( $l->lru, "baz", "get lru" ); $l->hit($baz); is( $l->mru, "baz", "get mru" ); is( $l->lru, "bar", "get lru" ); $l->hit($foo, $bar); is( $l->mru, "foo", "get mru" ); is( $l->lru, "baz", "get lru" ); $l->hit($bar, $baz); is( $l->mru, "bar", "get mru" ); is( $l->lru, "foo", "get lru" ); $l->hit($baz, $foo, $bar); is( $l->remove_lru, "bar", "remove lru" ); is( $l->lru, "foo", "get lru" ); $l->hit($foo); is( $l->mru, "foo", "get mru" ); is( $l->lru, "baz", "get lru" ); is( $l->remove_mru, "foo", "remove mru" ); is( $l->mru, "baz", "get mru" ); is( $l->lru, "baz", "get lru" ); is( $l->remove_mru, "baz" ); is( $l->lru, undef, "no lru" ); is( $l->mru, undef, "no mru" ); ( $foo, $bar, $baz ) = $l->insert(qw(foo bar baz)); $l->remove($bar); is( $l->mru, "foo", "get mru" ); is( $l->lru, "baz", "get lru" ); $l->remove($foo); is( $l->mru, "baz", "get lru" ); is( $l->lru, "baz", "get lru" ); $l->remove($baz); is( $l->lru, undef, "no lru" ); is( $l->mru, undef, "no mru" ); $l->insert(qw(foo bar)); $l->hit; $l->insert; is( $l->mru, "foo", "get mru" ); is( $l->lru, "bar", "get lru" ); $l->clear; is( $l->lru, undef, "no lru" ); is( $l->mru, undef, "no mru" ); $l->clear; is( $l->lru, undef, "no lru" ); is( $l->mru, undef, "no mru" ); } done_testing; # ex: set sw=4 et: