xref: /openbsd/gnu/usr.bin/perl/lib/Tie/SubstrHash.t (revision 3bef86f7)
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