#!/usr/bin/perl use strict; use warnings; use Test::More; use_ok 'Cache::Ref::Random'; my $c = Cache::Ref::Random->new( size => 5 ); my ( $hit, $miss ) = ( 0, 0 ); for ( 1 .. 2000 ) { my $key = 1 + int rand 8; if ( $c->get($key) ) { $hit++; } else { $miss++; $c->set($key => $key); } } cmp_ok( $hit, '>=', $miss, "more cache hits than misses during random access of small sigma ($hit >= $miss)" ); ( $hit, $miss ) = ( 0, 0 ); for ( 1 .. 100 ) { foreach my $key ( 1 .. 8 ) { if ( $c->get($key) ) { $hit++; } else { $miss++; $c->set($key => $key); } } } cmp_ok( $hit, '>=', $miss / 3, "hit rate in linear scans($hit >= $miss / 3)" ); { # Tests shouldn't use a private method, but right now I can't think # of other way to test that the expire method is actually removing # the desired number of elements my $c = Cache::Ref::Random->new( size => 100 ); for (1..10) { $c->set( $_ => $_ ) for (1..100); is $c->_index_size, 100; $c->expire(50); is $c->_index_size, 50; $c->clear; } } done_testing; # ex: set sw=4 et: