The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use diagnostics;
use Test::More tests => 32;

use Convert::Base32::Crockford;

ok defined &encode_base32, "encode_base32 is exported";
ok defined &decode_base32, "decode_base32 is exported";

my %encodings = (
    '04' => "\x01",
    '04HG' => "\x01\x23",
    '04HMASR' => "\x01\x23\x45\x67",
    '04HMASW9' => "\x01\x23\x45\x67\x89",
    '04HMASW9NF6YY' => "\x01\x23\x45\x67\x89\xab\xcd\xef",
);

for my $encoding (sort keys %encodings) {
    my $string = $encodings{$encoding};
    is encode_base32($string), $encoding, "encode is correct";
    is decode_base32($encoding), $string, "decode is correct";
    $encoding = lc($encoding);
    is decode_base32($encoding), $string, "lowercase decode is correct";
    $encoding =~ s/(..)(?=.)/$1-/g;
    my $orig = $encoding;
    is decode_base32($encoding), $string, "decode with hyphens is correct";
    is $encoding, $orig, "decode is not destructive";
    $encoding =~ s/0/O/;
    is decode_base32($encoding), $string, "decode with letter 'Oh' is correct";
}