@@ -522,6 +522,7 @@ var upperTests = []StringTest{
522
522
{"AbC123" , "ABC123" },
523
523
{"azAZ09_" , "AZAZ09_" },
524
524
{"\u0250 \u0250 \u0250 \u0250 \u0250 " , "\u2C6F \u2C6F \u2C6F \u2C6F \u2C6F " }, // grows one byte per char
525
+ {"a\u0080 \U0010FFFF " , "A\u0080 \U0010FFFF " }, // test utf8.RuneSelf and utf8.MaxRune
525
526
}
526
527
527
528
var lowerTests = []StringTest {
@@ -530,6 +531,7 @@ var lowerTests = []StringTest{
530
531
{"AbC123" , "abc123" },
531
532
{"azAZ09_" , "azaz09_" },
532
533
{"\u2C6D \u2C6D \u2C6D \u2C6D \u2C6D " , "\u0251 \u0251 \u0251 \u0251 \u0251 " }, // shrinks one byte per char
534
+ {"A\u0080 \U0010FFFF " , "a\u0080 \U0010FFFF " }, // test utf8.RuneSelf and utf8.MaxRune
533
535
}
534
536
535
537
const space = "\t \v \r \f \n \u0085 \u00a0 \u2000 \u3000 "
@@ -642,6 +644,27 @@ func TestMap(t *testing.T) {
642
644
if m != expect {
643
645
t .Errorf ("replace invalid sequence: expected %q got %q" , expect , m )
644
646
}
647
+
648
+ // 8. Check utf8.RuneSelf and utf8.MaxRune encoding
649
+ encode := func (r rune ) rune {
650
+ switch r {
651
+ case utf8 .RuneSelf :
652
+ return unicode .MaxRune
653
+ case unicode .MaxRune :
654
+ return utf8 .RuneSelf
655
+ }
656
+ return r
657
+ }
658
+ s := string (utf8 .RuneSelf ) + string (utf8 .MaxRune )
659
+ r := string (utf8 .MaxRune ) + string (utf8 .RuneSelf ) // reverse of s
660
+ m = Map (encode , s )
661
+ if m != r {
662
+ t .Errorf ("encoding not handled correctly: expected %q got %q" , r , m )
663
+ }
664
+ m = Map (encode , r )
665
+ if m != s {
666
+ t .Errorf ("encoding not handled correctly: expected %q got %q" , s , m )
667
+ }
645
668
}
646
669
647
670
func TestToUpper (t * testing.T ) { runStringTests (t , ToUpper , "ToUpper" , upperTests ) }
0 commit comments