5 use Test::More tests => 7;
9 BEGIN { use_ok('List::Index'); }
10 ok(eval { List::Index->VERSION(1) }, 'version 1.00 compatibility');
12 subtest 'single-char alphabet' => sub {
14 my @uniform = 'a'..'z';
15 my $index = List::Index->new(\@uniform) or return;
16 is_deeply(\@uniform, ['a'..'z'], 'original data unaltered');
17 is_deeply($index->ranges, ['-'], 'single page');
18 is_deeply($index->ranges({pages => 3}), [qw(-i j-q r-)], 'given pages');
19 is_deeply($index->ranges({pagesize => @uniform / 2.1}), [qw(
21 )], 'equivalent pagesize');
24 subtest 'uniform alphanumeric' => sub {
26 my $index = List::Index->new(['aa'..'zz', 1..202]) or return;
27 is_deeply($index->ranges, [qw(
29 .-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-
31 )], 'default ranges');
32 is_deeply($index->ranges({pagesize => 300}), [qw(-c d-n o-)], 'large pagesize');
35 subtest 'context' => sub {
37 my $index = List::Index->new([qw(
38 baa1 baa2 baa3 baaa bbc cbc daaa ea eaaa zed
40 is_deeply($index->ranges({pagesize => 2, context => 0}), [
41 qw(-baa. baa.-bbb bbc-daa. daaa-eaa. eaaa-)
43 is_deeply($index->ranges({pagesize => 2}), [
45 ], 'default context'); # context should be 1
46 is_deeply($index->ranges({pagesize => 2, context => 2}), [
48 ], 'overlap'); # first item equals second due to large context
49 is_deeply($index->ranges({pagesize => 2, context => 0, length => 1}), [
53 #pp($index->ranges({pagesize => 2, context => 2, length => 1}));
56 subtest 'distribution' => sub {
58 my $index = List::Index->new([qw(
59 kkeg kl km kmlu knsy koxb kpeo kuaa kuab kuac
60 kuap kuaq kuq kux kzb lc lg lgu lgua lguc
61 lguq lgur lgus lgx lka lkq lks lln llq llx
64 $index->ranges({ pagesize=>10, context=>3 }),
65 # shorten 'kuap' to 'ku' because lookbehind is 'kp...'
66 # 'lguq' matches 'lg', but may only backtrack to 'lgu'
67 [qw(-kt ku-lgt lgu-)],
71 $index->ranges({ pagesize=>10, context=>4 }),
76 $index->ranges({ pagesize=>10, context=>5 }),
77 # after forwarding 'kuap' to 'lc'
78 # disallow backtracking of 'lguq' to 'lc' to prevent qw[-k l-]
79 # so only lookahead (to 'lkq') remains
81 'lookbehind after full lookahead'