mirror of
				https://github.com/golang/go.git
				synced 2025-10-31 00:30:57 +00:00 
			
		
		
		
	 53fd522c0d
			
		
	
	
		53fd522c0d
		
	
	
	
	
		
			
			Follows suit with https://go-review.googlesource.com/#/c/20111. Generated by running $ grep -R 'Go Authors. All' * | cut -d":" -f1 | while read F;do perl -pi -e 's/Go Authors. All/Go Authors. All/g' $F;done The code in cmd/internal/unvendor wasn't changed. Fixes #15213 Change-Id: I4f235cee0a62ec435f9e8540a1ec08ae03b1a75f Reviewed-on: https://go-review.googlesource.com/21819 Reviewed-by: Ian Lance Taylor <iant@golang.org> Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
		
			
				
	
	
		
			281 lines
		
	
	
	
		
			4.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			281 lines
		
	
	
	
		
			4.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // run
 | |
| 
 | |
| // 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.
 | |
| 
 | |
| // Test that basic operations on named types are valid
 | |
| // and preserve the type.
 | |
| 
 | |
| package main
 | |
| 
 | |
| type Array [10]byte
 | |
| type Bool bool
 | |
| type Chan chan int
 | |
| type Float float32
 | |
| type Int int
 | |
| type Map map[int]byte
 | |
| type Slice []byte
 | |
| type String string
 | |
| 
 | |
| // Calling these functions checks at compile time that the argument
 | |
| // can be converted implicitly to (used as) the given type.
 | |
| func asArray(Array)   {}
 | |
| func asBool(Bool)     {}
 | |
| func asChan(Chan)     {}
 | |
| func asFloat(Float)   {}
 | |
| func asInt(Int)       {}
 | |
| func asMap(Map)       {}
 | |
| func asSlice(Slice)   {}
 | |
| func asString(String) {}
 | |
| 
 | |
| func (Map) M() {}
 | |
| 
 | |
| 
 | |
| // These functions check at run time that the default type
 | |
| // (in the absence of any implicit conversion hints)
 | |
| // is the given type.
 | |
| func isArray(x interface{})  { _ = x.(Array) }
 | |
| func isBool(x interface{})   { _ = x.(Bool) }
 | |
| func isChan(x interface{})   { _ = x.(Chan) }
 | |
| func isFloat(x interface{})  { _ = x.(Float) }
 | |
| func isInt(x interface{})    { _ = x.(Int) }
 | |
| func isMap(x interface{})    { _ = x.(Map) }
 | |
| func isSlice(x interface{})  { _ = x.(Slice) }
 | |
| func isString(x interface{}) { _ = x.(String) }
 | |
| 
 | |
| func main() {
 | |
| 	var (
 | |
| 		a     Array
 | |
| 		b     Bool   = true
 | |
| 		c     Chan   = make(Chan)
 | |
| 		f     Float  = 1
 | |
| 		i     Int    = 1
 | |
| 		m     Map    = make(Map)
 | |
| 		slice Slice  = make(Slice, 10)
 | |
| 		str   String = "hello"
 | |
| 	)
 | |
| 
 | |
| 	asArray(a)
 | |
| 	isArray(a)
 | |
| 	asArray(*&a)
 | |
| 	isArray(*&a)
 | |
| 	asArray(Array{})
 | |
| 	isArray(Array{})
 | |
| 
 | |
| 	asBool(b)
 | |
| 	isBool(b)
 | |
| 	asBool(!b)
 | |
| 	isBool(!b)
 | |
| 	asBool(true)
 | |
| 	asBool(*&b)
 | |
| 	isBool(*&b)
 | |
| 	asBool(Bool(true))
 | |
| 	isBool(Bool(true))
 | |
| 
 | |
| 	asChan(c)
 | |
| 	isChan(c)
 | |
| 	asChan(make(Chan))
 | |
| 	isChan(make(Chan))
 | |
| 	asChan(*&c)
 | |
| 	isChan(*&c)
 | |
| 	asChan(Chan(nil))
 | |
| 	isChan(Chan(nil))
 | |
| 
 | |
| 	asFloat(f)
 | |
| 	isFloat(f)
 | |
| 	asFloat(-f)
 | |
| 	isFloat(-f)
 | |
| 	asFloat(+f)
 | |
| 	isFloat(+f)
 | |
| 	asFloat(f + 1)
 | |
| 	isFloat(f + 1)
 | |
| 	asFloat(1 + f)
 | |
| 	isFloat(1 + f)
 | |
| 	asFloat(f + f)
 | |
| 	isFloat(f + f)
 | |
| 	f++
 | |
| 	f += 2
 | |
| 	asFloat(f - 1)
 | |
| 	isFloat(f - 1)
 | |
| 	asFloat(1 - f)
 | |
| 	isFloat(1 - f)
 | |
| 	asFloat(f - f)
 | |
| 	isFloat(f - f)
 | |
| 	f--
 | |
| 	f -= 2
 | |
| 	asFloat(f * 2.5)
 | |
| 	isFloat(f * 2.5)
 | |
| 	asFloat(2.5 * f)
 | |
| 	isFloat(2.5 * f)
 | |
| 	asFloat(f * f)
 | |
| 	isFloat(f * f)
 | |
| 	f *= 4
 | |
| 	asFloat(f / 2.5)
 | |
| 	isFloat(f / 2.5)
 | |
| 	asFloat(2.5 / f)
 | |
| 	isFloat(2.5 / f)
 | |
| 	asFloat(f / f)
 | |
| 	isFloat(f / f)
 | |
| 	f /= 4
 | |
| 	asFloat(f)
 | |
| 	isFloat(f)
 | |
| 	f = 5
 | |
| 	asFloat(*&f)
 | |
| 	isFloat(*&f)
 | |
| 	asFloat(234)
 | |
| 	asFloat(Float(234))
 | |
| 	isFloat(Float(234))
 | |
| 	asFloat(1.2)
 | |
| 	asFloat(Float(i))
 | |
| 	isFloat(Float(i))
 | |
| 
 | |
| 	asInt(i)
 | |
| 	isInt(i)
 | |
| 	asInt(-i)
 | |
| 	isInt(-i)
 | |
| 	asInt(^i)
 | |
| 	isInt(^i)
 | |
| 	asInt(+i)
 | |
| 	isInt(+i)
 | |
| 	asInt(i + 1)
 | |
| 	isInt(i + 1)
 | |
| 	asInt(1 + i)
 | |
| 	isInt(1 + i)
 | |
| 	asInt(i + i)
 | |
| 	isInt(i + i)
 | |
| 	i++
 | |
| 	i += 1
 | |
| 	asInt(i - 1)
 | |
| 	isInt(i - 1)
 | |
| 	asInt(1 - i)
 | |
| 	isInt(1 - i)
 | |
| 	asInt(i - i)
 | |
| 	isInt(i - i)
 | |
| 	i--
 | |
| 	i -= 1
 | |
| 	asInt(i * 2)
 | |
| 	isInt(i * 2)
 | |
| 	asInt(2 * i)
 | |
| 	isInt(2 * i)
 | |
| 	asInt(i * i)
 | |
| 	isInt(i * i)
 | |
| 	i *= 2
 | |
| 	asInt(i / 5)
 | |
| 	isInt(i / 5)
 | |
| 	asInt(5 / i)
 | |
| 	isInt(5 / i)
 | |
| 	asInt(i / i)
 | |
| 	isInt(i / i)
 | |
| 	i /= 2
 | |
| 	asInt(i % 5)
 | |
| 	isInt(i % 5)
 | |
| 	asInt(5 % i)
 | |
| 	isInt(5 % i)
 | |
| 	asInt(i % i)
 | |
| 	isInt(i % i)
 | |
| 	i %= 2
 | |
| 	asInt(i & 5)
 | |
| 	isInt(i & 5)
 | |
| 	asInt(5 & i)
 | |
| 	isInt(5 & i)
 | |
| 	asInt(i & i)
 | |
| 	isInt(i & i)
 | |
| 	i &= 2
 | |
| 	asInt(i &^ 5)
 | |
| 	isInt(i &^ 5)
 | |
| 	asInt(5 &^ i)
 | |
| 	isInt(5 &^ i)
 | |
| 	asInt(i &^ i)
 | |
| 	isInt(i &^ i)
 | |
| 	i &^= 2
 | |
| 	asInt(i | 5)
 | |
| 	isInt(i | 5)
 | |
| 	asInt(5 | i)
 | |
| 	isInt(5 | i)
 | |
| 	asInt(i | i)
 | |
| 	isInt(i | i)
 | |
| 	i |= 2
 | |
| 	asInt(i ^ 5)
 | |
| 	isInt(i ^ 5)
 | |
| 	asInt(5 ^ i)
 | |
| 	isInt(5 ^ i)
 | |
| 	asInt(i ^ i)
 | |
| 	isInt(i ^ i)
 | |
| 	i ^= 2
 | |
| 	asInt(i << 4)
 | |
| 	isInt(i << 4)
 | |
| 	i <<= 2
 | |
| 	asInt(i >> 4)
 | |
| 	isInt(i >> 4)
 | |
| 	i >>= 2
 | |
| 	asInt(i)
 | |
| 	isInt(i)
 | |
| 	asInt(0)
 | |
| 	asInt(Int(0))
 | |
| 	isInt(Int(0))
 | |
| 	i = 10
 | |
| 	asInt(*&i)
 | |
| 	isInt(*&i)
 | |
| 	asInt(23)
 | |
| 	asInt(Int(f))
 | |
| 	isInt(Int(f))
 | |
| 
 | |
| 	asMap(m)
 | |
| 	isMap(m)
 | |
| 	asMap(nil)
 | |
| 	m = nil
 | |
| 	asMap(make(Map))
 | |
| 	isMap(make(Map))
 | |
| 	asMap(*&m)
 | |
| 	isMap(*&m)
 | |
| 	asMap(Map(nil))
 | |
| 	isMap(Map(nil))
 | |
| 	asMap(Map{})
 | |
| 	isMap(Map{})
 | |
| 
 | |
| 	asSlice(slice)
 | |
| 	isSlice(slice)
 | |
| 	asSlice(make(Slice, 5))
 | |
| 	isSlice(make(Slice, 5))
 | |
| 	asSlice([]byte{1, 2, 3})
 | |
| 	asSlice([]byte{1, 2, 3}[0:2])
 | |
| 	asSlice(slice[0:4])
 | |
| 	isSlice(slice[0:4])
 | |
| 	asSlice(slice[3:8])
 | |
| 	isSlice(slice[3:8])
 | |
| 	asSlice(nil)
 | |
| 	asSlice(Slice(nil))
 | |
| 	isSlice(Slice(nil))
 | |
| 	slice = nil
 | |
| 	asSlice(Slice{1, 2, 3})
 | |
| 	isSlice(Slice{1, 2, 3})
 | |
| 	asSlice(Slice{})
 | |
| 	isSlice(Slice{})
 | |
| 	asSlice(*&slice)
 | |
| 	isSlice(*&slice)
 | |
| 
 | |
| 	asString(str)
 | |
| 	isString(str)
 | |
| 	asString(str + "a")
 | |
| 	isString(str + "a")
 | |
| 	asString("a" + str)
 | |
| 	isString("a" + str)
 | |
| 	asString(str + str)
 | |
| 	isString(str + str)
 | |
| 	str += "a"
 | |
| 	str += str
 | |
| 	asString(String('a'))
 | |
| 	isString(String('a'))
 | |
| 	asString(String([]byte(slice)))
 | |
| 	isString(String([]byte(slice)))
 | |
| 	asString(String([]byte(nil)))
 | |
| 	isString(String([]byte(nil)))
 | |
| 	asString("hello")
 | |
| 	asString(String("hello"))
 | |
| 	isString(String("hello"))
 | |
| 	str = "hello"
 | |
| 	isString(str)
 | |
| 	asString(*&str)
 | |
| 	isString(*&str)
 | |
| }
 |