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 867
Go to most recent revision | 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 mainimport "os"var fail intfunc 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 = si.Put(2)check(i.Get() == 1, "f1 i")check(s.i == 1, "f1 s")}func f2() {s := S1{1}var i I1 = &si.Put(2)check(i.Get() == 1, "f2 i")check(s.i == 1, "f2 s")}func f3() {s := &S1{1}var i I1 = si.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 = &si.Put(2)check(i.Get() == 2, "f5 i")check(s.i == 2, "f5 s")}func f6() {s := &S2{1}var i I1 = si.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 = si.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 = &si.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 = si.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 = &si.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 = si.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)}}
Go to most recent revision | Compare with Previous | Blame | View Log
