use strict;
use warnings;
use lib 't/lib';

use Std;

{
  check_tests(
    sub {
      cmp_deeply([], arraylength(0), "0");
      cmp_deeply([1..3], arraylength(3), "3");
    },
    [
      {
        name => "0",
        actual_ok => 1,
        diag => "",
      },
      {
        name => "3",
        actual_ok => 1,
        diag => "",
      }
    ],
    "len ok"
  );
  check_tests(
    sub {
      cmp_deeply({}, arraylength(2));
    },
    [
      {
        actual_ok => 0,
        diag => <<EOM,
Compared reftype(\$data)
   got : 'HASH'
expect : 'ARRAY'
EOM
      },
    ],
    "bad reftype"
  );
  check_tests(
    sub {
      cmp_deeply([1], arraylength(2));
    },
    [
      {
        actual_ok => 0,
        diag => <<EOM,
Compared array length of \$data
   got : array with 1 element(s)
expect : array with 2 element(s)
EOM
      },
    ],
    "bad length"
  );
  check_tests(
    sub {
      cmp_deeply("a", arraylength(0), "string");
      cmp_deeply({}, arraylength(0), "hash");
    },
    [
      {
        name => "string",
        actual_ok => 0,
        diag => <<EOM,
Compared reftype(\$data)
   got : undef
expect : 'ARRAY'
EOM
      },
      {
        name => "hash",
        actual_ok => 0,
        diag => <<EOM,
Compared reftype(\$data)
   got : 'HASH'
expect : 'ARRAY'
EOM
      },
    ],
    "not array"
  );

  check_tests(
    sub {
      cmp_deeply([[1]], [arraylength(2)]);
    },
    [
      {
        actual_ok => 0,
        diag => <<EOM,
Compared array length of \$data->[0]
   got : array with 1 element(s)
expect : array with 2 element(s)
EOM
      },
    ],
    "deep bad length"
  );
}
