summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorPaul "LeoNerd" Evans <leonerd@leonerd.org.uk>2022-01-27 00:24:49 +0000
committerPaul Evans <leonerd@leonerd.org.uk>2022-01-27 14:32:24 +0000
commite269455b0d814664d0f8b5c7b34e7f2782a52d31 (patch)
treea441a93b7397e65f71854fa3e40037a39a51ab93 /ext
parent0f5b7492ba5f0c2a0b81fef18b71bc3a3c3828c6 (diff)
downloadperl-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.xs14
-rw-r--r--ext/XS-APItest/t/sv_streq.t29
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';
+}