1#!perl
2
3use Test::More tests => 9;
4use XS::APItest;
5
6my $four = 4;
7ok  sv_numeq($four, 4), '$four == 4';
8ok !sv_numeq($four, 5), '$four != 5';
9
10my $six_point_five = 6.5; # an exact float, so == is fine
11ok  sv_numeq($six_point_five, 6.5), '$six_point_five == 6.5';
12ok !sv_numeq($six_point_five, 6.6), '$six_point_five == 6.6';
13
14# GMAGIC
15"10" =~ m/(\d+)/;
16ok !sv_numeq_flags($1, 10, 0), 'sv_numeq_flags with no flags does not GETMAGIC';
17ok  sv_numeq_flags($1, 10, SV_GMAGIC), 'sv_numeq_flags with SV_GMAGIC does';
18
19# overloading
20{
21    package AlwaysTen {
22        use overload
23            '==' => sub { return $_[1] == 10 },
24            '0+' => sub { 123456 };
25    }
26    my $obj = bless([], "AlwaysTen");
27
28    ok  sv_numeq($obj, 10), 'AlwaysTen is 10';
29    ok !sv_numeq($obj, 11), 'AlwaysTen is not 11';
30
31    ok !sv_numeq_flags($obj, 10, SV_SKIP_OVERLOAD), 'AlwaysTen is not 10 with SV_SKIP_OVERLOAD'
32}
33