Russ Cox | 57eb06f | 2012-02-16 23:51:04 -0500 | [diff] [blame] | 1 | // run |
Rob Pike | a703c9a | 2008-07-15 19:19:50 -0700 | [diff] [blame] | 2 | |
| 3 | // Copyright 2009 The Go Authors. All rights reserved. |
| 4 | // Use of this source code is governed by a BSD-style |
| 5 | // license that can be found in the LICENSE file. |
| 6 | |
Rob Pike | 80a9783 | 2012-02-24 11:48:19 +1100 | [diff] [blame] | 7 | // Test UTF-8 in strings and character constants. |
| 8 | |
Rob Pike | a703c9a | 2008-07-15 19:19:50 -0700 | [diff] [blame] | 9 | package main |
| 10 | |
Rob Pike | f9489be | 2011-11-08 15:43:02 -0800 | [diff] [blame] | 11 | import "unicode/utf8" |
Russ Cox | 3609624 | 2009-01-16 14:58:14 -0800 | [diff] [blame] | 12 | |
Rob Pike | a703c9a | 2008-07-15 19:19:50 -0700 | [diff] [blame] | 13 | func main() { |
Russ Cox | db33959 | 2011-10-25 22:20:02 -0700 | [diff] [blame] | 14 | var chars [6]rune |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 15 | chars[0] = 'a' |
| 16 | chars[1] = 'b' |
| 17 | chars[2] = 'c' |
| 18 | chars[3] = '\u65e5' |
| 19 | chars[4] = '\u672c' |
| 20 | chars[5] = '\u8a9e' |
| 21 | s := "" |
Rob Pike | a703c9a | 2008-07-15 19:19:50 -0700 | [diff] [blame] | 22 | for i := 0; i < 6; i++ { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 23 | s += string(chars[i]) |
Rob Pike | a703c9a | 2008-07-15 19:19:50 -0700 | [diff] [blame] | 24 | } |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 25 | var l = len(s) |
Russ Cox | db33959 | 2011-10-25 22:20:02 -0700 | [diff] [blame] | 26 | for w, i, j := 0, 0, 0; i < l; i += w { |
| 27 | var r rune |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 28 | r, w = utf8.DecodeRuneInString(s[i:len(s)]) |
Russ Cox | db33959 | 2011-10-25 22:20:02 -0700 | [diff] [blame] | 29 | if w == 0 { |
| 30 | panic("zero width in string") |
| 31 | } |
| 32 | if r != chars[j] { |
| 33 | panic("wrong value from string") |
| 34 | } |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 35 | j++ |
Rob Pike | a703c9a | 2008-07-15 19:19:50 -0700 | [diff] [blame] | 36 | } |
| 37 | // encoded as bytes: 'a' 'b' 'c' e6 97 a5 e6 9c ac e8 aa 9e |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 38 | const L = 12 |
Russ Cox | db33959 | 2011-10-25 22:20:02 -0700 | [diff] [blame] | 39 | if L != l { |
| 40 | panic("wrong length constructing array") |
| 41 | } |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 42 | a := make([]byte, L) |
| 43 | a[0] = 'a' |
| 44 | a[1] = 'b' |
| 45 | a[2] = 'c' |
| 46 | a[3] = 0xe6 |
| 47 | a[4] = 0x97 |
| 48 | a[5] = 0xa5 |
| 49 | a[6] = 0xe6 |
| 50 | a[7] = 0x9c |
| 51 | a[8] = 0xac |
| 52 | a[9] = 0xe8 |
| 53 | a[10] = 0xaa |
| 54 | a[11] = 0x9e |
Russ Cox | db33959 | 2011-10-25 22:20:02 -0700 | [diff] [blame] | 55 | for w, i, j := 0, 0, 0; i < L; i += w { |
| 56 | var r rune |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 57 | r, w = utf8.DecodeRune(a[i:L]) |
Russ Cox | db33959 | 2011-10-25 22:20:02 -0700 | [diff] [blame] | 58 | if w == 0 { |
| 59 | panic("zero width in bytes") |
| 60 | } |
| 61 | if r != chars[j] { |
| 62 | panic("wrong value from bytes") |
| 63 | } |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 64 | j++ |
Rob Pike | a703c9a | 2008-07-15 19:19:50 -0700 | [diff] [blame] | 65 | } |
| 66 | } |