@@ -522,6 +522,7 @@ var upperTests = []StringTest{
522522 {"AbC123" , "ABC123" },
523523 {"azAZ09_" , "AZAZ09_" },
524524 {"\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
525526}
526527
527528var lowerTests = []StringTest {
@@ -530,6 +531,7 @@ var lowerTests = []StringTest{
530531 {"AbC123" , "abc123" },
531532 {"azAZ09_" , "azaz09_" },
532533 {"\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
533535}
534536
535537const space = "\t \v \r \f \n \u0085 \u00a0 \u2000 \u3000 "
@@ -642,6 +644,27 @@ func TestMap(t *testing.T) {
642644 if m != expect {
643645 t .Errorf ("replace invalid sequence: expected %q got %q" , expect , m )
644646 }
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+ }
645668}
646669
647670func TestToUpper (t * testing.T ) { runStringTests (t , ToUpper , "ToUpper" , upperTests ) }
0 commit comments