mirror of
				https://github.com/golang/go.git
				synced 2025-10-31 08:40:55 +00:00 
			
		
		
		
	 4f61fc96b2
			
		
	
	
		4f61fc96b2
		
	
	
	
	
		
			
			The ken directory is untouched so we have some examples with explicit semis. R=gri CC=golang-dev https://golang.org/cl/2157041
		
			
				
	
	
		
			120 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			120 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // $G $F.go && $L $F.$A && ./$A.out
 | |
| 
 | |
| // Copyright 2009 The Go Authors. All rights reserved.
 | |
| // Use of this source code is governed by a BSD-style
 | |
| // license that can be found in the LICENSE file.
 | |
| 
 | |
| package main
 | |
| 
 | |
| import "os"
 | |
| 
 | |
| var ecode int
 | |
| 
 | |
| func assert(a, b, c string) {
 | |
| 	if a != b {
 | |
| 		ecode = 1
 | |
| 		print("FAIL: ", c, ": ", a, "!=", b, "\n")
 | |
| 		var max int = len(a)
 | |
| 		if len(b) > max {
 | |
| 			max = len(b)
 | |
| 		}
 | |
| 		for i := 0; i < max; i++ {
 | |
| 			ac := 0
 | |
| 			bc := 0
 | |
| 			if i < len(a) {
 | |
| 				ac = int(a[i])
 | |
| 			}
 | |
| 			if i < len(b) {
 | |
| 				bc = int(b[i])
 | |
| 			}
 | |
| 			if ac != bc {
 | |
| 				print("\ta[", i, "] = ", ac, "; b[", i, "] =", bc, "\n")
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| 
 | |
| const (
 | |
| 	gx1 = "aä本☺"
 | |
| 	gx2 = "aä\xFF\xFF本☺"
 | |
| 	gx2fix = "aä\uFFFD\uFFFD本☺"
 | |
| )
 | |
| 
 | |
| var (
 | |
| 	gr1 = []int(gx1)
 | |
| 	gr2 = []int(gx2)
 | |
| 	gb1 = []byte(gx1)
 | |
| 	gb2 = []byte(gx2)
 | |
| )
 | |
| 
 | |
| func main() {
 | |
| 	ecode = 0
 | |
| 	s :=
 | |
| 		"" +
 | |
| 			" " +
 | |
| 			"'`" +
 | |
| 			"a" +
 | |
| 			"ä" +
 | |
| 			"本" +
 | |
| 			"\a\b\f\n\r\t\v\\\"" +
 | |
| 			"\000\123\x00\xca\xFE\u0123\ubabe\U0000babe" +
 | |
| 
 | |
| 			`` +
 | |
| 			` ` +
 | |
| 			`'"` +
 | |
| 			`a` +
 | |
| 			`ä` +
 | |
| 			`本` +
 | |
| 			`\a\b\f\n\r\t\v\\\'` +
 | |
| 			`\000\123\x00\xca\xFE\u0123\ubabe\U0000babe` +
 | |
| 			`\x\u\U\`
 | |
| 
 | |
| 	assert("", ``, "empty")
 | |
| 	assert(" ", " ", "blank")
 | |
| 	assert("\x61", "a", "lowercase a")
 | |
| 	assert("\x61", `a`, "lowercase a (backquote)")
 | |
| 	assert("\u00e4", "ä", "a umlaut")
 | |
| 	assert("\u00e4", `ä`, "a umlaut (backquote)")
 | |
| 	assert("\u672c", "本", "nihon")
 | |
| 	assert("\u672c", `本`, "nihon (backquote)")
 | |
| 	assert("\x07\x08\x0c\x0a\x0d\x09\x0b\x5c\x22",
 | |
| 		"\a\b\f\n\r\t\v\\\"",
 | |
| 		"backslashes")
 | |
| 	assert("\\a\\b\\f\\n\\r\\t\\v\\\\\\\"",
 | |
| 		`\a\b\f\n\r\t\v\\\"`,
 | |
| 		"backslashes (backquote)")
 | |
| 	assert("\x00\x53\000\xca\376S몾몾",
 | |
| 		"\000\123\x00\312\xFE\u0053\ubabe\U0000babe",
 | |
| 		"backslashes 2")
 | |
| 	assert("\\000\\123\\x00\\312\\xFE\\u0123\\ubabe\\U0000babe",
 | |
| 		`\000\123\x00\312\xFE\u0123\ubabe\U0000babe`,
 | |
| 		"backslashes 2 (backquote)")
 | |
| 	assert("\\x\\u\\U\\", `\x\u\U\`, "backslash 3 (backquote)")
 | |
| 
 | |
| 	// test large runes. perhaps not the most logical place for this test.
 | |
| 	var r int32
 | |
| 	r = 0x10ffff;	// largest rune value
 | |
| 	s = string(r)
 | |
| 	assert(s, "\xf4\x8f\xbf\xbf", "largest rune")
 | |
| 	r = 0x10ffff + 1
 | |
| 	s = string(r)
 | |
| 	assert(s, "\xef\xbf\xbd", "too-large rune")
 | |
| 
 | |
| 	assert(string(gr1), gx1, "global ->[]int")
 | |
| 	assert(string(gr2), gx2fix, "global invalid ->[]int")
 | |
| 	assert(string(gb1), gx1, "->[]byte")
 | |
| 	assert(string(gb2), gx2, "global invalid ->[]byte")
 | |
| 
 | |
| 	var (
 | |
| 		r1 = []int(gx1)
 | |
| 		r2 = []int(gx2)
 | |
| 		b1 = []byte(gx1)
 | |
| 		b2 = []byte(gx2)
 | |
| 	)
 | |
| 	assert(string(r1), gx1, "->[]int")
 | |
| 	assert(string(r2), gx2fix, "invalid ->[]int")
 | |
| 	assert(string(b1), gx1, "->[]byte")
 | |
| 	assert(string(b2), gx2, "invalid ->[]byte")
 | |
| 
 | |
| 	os.Exit(ecode)
 | |
| }
 |