#!/usr/bin/env perl

use strict;
use warnings;

use lib '../lib';

use Log::Log4perl qw( :easy );

use Autocache qw( autocache );

Log::Log4perl->easy_init( $DEBUG );

use Devel::Size qw( total_size );

Autocache->initialise( filename => './lru.conf', logger => get_logger() );

autocache 'generate_data';

foreach my $i ( 1..2 )
{
    foreach my $n ( 1..10 )
    {
        my $junk = generate_data( $n );
        get_logger()->info( "n: $n - square: " . $junk->{square} );
    }
}

#foreach my $n ( 30..40 )
#{
#    my $junk = generate_data( $n );
#    get_logger()->info( "n: $n - square: " . $junk->{square} );
#}

my $strategy = Autocache->singleton->get_strategy( 'stat' );

my $stats = $strategy->statistics;

get_logger()->info( "create count: " . $stats->{create} );
get_logger()->info( "hit count: " . $stats->{hit} );
get_logger()->info( "miss count: " . $stats->{miss} );
get_logger()->info( "total count: " . ( $stats->{hit} + $stats->{miss} ) );


exit;

sub generate_data
{
    my ($n) = @_;
    my $val = {
        key => $n * 42,
        square => $n * $n,
        root => sqrt( $n ),
    };
    get_logger()->info( "data size: " . total_size( $val ) );
    return $val;
}