summaryrefslogtreecommitdiff
path: root/t/uni
diff options
context:
space:
mode:
authorKarl Williamson <public@khwilliamson.com>2013-05-18 08:25:16 -0600
committerKarl Williamson <public@khwilliamson.com>2013-05-20 11:01:52 -0600
commit1ca267a56acf698557ec1deec44af651acc88696 (patch)
tree007f9d40b63b92728a095d5defdad663e239289c /t/uni
parent519101418837cf0edacb710b2b38b42dad6e47c1 (diff)
downloadperl-1ca267a56acf698557ec1deec44af651acc88696.tar.gz
Fix multi-char fold edge case
use locale; fc("\N{LATIN CAPITAL LETTER SHARP S}") eq 2 x fc("\N{LATIN SMALL LETTER LONG S}") should return true, as the SHARP S folds to two 's's in a row, and the LONG S is an antique variant of 's', and folds to s. Until this commit, the expression was false. Similarly, the following should match, but didn't until this commit: "\N{LATIN SMALL LETTER SHARP S}" =~ /\N{LATIN SMALL LETTER LONG S}{2}/iaa The reason these didn't work properly is that in both cases the actual fold to 's' is disallowed. In the first case because of locale; and in the second because of /aa. And the code wasn't smart enough to realize that these were legal. The fix is to special case these so that the fold of sharp s (both capital and small) is two LONG S's under /aa; as is the fold of the capital sharp s under locale. The latter is user-visible, and the documentation of fc() now points that out. I believe this is such an edge case that no mention of it need be done in perldelta.
Diffstat (limited to 't/uni')
-rw-r--r--t/uni/fold.t6
1 files changed, 6 insertions, 0 deletions
diff --git a/t/uni/fold.t b/t/uni/fold.t
index 91356bbe18..6c06a2fdc2 100644
--- a/t/uni/fold.t
+++ b/t/uni/fold.t
@@ -444,6 +444,12 @@ foreach my $test_ref (@CF) {
}
}
+{
+ use feature qw( fc );
+ use locale;
+ is(fc("\x{1E9E}"), fc("\x{17F}\x{17F}"), 'fc("\x{1E9E}") eq fc("\x{17F}\x{17F}")');
+}
+
my $num_tests = curr_test() - 1;
plan($num_tests);