1use strict; 2use warnings; 3 4use Test::More; 5 6require Tie::SubstrHash; 7 8my %a; 9 10tie %a, 'Tie::SubstrHash', 3, 3, 3; 11 12$a{abc} = 123; 13$a{bcd} = 234; 14 15is( $a{abc}, 123 ); 16 17is( keys %a, 2 ); 18 19delete $a{abc}; 20 21is( $a{bcd}, 234 ); 22 23is( ( values %a )[0], 234 ); 24 25eval { $a{abcd} = 123 }; 26like( $@, qr/Key "abcd" is not 3 characters long/ ); 27 28eval { $a{abc} = 1234 }; 29like( $@, qr/Value "1234" is not 3 characters long/ ); 30 31eval { $a = $a{abcd}; $a++ }; 32like( $@, qr/Key "abcd" is not 3 characters long/ ); 33 34@a{qw(abc cde)} = qw(123 345); 35 36is( $a{cde}, 345 ); 37 38eval { $a{def} = 456 }; 39like( $@, qr/Table is full \(3 elements\)/ ); 40 41%a = (); 42 43is( keys %a, 0 ); 44 45# Tests contributed by Linc Madison. 46 47my $hashsize = 119; # arbitrary values from my data 48my %test; 49tie %test, "Tie::SubstrHash", 13, 86, $hashsize; 50 51for ( my $i = 1 ; $i <= $hashsize ; $i++ ) { 52 my $key1 = $i + 100_000; # fix to uniform 6-digit numbers 53 my $key2 = "abcdefg$key1"; 54 $test{$key2} = ( "abcdefgh" x 10 ) . "$key1"; 55} 56 57for ( my $i = 1 ; $i <= $hashsize ; $i++ ) { 58 my $key1 = $i + 100_000; 59 my $key2 = "abcdefg$key1"; 60 ok( $test{$key2} ); 61} 62 63is( Tie::SubstrHash::findgteprime(1), 2 ); 64 65is( Tie::SubstrHash::findgteprime(2), 2 ); 66 67is( Tie::SubstrHash::findgteprime(5.5), 7 ); 68 69is( Tie::SubstrHash::findgteprime(13), 13 ); 70 71is( Tie::SubstrHash::findgteprime(13.000001), 17 ); 72 73is( Tie::SubstrHash::findgteprime(114), 127 ); 74 75is( Tie::SubstrHash::findgteprime(1000), 1009 ); 76 77is( Tie::SubstrHash::findgteprime(1024), 1031 ); 78 79is( Tie::SubstrHash::findgteprime(10000), 10007 ); 80 81done_testing(); 82