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

Subversion Repositories openrisc

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

Compare with Previous | Blame | View Log

// $G $D/$F.go && $L $F.$A && ./$A.out || echo BUG interface6

// 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.

// Interface values containing structures.

package main

import "os"

var fail int

func check(b bool, msg string) {
        if (!b) {
                println("failure in", msg)
                fail++
        }
}

type I1 interface { Get() int; Put(int) }

type S1 struct { i int }
func (p S1) Get() int { return p.i }
func (p S1) Put(i int) { p.i = i }

func f1() {
        s := S1{1}
        var i I1 = s
        i.Put(2)
        check(i.Get() == 1, "f1 i")
        check(s.i == 1, "f1 s")
}

func f2() {
        s := S1{1}
        var i I1 = &s
        i.Put(2)
        check(i.Get() == 1, "f2 i")
        check(s.i == 1, "f2 s")
}

func f3() {
        s := &S1{1}
        var i I1 = s
        i.Put(2)
        check(i.Get() == 1, "f3 i")
        check(s.i == 1, "f3 s")
}

type S2 struct { i int }
func (p *S2) Get() int { return p.i }
func (p *S2) Put(i int) { p.i = i }

// Disallowed by restriction of values going to pointer receivers
// func f4() {
//       s := S2{1}
//       var i I1 = s
//       i.Put(2)
//       check(i.Get() == 2, "f4 i")
//       check(s.i == 1, "f4 s")
// }

func f5() {
        s := S2{1}
        var i I1 = &s
        i.Put(2)
        check(i.Get() == 2, "f5 i")
        check(s.i == 2, "f5 s")
}

func f6() {
        s := &S2{1}
        var i I1 = s
        i.Put(2)
        check(i.Get() == 2, "f6 i")
        check(s.i == 2, "f6 s")
}

type I2 interface { Get() int64; Put(int64) }

type S3 struct { i, j, k, l int64 }
func (p S3) Get() int64 { return p.l }
func (p S3) Put(i int64) { p.l = i }

func f7() {
        s := S3{1, 2, 3, 4}
        var i I2 = s
        i.Put(5)
        check(i.Get() == 4, "f7 i")
        check(s.l == 4, "f7 s")
}

func f8() {
        s := S3{1, 2, 3, 4}
        var i I2 = &s
        i.Put(5)
        check(i.Get() == 4, "f8 i")
        check(s.l == 4, "f8 s")
}

func f9() {
        s := &S3{1, 2, 3, 4}
        var i I2 = s
        i.Put(5)
        check(i.Get() == 4, "f9 i")
        check(s.l == 4, "f9 s")
}

type S4 struct { i, j, k, l int64 }
func (p *S4) Get() int64 { return p.l }
func (p *S4) Put(i int64) { p.l = i }

// Disallowed by restriction of values going to pointer receivers
// func f10() {
//       s := S4{1, 2, 3, 4}
//       var i I2 = s
//       i.Put(5)
//       check(i.Get() == 5, "f10 i")
//       check(s.l == 4, "f10 s")
// }

func f11() {
        s := S4{1, 2, 3, 4}
        var i I2 = &s
        i.Put(5)
        check(i.Get() == 5, "f11 i")
        check(s.l == 5, "f11 s")
}

func f12() {
        s := &S4{1, 2, 3, 4}
        var i I2 = s
        i.Put(5)
        check(i.Get() == 5, "f12 i")
        check(s.l == 5, "f12 s")
}

func main() {
        f1()
        f2()
        f3()
//      f4()
        f5()
        f6()
        f7()
        f8()
        f9()
//      f10()
        f11()
        f12()
        if fail > 0 {
                os.Exit(1)
        }
}

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.