The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

BEGIN {				# Magic Perl CORE pragma
    if ($ENV{PERL_CORE}) {
        chdir 't' if -d 't';
        @INC = '../lib';
    }
}

use Test::More tests => ( 4 * 4 ) + ( 4 * 4 );
use strict;
use warnings;

# modules that we need
use String::Lookup;

# initializations
my $foo= 'foo';
my $bar= 'bar';

# all permutations for offset / increment check
foreach (
  [   0, 10,  10,  20, "just increment" ],
  [   1,  5,   6,  11, "simple offset + increment" ],
  [ 100,  0, 101, 102, "high offset, no increment" ],
  [ 314,  1, 315, 316, "high offset, simple increment" ],
) {
    my ( $offset, $increment, $id_foo, $id_bar, $text )= @{$_};

    # set up the hash
    tie my %hash, 'String::Lookup',
      offset    => $offset,
      increment => $increment,
    ;

    # check lookups
    is( $hash{ \$foo }, $id_foo, "simple string lookup: $text" );
    is( $hash{$id_foo}, $foo,    "simple id lookup: $text" );
    is( $hash{ \$bar }, $id_bar, "another simple string lookup: $text" );
    is( $hash{$id_bar}, $bar,    "another simple id lookup: $text" );
}

# all permutations for init / offset check
foreach (
  [  5, 1, 10, 11, "simple offset override by fill" ],
  [ 15, 1, 10, 16, "fill doesn't override offset" ],
  [  2, 5, 10, 17, "fill contains values matching offset / increment" ],
  [  3, 5, 10, 18, "fill contains values not matching offset / increment" ],
) {
    my ( $offset, $increment, $foo_id, $bar_id, $text )= @{$_};

    # set up the hash
    tie my %hash, 'String::Lookup',
      init      => { $foo => $foo_id },
      offset    => $offset,
      increment => $increment,
    ;

    # check lookup
    is( $hash{ \$foo }, $foo_id, "string lookup after init: $text" );
    is( $hash{$foo_id},    $foo, "id lookup after init: $text" );
    is( $hash{ \$bar }, $bar_id, "another string lookup after init: $text" );
    is( $hash{$bar_id},    $bar, "another id lookup after init: $text" );
}