mirror of
				https://github.com/golang/go.git
				synced 2025-11-04 02:30:57 +00:00 
			
		
		
		
	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)
 | 
						|
}
 |