Team Ai
Datasetpublic

codekingpro/portable-devtools

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes14kdownloads
struct.go157 linesDownload Raw Back to interface
1// run2 3// Copyright 2009 The Go Authors. All rights reserved.4// Use of this source code is governed by a BSD-style5// license that can be found in the LICENSE file.6 7// Test interface values containing structures.8 9package main10 11import "os"12 13var fail int14 15func check(b bool, msg string) {16	if (!b) {17		println("failure in", msg)18		fail++19	}20}21 22type I1 interface { Get() int; Put(int) }23 24type S1 struct { i int }25func (p S1) Get() int { return p.i }26func (p S1) Put(i int) { p.i = i }27 28func f1() {29	s := S1{1}30	var i I1 = s31	i.Put(2)32	check(i.Get() == 1, "f1 i")33	check(s.i == 1, "f1 s")34}35 36func f2() {37	s := S1{1}38	var i I1 = &s39	i.Put(2)40	check(i.Get() == 1, "f2 i")41	check(s.i == 1, "f2 s")42}43 44func f3() {45	s := &S1{1}46	var i I1 = s47	i.Put(2)48	check(i.Get() == 1, "f3 i")49	check(s.i == 1, "f3 s")50}51 52type S2 struct { i int }53func (p *S2) Get() int { return p.i }54func (p *S2) Put(i int) { p.i = i }55 56// Disallowed by restriction of values going to pointer receivers57// func f4() {58//	 s := S2{1}59//	 var i I1 = s60//	 i.Put(2)61//	 check(i.Get() == 2, "f4 i")62//	 check(s.i == 1, "f4 s")63// }64 65func f5() {66	s := S2{1}67	var i I1 = &s68	i.Put(2)69	check(i.Get() == 2, "f5 i")70	check(s.i == 2, "f5 s")71}72 73func f6() {74	s := &S2{1}75	var i I1 = s76	i.Put(2)77	check(i.Get() == 2, "f6 i")78	check(s.i == 2, "f6 s")79}80 81type I2 interface { Get() int64; Put(int64) }82 83type S3 struct { i, j, k, l int64 }84func (p S3) Get() int64 { return p.l }85func (p S3) Put(i int64) { p.l = i }86 87func f7() {88	s := S3{1, 2, 3, 4}89	var i I2 = s90	i.Put(5)91	check(i.Get() == 4, "f7 i")92	check(s.l == 4, "f7 s")93}94 95func f8() {96	s := S3{1, 2, 3, 4}97	var i I2 = &s98	i.Put(5)99	check(i.Get() == 4, "f8 i")100	check(s.l == 4, "f8 s")101}102 103func f9() {104	s := &S3{1, 2, 3, 4}105	var i I2 = s106	i.Put(5)107	check(i.Get() == 4, "f9 i")108	check(s.l == 4, "f9 s")109}110 111type S4 struct { i, j, k, l int64 }112func (p *S4) Get() int64 { return p.l }113func (p *S4) Put(i int64) { p.l = i }114 115// Disallowed by restriction of values going to pointer receivers116// func f10() {117//	 s := S4{1, 2, 3, 4}118//	 var i I2 = s119//	 i.Put(5)120//	 check(i.Get() == 5, "f10 i")121//	 check(s.l == 4, "f10 s")122// }123 124func f11() {125	s := S4{1, 2, 3, 4}126	var i I2 = &s127	i.Put(5)128	check(i.Get() == 5, "f11 i")129	check(s.l == 5, "f11 s")130}131 132func f12() {133	s := &S4{1, 2, 3, 4}134	var i I2 = s135	i.Put(5)136	check(i.Get() == 5, "f12 i")137	check(s.l == 5, "f12 s")138}139 140func main() {141	f1()142	f2()143	f3()144//	f4()145	f5()146	f6()147	f7()148	f8()149	f9()150//	f10()151	f11()152	f12()153	if fail > 0 {154		os.Exit(1)155	}156}157