The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
#!perl -w

use strict;
use Test::More tests => 36;

use XS::Assert;

use XSLoader;
XSLoader::load('XS::Assert');


package
    XS::Assert;

use Test::More;

my $s;
close STDERR;
open STDERR, '>', \$s;

# type

# AV
eval{ assert_sv_is_avref(undef) };
like $@, qr/\b failed \b/xms;;
diag $@ if -d 'inc/.author';

eval{ assert_sv_is_avref("foo") };
like $@, qr/\b failed \b/xms;;

eval{ assert_sv_is_avref('') };
like $@, qr/\b failed \b/xms;;

eval{ assert_sv_is_avref(10) };
like $@, qr/\b failed \b/xms;;

eval{ assert_sv_is_avref([]) };
is $@, '';

eval{ assert_sv_is_avref({}) };
like $@, qr/\b failed \b/xms;;


eval{ assert_sv_is_avref(sub{}) };
like $@, qr/\b failed \b/xms;;

eval{ assert_sv_is_avref(*ok) };
like $@, qr/\b failed \b/xms;;

# HV

eval{ assert_sv_is_hvref(undef) };
like $@, qr/\b failed \b/xms;;

eval{ assert_sv_is_hvref("foo") };
like $@, qr/\b failed \b/xms;;

eval{ assert_sv_is_hvref('') };
like $@, qr/\b failed \b/xms;;

eval{ assert_sv_is_hvref(10) };
like $@, qr/\b failed \b/xms;;

eval{ assert_sv_is_hvref([]) };
like $@, qr/\b failed \b/xms;;

eval{ assert_sv_is_hvref({}) };
is $@, '';

eval{ assert_sv_is_hvref(sub{}) };
like $@, qr/\b failed \b/xms;;

eval{ assert_sv_is_hvref(*ok) };
like $@, qr/\b failed \b/xms;;

# CV

eval{ assert_sv_is_cvref(undef) };
like $@, qr/\b failed \b/xms;;

eval{ assert_sv_is_cvref("foo") };
like $@, qr/\b failed \b/xms;;

eval{ assert_sv_is_cvref('') };
like $@, qr/\b failed \b/xms;;

eval{ assert_sv_is_cvref(10) };
like $@, qr/\b failed \b/xms;;

eval{ assert_sv_is_cvref([]) };
like $@, qr/\b failed \b/xms;;

eval{ assert_sv_is_cvref({}) };
like $@, qr/\b failed \b/xms;;

eval{ assert_sv_is_cvref(sub{}) };
is $@, '';

eval{ assert_sv_is_cvref(*ok) };
like $@, qr/\b failed \b/xms;;

# GV

eval{ assert_sv_is_gvref(undef) };
like $@, qr/\b failed \b/xms;;

eval{ assert_sv_is_gvref("foo") };
like $@, qr/\b failed \b/xms;;

eval{ assert_sv_is_gvref('') };
like $@, qr/\b failed \b/xms;;

eval{ assert_sv_is_gvref(10) };
like $@, qr/\b failed \b/xms;;

eval{ assert_sv_is_gvref([]) };
like $@, qr/\b failed \b/xms;;

eval{ assert_sv_is_gvref({}) };
like $@, qr/\b failed \b/xms;;

eval{ assert_sv_is_gvref(sub{}) };
like $@, qr/\b failed \b/xms;;

eval{ assert_sv_is_gvref(\*ok) };
is $@, '';

# object

eval{ assert_sv_is_object(undef) };
like $@, qr/\b failed \b/xms;;

eval{ assert_sv_is_object({}) };
like $@, qr/\b failed \b/xms;;

eval{ assert_sv_is_object(bless {}) };
is $@, '';

isnt $s, '', 'output something to stderr';