summaryrefslogtreecommitdiff
path: root/test/convert1.go
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2011-11-22 12:30:02 -0500
committerRuss Cox <rsc@golang.org>2011-11-22 12:30:02 -0500
commit178abb7ec71c2e87e35b6c2bc4b11fbb70b7fc52 (patch)
tree0e598140f62dd0ef1b909b19b6931dcd1eeb8538 /test/convert1.go
parenta7a3d6ebd1bcb7c44af5aef82bb673e3a9e29d67 (diff)
downloadgo-178abb7ec71c2e87e35b6c2bc4b11fbb70b7fc52.tar.gz
allow direct conversion between string and named []byte, []rune
The allowed conversions before and after are: type Tstring string type Tbyte []byte type Trune []rune string <-> string // ok string <-> []byte // ok string <-> []rune // ok string <-> Tstring // ok string <-> Tbyte // was illegal, now ok string <-> Trune // was illegal, now ok Tstring <-> string // ok Tstring <-> []byte // ok Tstring <-> []rune // ok Tstring <-> Tstring // ok Tstring <-> Tbyte // was illegal, now ok Tstring <-> Trune // was illegal, now ok Update spec, compiler, tests. Use in a few packages. We agreed on this a few months ago but never implemented it. Fixes issue 1707. R=golang-dev, gri, r CC=golang-dev http://codereview.appspot.com/5421057
Diffstat (limited to 'test/convert1.go')
-rw-r--r--test/convert1.go96
1 files changed, 96 insertions, 0 deletions
diff --git a/test/convert1.go b/test/convert1.go
new file mode 100644
index 000000000..9de1b7e01
--- /dev/null
+++ b/test/convert1.go
@@ -0,0 +1,96 @@
+// errchk $G -e $D/$F.go
+
+// Copyright 2011 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
+
+type Tbyte []byte
+type Trune []rune
+type Tint64 []int64
+type Tstring string
+
+func main() {
+ s := "hello"
+ sb := []byte("hello")
+ sr := []rune("hello")
+ si := []int64{'h', 'e', 'l', 'l', 'o'}
+
+ ts := Tstring(s)
+ tsb := Tbyte(sb)
+ tsr := Trune(sr)
+ tsi := Tint64(si)
+
+ _ = string(s)
+ _ = []byte(s)
+ _ = []rune(s)
+ _ = []int64(s) // ERROR "cannot convert.*\[\]int64"
+ _ = Tstring(s)
+ _ = Tbyte(s)
+ _ = Trune(s)
+ _ = Tint64(s) // ERROR "cannot convert.*Tint64"
+
+ _ = string(sb)
+ _ = []byte(sb)
+ _ = []rune(sb) // ERROR "cannot convert.*\[\]rune"
+ _ = []int64(sb) // ERROR "cannot convert.*\[\]int64"
+ _ = Tstring(sb)
+ _ = Tbyte(sb)
+ _ = Trune(sb) // ERROR "cannot convert.*Trune"
+ _ = Tint64(sb) // ERROR "cannot convert.*Tint64"
+
+ _ = string(sr)
+ _ = []byte(sr) // ERROR "cannot convert.*\[\]byte"
+ _ = []rune(sr)
+ _ = []int64(sr) // ERROR "cannot convert.*\[\]int64"
+ _ = Tstring(sr)
+ _ = Tbyte(sr) // ERROR "cannot convert.*Tbyte"
+ _ = Trune(sr)
+ _ = Tint64(sr) // ERROR "cannot convert.*Tint64"
+
+ _ = string(si) // ERROR "cannot convert.* string"
+ _ = []byte(si) // ERROR "cannot convert.*\[\]byte"
+ _ = []rune(si) // ERROR "cannot convert.*\[\]rune"
+ _ = []int64(si)
+ _ = Tstring(si) // ERROR "cannot convert.*Tstring"
+ _ = Tbyte(si) // ERROR "cannot convert.*Tbyte"
+ _ = Trune(si) // ERROR "cannot convert.*Trune"
+ _ = Tint64(si)
+
+ _ = string(ts)
+ _ = []byte(ts)
+ _ = []rune(ts)
+ _ = []int64(ts) // ERROR "cannot convert.*\[\]int64"
+ _ = Tstring(ts)
+ _ = Tbyte(ts)
+ _ = Trune(ts)
+ _ = Tint64(ts) // ERROR "cannot convert.*Tint64"
+
+ _ = string(tsb)
+ _ = []byte(tsb)
+ _ = []rune(tsb) // ERROR "cannot convert.*\[\]rune"
+ _ = []int64(tsb) // ERROR "cannot convert.*\[\]int64"
+ _ = Tstring(tsb)
+ _ = Tbyte(tsb)
+ _ = Trune(tsb) // ERROR "cannot convert.*Trune"
+ _ = Tint64(tsb) // ERROR "cannot convert.*Tint64"
+
+ _ = string(tsr)
+ _ = []byte(tsr) // ERROR "cannot convert.*\[\]byte"
+ _ = []rune(tsr)
+ _ = []int64(tsr) // ERROR "cannot convert.*\[\]int64"
+ _ = Tstring(tsr)
+ _ = Tbyte(tsr) // ERROR "cannot convert.*Tbyte"
+ _ = Trune(tsr)
+ _ = Tint64(tsr) // ERROR "cannot convert.*Tint64"
+
+ _ = string(tsi) // ERROR "cannot convert.* string"
+ _ = []byte(tsi) // ERROR "cannot convert.*\[\]byte"
+ _ = []rune(tsi) // ERROR "cannot convert.*\[\]rune"
+ _ = []int64(tsi)
+ _ = Tstring(tsi) // ERROR "cannot convert.*Tstring"
+ _ = Tbyte(tsi) // ERROR "cannot convert.*Tbyte"
+ _ = Trune(tsi) // ERROR "cannot convert.*Trune"
+ _ = Tint64(tsi)
+}