| | |
| |
|
| | |
| | |
| | |
| |
|
| | |
| |
|
| | 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 } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | 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 } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | 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() |
| | |
| | f5() |
| | f6() |
| | f7() |
| | f8() |
| | f9() |
| | |
| | f11() |
| | f12() |
| | if fail > 0 { |
| | os.Exit(1) |
| | } |
| | } |
| |
|