summaryrefslogtreecommitdiff
path: root/ext/XS-APItest
diff options
context:
space:
mode:
authorPaul "LeoNerd" Evans <leonerd@leonerd.org.uk>2021-09-14 21:30:42 +0100
committerPaul Evans <leonerd@leonerd.org.uk>2022-01-26 21:02:05 +0000
commit0f5b7492ba5f0c2a0b81fef18b71bc3a3c3828c6 (patch)
tree90894680e7e235a0cf0c8bcfd264c083a93b3982 /ext/XS-APItest
parent1dd43bcec3ba1445e696f8031bbc7c5d7b6a1a49 (diff)
downloadperl-0f5b7492ba5f0c2a0b81fef18b71bc3a3c3828c6.tar.gz
Have sv_numeq() respect == overloading unless the SV_SKIP_OVERLOAD flag is passed
Diffstat (limited to 'ext/XS-APItest')
-rw-r--r--ext/XS-APItest/Makefile.PL2
-rw-r--r--ext/XS-APItest/t/sv_numeq.t16
2 files changed, 16 insertions, 2 deletions
diff --git a/ext/XS-APItest/Makefile.PL b/ext/XS-APItest/Makefile.PL
index 16b024e97c..b666a3d137 100644
--- a/ext/XS-APItest/Makefile.PL
+++ b/ext/XS-APItest/Makefile.PL
@@ -25,7 +25,7 @@ my @names = (qw(HV_DELETE HV_DISABLE_UVAR_XKEY HV_FETCH_ISSTORE
G_SCALAR G_LIST G_VOID G_DISCARD G_EVAL G_NOARGS
G_KEEPERR G_NODEBUG G_METHOD G_FAKINGEVAL G_RETHROW
GV_NOADD_NOINIT
- SV_GMAGIC
+ SV_GMAGIC SV_SKIP_OVERLOAD
IS_NUMBER_IN_UV IS_NUMBER_GREATER_THAN_UV_MAX
IS_NUMBER_NOT_INT IS_NUMBER_NEG IS_NUMBER_INFINITY
IS_NUMBER_NAN IS_NUMBER_TRAILING PERL_SCAN_TRAILING
diff --git a/ext/XS-APItest/t/sv_numeq.t b/ext/XS-APItest/t/sv_numeq.t
index d183e67548..1949715f6b 100644
--- a/ext/XS-APItest/t/sv_numeq.t
+++ b/ext/XS-APItest/t/sv_numeq.t
@@ -1,6 +1,6 @@
#!perl
-use Test::More tests => 6;
+use Test::More tests => 9;
use XS::APItest;
my $four = 4;
@@ -15,3 +15,17 @@ ok !sv_numeq($six_point_five, 6.6), '$six_point_five == 6.6';
"10" =~ m/(\d+)/;
ok !sv_numeq_flags($1, 10, 0), 'sv_numeq_flags with no flags does not GETMAGIC';
ok sv_numeq_flags($1, 10, SV_GMAGIC), 'sv_numeq_flags with SV_GMAGIC does';
+
+# overloading
+{
+ package AlwaysTen {
+ use overload
+ '==' => sub { return $_[1] == 10 },
+ '0+' => sub { 123456 };
+ }
+
+ ok sv_numeq(bless([], "AlwaysTen"), 10), 'AlwaysTen is 10';
+ ok !sv_numeq(bless([], "AlwaysTen"), 11), 'AlwaysTen is not 11';
+
+ ok !sv_numeq_flags(bless([], "AlwaysTen"), 10, SV_SKIP_OVERLOAD), 'AlwaysTen is not 10 with SV_SKIP_OVERLOAD'
+}