1use utf8; 2use strict; 3 4use Test::More tests=>32; 5 6use_ok('Data::HashArray'); 7use Data::HashArray; 8 9 10my $a = Data::HashArray->new( 11 {code=>'FR', name=>'France', size=>'medium'}, 12 {code=>'TR', name=>'Turkey', size=>'medium'}, 13 {code=>'US', name=>'United States', size=>'large'} 14 ); 15 16my $expected; 17 18# ACCESS 19$expected = 'United States'; 20is($a->[2]->{name}, $expected, 'Subscript access [2]'); 21 22$expected = 'France'; 23is($a->[0]->{name}, $expected, 'Subscript access [0]'); 24 25$expected = 'France'; 26is($a->{name}, $expected, 'OVERLOADED hash access.'); 27 28# HASHING over fields 29my $h; 30 31# HASH on 'code' 32$h = $a->hash('code'); # One level hash (returns a hash of a HashArray of hashes) 33 34foreach my $country (@$a) { 35 my $code = $country->{code}; 36 my $name = $country->{name}; 37 my $size = $country->{size}; 38 39 is($h->{$code}->{code}, $code, "Hashed keying on 'code'. Check 'code' on key '$code'"); 40 is($h->{$code}->{name}, $name, "Hashed keying on 'code'. Check 'name' on key '$code'"); 41 is($h->{$code}->{size}, $size, "Hashed keying on 'code'. Check 'size' on key '$code'"); 42} 43 44# HASH on 'code' with a CODE reference. 45$h = $a->hash( sub {shift->{code};}); # One level hash (returns a hash of a HashArray of hashes) 46foreach my $country (@$a) { 47 my $code = $country->{code}; 48 my $name = $country->{name}; 49 my $size = $country->{size}; 50 51 is($h->{$code}->{code}, $code, "CODE-REF. Hashed keying on 'code'. Check 'code' on key '$code'"); 52 is($h->{$code}->{name}, $name, "CODE-REF. Hashed keying on 'code'. Check 'name' on key '$code'"); 53 is($h->{$code}->{size}, $size, "CODE-REF. Hashed keying on 'code'. Check 'size' on key '$code'"); 54} 55 56# HASH on 'size, code' 57$h = $a->hash('size', 'code'); # Two level hash (returns a hash of a hash of a HashArray of hashes) 58 59foreach my $country (@$a) { 60 my $code = $country->{code}; 61 my $name = $country->{name}; 62 my $size = $country->{size}; 63 64 is($h->{$size}->{$code}->{code}, $code, "Hashed keying on 'size, code'. Check 'code' on key '$code'"); 65 is($h->{$size}->{$code}->{name}, $name, "Hashed keying on 'size, code'. Check 'name' on key '$code'"); 66 is($h->{$size}->{$code}->{size}, $size, "Hashed keying on 'size, code'. Check 'size' on key '$code'"); 67} 68 69 70# print STDERR "\nTest OVER baby!\n"; 71ok(1); # survived everything 72 73 741; 75 76