This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
APItest/t/handy.t: Add more tests
authorKarl Williamson <khw@cpan.org>
Sun, 18 Dec 2016 19:40:06 +0000 (12:40 -0700)
committerKarl Williamson <khw@cpan.org>
Fri, 23 Dec 2016 18:41:32 +0000 (11:41 -0700)
Macros with the '_uvchr' suffix were not being tested at all.  Instead,
the undocumented backwards-compatibility-only macros with the suffixes
_uni were being tested, but these might diverge, and the tests wouldn't
find that.

ext/XS-APItest/APItest.xs
ext/XS-APItest/t/handy.t

index 3060f0f..8b4e638 100644 (file)
@@ -4372,6 +4372,13 @@ test_isBLANK_uni(UV ord)
         RETVAL
 
 bool
+test_isBLANK_uvchr(UV ord)
+    CODE:
+        RETVAL = isBLANK_uvchr(ord);
+    OUTPUT:
+        RETVAL
+
+bool
 test_isBLANK_LC_uvchr(UV ord)
     CODE:
         RETVAL = isBLANK_LC_uvchr(ord);
@@ -4428,6 +4435,13 @@ test_isVERTWS_uni(UV ord)
         RETVAL
 
 bool
+test_isVERTWS_uvchr(UV ord)
+    CODE:
+        RETVAL = isVERTWS_uvchr(ord);
+    OUTPUT:
+        RETVAL
+
+bool
 test_isVERTWS_utf8(unsigned char * p)
     CODE:
         RETVAL = isVERTWS_utf8(p);
@@ -4442,6 +4456,13 @@ test_isUPPER_uni(UV ord)
         RETVAL
 
 bool
+test_isUPPER_uvchr(UV ord)
+    CODE:
+        RETVAL = isUPPER_uvchr(ord);
+    OUTPUT:
+        RETVAL
+
+bool
 test_isUPPER_LC_uvchr(UV ord)
     CODE:
         RETVAL = isUPPER_LC_uvchr(ord);
@@ -4498,6 +4519,13 @@ test_isLOWER_uni(UV ord)
         RETVAL
 
 bool
+test_isLOWER_uvchr(UV ord)
+    CODE:
+        RETVAL = isLOWER_uvchr(ord);
+    OUTPUT:
+        RETVAL
+
+bool
 test_isLOWER_LC_uvchr(UV ord)
     CODE:
         RETVAL = isLOWER_LC_uvchr(ord);
@@ -4554,6 +4582,13 @@ test_isALPHA_uni(UV ord)
         RETVAL
 
 bool
+test_isALPHA_uvchr(UV ord)
+    CODE:
+        RETVAL = isALPHA_uvchr(ord);
+    OUTPUT:
+        RETVAL
+
+bool
 test_isALPHA_LC_uvchr(UV ord)
     CODE:
         RETVAL = isALPHA_LC_uvchr(ord);
@@ -4610,6 +4645,13 @@ test_isWORDCHAR_uni(UV ord)
         RETVAL
 
 bool
+test_isWORDCHAR_uvchr(UV ord)
+    CODE:
+        RETVAL = isWORDCHAR_uvchr(ord);
+    OUTPUT:
+        RETVAL
+
+bool
 test_isWORDCHAR_LC_uvchr(UV ord)
     CODE:
         RETVAL = isWORDCHAR_LC_uvchr(ord);
@@ -4666,6 +4708,13 @@ test_isALPHANUMERIC_uni(UV ord)
         RETVAL
 
 bool
+test_isALPHANUMERIC_uvchr(UV ord)
+    CODE:
+        RETVAL = isALPHANUMERIC_uvchr(ord);
+    OUTPUT:
+        RETVAL
+
+bool
 test_isALPHANUMERIC_LC_uvchr(UV ord)
     CODE:
         RETVAL = isALPHANUMERIC_LC_uvchr(ord);
@@ -4764,6 +4813,13 @@ test_isDIGIT_uni(UV ord)
         RETVAL
 
 bool
+test_isDIGIT_uvchr(UV ord)
+    CODE:
+        RETVAL = isDIGIT_uvchr(ord);
+    OUTPUT:
+        RETVAL
+
+bool
 test_isDIGIT_LC_uvchr(UV ord)
     CODE:
         RETVAL = isDIGIT_LC_uvchr(ord);
@@ -4841,6 +4897,13 @@ test_isIDFIRST_uni(UV ord)
         RETVAL
 
 bool
+test_isIDFIRST_uvchr(UV ord)
+    CODE:
+        RETVAL = isIDFIRST_uvchr(ord);
+    OUTPUT:
+        RETVAL
+
+bool
 test_isIDFIRST_LC_uvchr(UV ord)
     CODE:
         RETVAL = isIDFIRST_LC_uvchr(ord);
@@ -4897,6 +4960,13 @@ test_isIDCONT_uni(UV ord)
         RETVAL
 
 bool
+test_isIDCONT_uvchr(UV ord)
+    CODE:
+        RETVAL = isIDCONT_uvchr(ord);
+    OUTPUT:
+        RETVAL
+
+bool
 test_isIDCONT_LC_uvchr(UV ord)
     CODE:
         RETVAL = isIDCONT_LC_uvchr(ord);
@@ -4953,6 +5023,13 @@ test_isSPACE_uni(UV ord)
         RETVAL
 
 bool
+test_isSPACE_uvchr(UV ord)
+    CODE:
+        RETVAL = isSPACE_uvchr(ord);
+    OUTPUT:
+        RETVAL
+
+bool
 test_isSPACE_LC_uvchr(UV ord)
     CODE:
         RETVAL = isSPACE_LC_uvchr(ord);
@@ -5009,6 +5086,13 @@ test_isASCII_uni(UV ord)
         RETVAL
 
 bool
+test_isASCII_uvchr(UV ord)
+    CODE:
+        RETVAL = isASCII_uvchr(ord);
+    OUTPUT:
+        RETVAL
+
+bool
 test_isASCII_LC_uvchr(UV ord)
     CODE:
         RETVAL = isASCII_LC_uvchr(ord);
@@ -5065,6 +5149,13 @@ test_isCNTRL_uni(UV ord)
         RETVAL
 
 bool
+test_isCNTRL_uvchr(UV ord)
+    CODE:
+        RETVAL = isCNTRL_uvchr(ord);
+    OUTPUT:
+        RETVAL
+
+bool
 test_isCNTRL_LC_uvchr(UV ord)
     CODE:
         RETVAL = isCNTRL_LC_uvchr(ord);
@@ -5121,6 +5212,13 @@ test_isPRINT_uni(UV ord)
         RETVAL
 
 bool
+test_isPRINT_uvchr(UV ord)
+    CODE:
+        RETVAL = isPRINT_uvchr(ord);
+    OUTPUT:
+        RETVAL
+
+bool
 test_isPRINT_LC_uvchr(UV ord)
     CODE:
         RETVAL = isPRINT_LC_uvchr(ord);
@@ -5177,6 +5275,13 @@ test_isGRAPH_uni(UV ord)
         RETVAL
 
 bool
+test_isGRAPH_uvchr(UV ord)
+    CODE:
+        RETVAL = isGRAPH_uvchr(ord);
+    OUTPUT:
+        RETVAL
+
+bool
 test_isGRAPH_LC_uvchr(UV ord)
     CODE:
         RETVAL = isGRAPH_LC_uvchr(ord);
@@ -5233,6 +5338,13 @@ test_isPUNCT_uni(UV ord)
         RETVAL
 
 bool
+test_isPUNCT_uvchr(UV ord)
+    CODE:
+        RETVAL = isPUNCT_uvchr(ord);
+    OUTPUT:
+        RETVAL
+
+bool
 test_isPUNCT_LC_uvchr(UV ord)
     CODE:
         RETVAL = isPUNCT_LC_uvchr(ord);
@@ -5289,6 +5401,13 @@ test_isXDIGIT_uni(UV ord)
         RETVAL
 
 bool
+test_isXDIGIT_uvchr(UV ord)
+    CODE:
+        RETVAL = isXDIGIT_uvchr(ord);
+    OUTPUT:
+        RETVAL
+
+bool
 test_isXDIGIT_LC_uvchr(UV ord)
     CODE:
         RETVAL = isXDIGIT_LC_uvchr(ord);
@@ -5345,6 +5464,13 @@ test_isPSXSPC_uni(UV ord)
         RETVAL
 
 bool
+test_isPSXSPC_uvchr(UV ord)
+    CODE:
+        RETVAL = isPSXSPC_uvchr(ord);
+    OUTPUT:
+        RETVAL
+
+bool
 test_isPSXSPC_LC_uvchr(UV ord)
     CODE:
         RETVAL = isPSXSPC_LC_uvchr(ord);
@@ -5751,6 +5877,26 @@ test_toLOWER_uni(UV ord)
         RETVAL
 
 AV *
+test_toLOWER_uvchr(UV ord)
+    PREINIT:
+        U8 s[UTF8_MAXBYTES_CASE + 1];
+        STRLEN len;
+        AV *av;
+        SV *utf8;
+    CODE:
+        av = newAV();
+        av_push(av, newSVuv(toLOWER_uvchr(ord, s, &len)));
+
+        utf8 = newSVpvn((char *) s, len);
+        SvUTF8_on(utf8);
+        av_push(av, utf8);
+
+        av_push(av, newSVuv(len));
+        RETVAL = av;
+    OUTPUT:
+        RETVAL
+
+AV *
 test_toLOWER_utf8(SV * p)
     PREINIT:
         U8 *input;
@@ -5807,6 +5953,26 @@ test_toFOLD_uni(UV ord)
         RETVAL
 
 AV *
+test_toFOLD_uvchr(UV ord)
+    PREINIT:
+        U8 s[UTF8_MAXBYTES_CASE + 1];
+        STRLEN len;
+        AV *av;
+        SV *utf8;
+    CODE:
+        av = newAV();
+        av_push(av, newSVuv(toFOLD_uvchr(ord, s, &len)));
+
+        utf8 = newSVpvn((char *) s, len);
+        SvUTF8_on(utf8);
+        av_push(av, utf8);
+
+        av_push(av, newSVuv(len));
+        RETVAL = av;
+    OUTPUT:
+        RETVAL
+
+AV *
 test_toFOLD_utf8(SV * p)
     PREINIT:
         U8 *input;
@@ -5863,6 +6029,26 @@ test_toUPPER_uni(UV ord)
         RETVAL
 
 AV *
+test_toUPPER_uvchr(UV ord)
+    PREINIT:
+        U8 s[UTF8_MAXBYTES_CASE + 1];
+        STRLEN len;
+        AV *av;
+        SV *utf8;
+    CODE:
+        av = newAV();
+        av_push(av, newSVuv(toUPPER_uvchr(ord, s, &len)));
+
+        utf8 = newSVpvn((char *) s, len);
+        SvUTF8_on(utf8);
+        av_push(av, utf8);
+
+        av_push(av, newSVuv(len));
+        RETVAL = av;
+    OUTPUT:
+        RETVAL
+
+AV *
 test_toUPPER_utf8(SV * p)
     PREINIT:
         U8 *input;
@@ -5912,6 +6098,26 @@ test_toTITLE_uni(UV ord)
         RETVAL
 
 AV *
+test_toTITLE_uvchr(UV ord)
+    PREINIT:
+        U8 s[UTF8_MAXBYTES_CASE + 1];
+        STRLEN len;
+        AV *av;
+        SV *utf8;
+    CODE:
+        av = newAV();
+        av_push(av, newSVuv(toTITLE_uvchr(ord, s, &len)));
+
+        utf8 = newSVpvn((char *) s, len);
+        SvUTF8_on(utf8);
+        av_push(av, utf8);
+
+        av_push(av, newSVuv(len));
+        RETVAL = av;
+    OUTPUT:
+        RETVAL
+
+AV *
 test_toTITLE_utf8(SV * p)
     PREINIT:
         U8 *input;
index 6e6fef5..b044bb1 100644 (file)
@@ -207,22 +207,24 @@ foreach my $name (sort keys %properties, 'octal') {
             next;
         }
 
-        foreach my $suffix ("", "_A", "_L1", "_LC", "_uni", "_LC_uvchr",
-                            "_utf8", "_LC_utf8")
+        foreach my $suffix ("", "_A", "_L1", "_LC", "_uni", "_uvchr",
+                            "_LC_uvchr", "_utf8", "_LC_utf8")
         {
 
             # Not all possible macros have been defined
             if ($name eq 'vertws') {
 
                 # vertws is always all of Unicode
-                next if $suffix ne "_uni" && $suffix ne "_utf8";
+                next if $suffix !~ / ^ _ ( uni | uvchr | utf8 ) $ /x;
             }
             elsif ($name eq 'alnum') {
 
-                # ALNUM_A and ALNUM_L1 are not defined as they were added
-                # later, after WORDCHAR was created to be a clearer synonym
-                # for ALNUM
-                next if $suffix eq '_A' || $suffix eq '_L1';
+                # ALNUM_A, ALNUM_L1, and ALNUM_uvchr are not defined as these
+                # suffixes were added later, after WORDCHAR was created to be
+                # a clearer synonym for ALNUM
+                next if    $suffix eq '_A'
+                        || $suffix eq '_L1'
+                        || $suffix eq '_uvchr';
             }
             elsif ($name eq 'octal') {
                 next if $suffix ne ""  && $suffix ne '_A' && $suffix ne '_L1';
@@ -408,10 +410,10 @@ foreach my $name (sort keys %to_properties) {
             }
         }
 
-        # The _uni and _utf8 functions return both the ordinal of the first
-        # code point of the result, and the result in utf8.  The .xs tests
-        # return these in an array, in [0] and [1] respectively, with [2] the
-        # length of the utf8 in bytes.
+        # The _uni, uvchr, and _utf8 functions return both the ordinal of the
+        # first code point of the result, and the result in utf8.  The .xs
+        # tests return these in an array, in [0] and [1] respectively, with
+        # [2] the length of the utf8 in bytes.
         my $utf8_should_be = "";
         my $first_ord_should_be;
         if (ref $map_ref->[$index]) {   # A multi-char result
@@ -430,11 +432,12 @@ foreach my $name (sort keys %to_properties) {
         }
         utf8::upgrade($utf8_should_be);
 
-        # Test _uni
+        # Test _uni, uvchr
+        foreach my $suffix ('_uni', '_uvchr') {
         my $s;
         my $len;
-        my $display_call = "to${function}_uni( $display_name )";
-        $ret = eval "test_to${function}_uni($j)";
+        my $display_call = "to${function}$suffix( $display_name )";
+        $ret = eval "test_to${function}$suffix($j)";
         if (is ($@, "", "$display_call didn't give error")) {
             is ($ret->[0], $first_ord_should_be,
                 sprintf("${tab}And correctly returned 0x%02X",
@@ -444,6 +447,7 @@ foreach my $name (sort keys %to_properties) {
             is ($ret->[2], length $utf8_should_be,
                 "${tab}Got correct number of bytes for utf8 length");
         }
+        }
 
         # Test _utf8
         my $char = chr($j);