156 lines · 2.4 KB · Go
RawDownload
// 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 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)	}}

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t