OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [testsuite/] [go.test/] [test/] [named.go] - Rev 700

Compare with Previous | Blame | View Log

// $G $D/$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.

// 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)
}

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.