diff options
author | Paul "LeoNerd" Evans <leonerd@leonerd.org.uk> | 2022-01-27 00:24:49 +0000 |
---|---|---|
committer | Paul Evans <leonerd@leonerd.org.uk> | 2022-01-27 14:32:24 +0000 |
commit | e269455b0d814664d0f8b5c7b34e7f2782a52d31 (patch) | |
tree | a441a93b7397e65f71854fa3e40037a39a51ab93 /ext | |
parent | 0f5b7492ba5f0c2a0b81fef18b71bc3a3c3828c6 (diff) | |
download | perl-e269455b0d814664d0f8b5c7b34e7f2782a52d31.tar.gz |
Create sv_streq() API family, as a stringy copy of the sv_numeq() ones
Diffstat (limited to 'ext')
-rw-r--r-- | ext/XS-APItest/APItest.xs | 14 | ||||
-rw-r--r-- | ext/XS-APItest/t/sv_streq.t | 29 |
2 files changed, 43 insertions, 0 deletions
diff --git a/ext/XS-APItest/APItest.xs b/ext/XS-APItest/APItest.xs index c101e995d0..088afff840 100644 --- a/ext/XS-APItest/APItest.xs +++ b/ext/XS-APItest/APItest.xs @@ -4591,6 +4591,20 @@ sv_numeq_flags(SV *sv1, SV *sv2, U32 flags) OUTPUT: RETVAL +bool +sv_streq(SV *sv1, SV *sv2) + CODE: + RETVAL = sv_streq(sv1, sv2); + OUTPUT: + RETVAL + +bool +sv_streq_flags(SV *sv1, SV *sv2, U32 flags) + CODE: + RETVAL = sv_streq_flags(sv1, sv2, flags); + OUTPUT: + RETVAL + MODULE = XS::APItest PACKAGE = XS::APItest::AUTOLOADtest int diff --git a/ext/XS-APItest/t/sv_streq.t b/ext/XS-APItest/t/sv_streq.t new file mode 100644 index 0000000000..f8ca1378b1 --- /dev/null +++ b/ext/XS-APItest/t/sv_streq.t @@ -0,0 +1,29 @@ +#!perl + +use Test::More tests => 7; +use XS::APItest; + +my $abc = "abc"; +ok sv_streq($abc, "abc"), '$abc eq "abc"'; +ok !sv_streq($abc, "def"), '$abc ne "def"'; + +# consider also UTF-8 vs not + +# GMAGIC +"ABC" =~ m/(\w+)/; +ok !sv_streq_flags($1, "ABC", 0), 'sv_streq_flags with no flags does not GETMAGIC'; +ok sv_streq_flags($1, "ABC", SV_GMAGIC), 'sv_streq_flags with SV_GMAGIC does'; + +# overloading +{ + package AlwaysABC { + use overload + 'eq' => sub { return $_[1] eq "ABC" }, + '""' => sub { "not-a-string" }; + } + + ok sv_streq(bless([], "AlwaysABC"), "ABC"), 'AlwaysABC is "ABC"'; + ok !sv_streq(bless([], "AlwaysABC"), "DEF"), 'AlwaysABC is not "DEF"'; + + ok !sv_streq_flags(bless([], "AlwaysABC"), "ABC", SV_SKIP_OVERLOAD), 'AlwaysABC is not "ABC" with SV_SKIP_OVERLOAD'; +} |