From: Mischa POSLAWSKY Date: Sat, 14 Nov 2009 19:00:34 +0000 (+0100) Subject: +++: penalty X-Git-Url: http://git.shiar.nl/perl/list-index.git/commitdiff_plain/e5fa8cd7b5cc84943c5f7c32c4f34974613a235b +++: penalty --- diff --git a/lib/List/Index.pm b/lib/List/Index.pm index 06c2727..339bd7d 100644 --- a/lib/List/Index.pm +++ b/lib/List/Index.pm @@ -55,9 +55,10 @@ sub ranges { # use this link if it's shorter if ($trim < length $link) { $link = substr $after, 0, $trim; -# $offset += $context + 1; - $self->[$offset + ++$penalty] =~ /^\Q$link/ - while $offset + $penalty < $#$self; + for ($offset .. $#$self) { + last if $self->[$offset + $penalty] =~ /^\Q$link/; + $penalty++; + } } } } diff --git a/t/10-ranges.t b/t/10-ranges.t index f935820..d96ebb5 100644 --- a/t/10-ranges.t +++ b/t/10-ranges.t @@ -54,14 +54,12 @@ subtest 'context' => sub { }; subtest 'distribution' => sub { - plan tests => 2; + plan tests => 3; my $index = List::Index->new([qw( kkeg kl km kmlu knsy koxb kpeo kuaa kuab kuac kuap kuaq kuq kux kzb lc lg lgu lgua lguc lguq lgur lgus lgx lka lkq lks lln llq llx )]) or return; -TODO: { - local $TODO = 'under development'; is_deeply( $index->ranges({ pagesize=>10, context=>3 }), # shorten 'kuap' to 'ku' because lookbehind is 'kp...' @@ -69,11 +67,18 @@ TODO: { [qw(-kt ku-lgt lgu-)], 'lookbehind' ); -} is_deeply( $index->ranges({ pagesize=>10, context=>4 }), [qw(-kt ku-lf lg-)], 'maximal lookahead' ); + is_deeply( + $index->ranges({ pagesize=>10, context=>5 }), + # after forwarding 'kuap' to 'lc' + # disallow backtracking of 'lguq' to 'lc' to prevent qw[-k l-] + # so only lookahead (to 'lkq') remains + [qw(-k l-lj lk-)], + 'lookbehind after full lookahead' + ); }