The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# -*- coding:utf-8; mode:CPerl -*-
use 5.8.0;
use Test; use strict; use warnings;
our $lastmod = q[Time-stamp: "2016-11-26 04:19:16 MST"];

my @Bank_Numbers;
BEGIN { @Bank_Numbers = (0 .. 0xFF); }
BEGIN {plan tests =>  2  +  4 * @Bank_Numbers};

ok 1; print "# ...just saying hello.\n";

print "# ($lastmod)\n";
print "#\n# LOADING ALL MODULES... and checking fullness of each table.\n";

our $Bank_Length_Should_Be = 256;

use Text::Unidecode;
print "# Text::Unidecode version $Text::Unidecode::VERSION\n";

$| = 1;

print "#\n", map "#\t$_\n",
  '  For each iteration:',
  '   1:  It\'s true that "defined unidecode $char"',
  '   2:  We\'ve got a value',
  '   3:  It\'s an arrayref',
  '   4:  The arrayref is the right size',
;

#
#  TODO: instead have @Bank_Numbers, above, use contents of Text::Unidecode::BankList instead of (1 .. 0xff);
#  NOTE: And it WILL have to change once we support surrogates

$Text::Unidecode::Note_Broken_Tables = 1;

use Text::Unidecode::x00 ();

Bank:
foreach my $banknum ( @Bank_Numbers ) {
  my $charnum = $banknum << 8;

  # Shut up warnings about UTF-16 surrogate characters
  # This is per https://rt.cpan.org/Ticket/Display.html?id=97456
  my $char = do { no warnings 'utf8'; chr( $charnum ) };

  printf "##\n# About to test the size of banknum 0x%02x via charnum U+%04x\:\n",
    $banknum, $charnum
  ;

  if(ok( defined( unidecode($char) ))) {  # ==================== OK1
    # yay
  } else {
    print "# Somehow couldn't get a defined value from unidecode for #$charnum\n";
    skip(1);
    skip(1);
    skip(1);
    next Bank;
  }

  my $bank_arrayref =
        $Text::Unidecode::Broken_Table_Copy{$banknum}
    ||  $Text::Unidecode::Char[$banknum]
    ||  undef
  ;

  if(ok( defined($bank_arrayref) )) {   # ==================== OK2
    # yay
  } else {
    print "# No \$Text::Unidecode::Char[$banknum] in memory?!\n";
    skip(1);
    skip(1);
    next Bank;
  }

  if(ok( ref($bank_arrayref), 'ARRAY' )) {   # ==================== OK3
    # yay
  } else {
    print "# \$Text::Unidecode::Char[$banknum] isn't an arrayref?!\n",
      "# It's: \"", $bank_arrayref, "\" - ", ref($bank_arrayref) || "not a ref", "\n";
    skip(1);
    next Bank;
  }

  my $bank_name = sprintf "Bank_0x%02x", $banknum;
  if( ok( scalar(@{ $bank_arrayref  }), $Bank_Length_Should_Be, " Length of $bank_name" )) { #  ==================== OK4
    next Bank;
  }

}

#print map "$_ : $INC{$_}\n", sort keys %INC;

print "# Bye:\n";
ok 1;  #Byebye.