The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use lib qw(t);
use Carp;
use Test::More;
use Test::Deep;
use autohashUtil;
use Hash::AutoHash::Args;
use Hash::AutoHash::Args::V0;

sub test_special_keys {
  my($V,@keys)=@_;
  my $args_class=$V? 'Hash::AutoHash::Args': 'Hash::AutoHash::Args::V0';
  my $label=$V? 'V1': 'V0';
  # test object class for sanity sake
  my $args=new $args_class;
  is(ref $args,$V? 'Hash::AutoHash::Args': 'Hash::AutoHash::Args::V0',
     "$label class is $args_class - sanity check");

  my $args=new $args_class;
  my(@ok,@fail);
  for my $key (@keys) {
    my $value="value_$key";
    $args->$key($value);	# set value
    my $actual=$args->$key;	# get value
#    ($actual eq $value)? push(@ok,$key): push(@fail,$key);
    is($actual,$value,"$label key=$key");
  }
#   # like 'report'
#   $label.=' special keys';
#   unless (@fail) {
# #     pass("$label. keys=@keys");
#     pass($label);
#   } else {
#     fail($label);
#     diag(scalar(@ok)." keys have correct values: @ok");
#     diag(scalar(@fail)." keys have wrong values: @fail");
#   }
}
my @keys=
  (@COMMON_SPECIAL_KEYS,
   map {my $copy=$_; $copy=~s/^autohash/autoargs/; $copy} @Hash::AutoHash::SUBCLASS_EXPORT_OK);
test_special_keys(0,@keys);

my @keys=
  (@COMMON_SPECIAL_KEYS,
   qw(get_args getall_args set_args fix_args fix_keyword fix_keywords is_keyword is_positional),
   map {my $copy=$_; $copy=~s/^autohash/autoargs/; $copy} @Hash::AutoHash::SUBCLASS_EXPORT_OK);
test_special_keys(1,@keys);

done_testing();