From e5fa8cd7b5cc84943c5f7c32c4f34974613a235b Mon Sep 17 00:00:00 2001 From: Mischa POSLAWSKY Date: Sat, 14 Nov 2009 20:00:34 +0100 Subject: [PATCH] +++: penalty --- lib/List/Index.pm | 7 ++++--- t/10-ranges.t | 13 +++++++++---- 2 files changed, 13 insertions(+), 7 deletions(-) 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' + ); } -- 2.30.0