use utf8; use strict; use warnings; use open qw( :encoding(UTF-8) :std ); use Test::More tests => 28; use Lingua::Stem::Any; my $s = new_ok 'Lingua::Stem::Any', [ language => 'en' ]; my $cache1 = { $s->source => { en => { fooing => 'foo' } } }; my $cache2 = { $s->source => { en => { gooing => 'goo' } } }; can_ok $s, qw( cache clear_cache _cache_data ); ok !$s->cache, 'no caching by default'; is $s->stem('fooing'), 'foo', 'default stemming'; is_deeply $s->_cache_data, {}, 'cache is empty when not enabled'; $s->cache(1); ok $s->cache, 'caching enabled via method'; is_deeply $s->_cache_data, {}, 'cache is empty by default'; is $s->stem('fooing'), 'foo', 'stemming with caching enabled'; is_deeply $s->_cache_data, $cache1, 'stem is cached'; is $s->stem('fooing'), 'foo', 'stemming using cache'; # don't try this at home! $s->_cache_data->{$s->source}{en}{fooing} = 'goo'; is $s->stem('fooing'), 'goo', 'confirm caching with manual cache munging'; $s->clear_cache; ok $s->cache, 'caching still enabled after clearing'; is_deeply $s->_cache_data, {}, 'cache is empty after clearing'; is $s->stem('fooing'), 'foo', 'stemming after cache is cleared'; is_deeply $s->_cache_data, $cache1, 'stem is cached'; $s->cache(0); ok !$s->cache, 'caching is desabled'; is_deeply $s->_cache_data, {}, 'cache is cleared when disabling'; is $s->stem('fooing'), 'foo', 'stemming after disabling cache'; is_deeply $s->_cache_data, {}, 'cache unpopulated after stemming when disabled'; my $s2 = new_ok 'Lingua::Stem::Any', [ language => 'en', cache => 1, ]; ok $s2->cache, 'caching enabled via instantiator'; is_deeply $s2->_cache_data, {}, 'cache is empty by default'; is $s2->stem('fooing'), 'foo', 'stemming with caching enabled'; is_deeply $s2->_cache_data, $cache1, 'stem is cached'; my $s3 = new_ok 'Lingua::Stem::Any', [ language => 'en', cache => 1, ]; is $s3->stem('gooing'), 'goo', 'stemming with caching enabled'; is_deeply $s2->_cache_data, $cache1, 'cache is per object'; is_deeply $s3->_cache_data, $cache2, 'cache is per object';