XXX: center page distribution
authorMischa POSLAWSKY <perl@shiar.org>
Fri, 13 Nov 2009 01:24:52 +0000 (02:24 +0100)
committerMischa POSLAWSKY <perl@shiar.org>
Fri, 13 Nov 2009 01:24:52 +0000 (02:24 +0100)
Odd items gravitated to later pages, for example a..z:

abcdefgh ijklmnopq rstuvwxyz

Change initial offset to create a more uniform distribution:

abcdefghi jklmnopq rstuvwxyz

lib/List/Index.pm
t/10-ranges.t

index dca0d1f3970b83ffad665fc385ea2ed00b8bd778..483d1eb430104ad17cc4b6adf9e06b492da91796 100644 (file)
@@ -23,7 +23,7 @@ sub ranges {
        my $pages    = $options->{pages   } || 1 + int $#$self / $pagesize;
 
        $pagesize = @$self / $pages;
-       my $offset = $pagesize;
+       my $offset = $pagesize + .5;
        my @links = ('');
        while ($offset < @$self) {
                my $link = substr $self->[$offset], 0, $length;
index aa87a87023d1d35d9ddfadc31656a8f5871f6a71..a1bb115c637e5889a6fcb27229ebbc6902925a00 100644 (file)
@@ -14,17 +14,18 @@ my @uniform = 'a'..'z';
 ok(my $index = List::Index->new(\@uniform), 'object (single-char values)');
 is_deeply(\@uniform, ['a'..'z'], 'original data unaltered');
 is_deeply($index->ranges, ['-'], 'single page');
-is_deeply($index->ranges({pages => 3}), [qw(-h i-q r-)], 'given pages');
+is_deeply($index->ranges({pages => 3}), [qw(-i j-q r-)], 'given pages');
 is_deeply($index->ranges({pagesize => @uniform / 2.1}), [qw(
-       -h i-q r-
+       -i j-q r-
 )], 'equivalent pagesize');
 }
 
 {
-ok(my $index = List::Index->new(['aa'..'zz', 1..193]), 'non-alphabetic values (uniform)');
+ok(my $index = List::Index->new(['aa'..'zz', 1..202]), 'non-alphabetic values (uniform)');
 is_deeply($index->ranges, [qw(
-       -. .
-       a-b c-dr ds-fn fo-hk hl-jg jh-k l-m n-o p-qr qs-sn so-uk ul-wg wh-x y-
+       -.
+       .-bp bq-dm dn-fi fj-hf hg-i j-k l-m n-os ot-qp qq-sm sn-uj uk-wf wg-x y-
+
 )], 'default ranges');
 is_deeply($index->ranges({pagesize => 300}), [qw(-c d-o p-)], 'large pagesize');
 }