diff options
author | Ondřej Surý <ondrej@sury.org> | 2011-01-17 12:40:45 +0100 |
---|---|---|
committer | Ondřej Surý <ondrej@sury.org> | 2011-01-17 12:40:45 +0100 |
commit | 3e45412327a2654a77944249962b3652e6142299 (patch) | |
tree | bc3bf69452afa055423cbe0c5cfa8ca357df6ccf /test/interface | |
parent | c533680039762cacbc37db8dc7eed074c3e497be (diff) | |
download | golang-3e45412327a2654a77944249962b3652e6142299.tar.gz |
Imported Upstream version 2011.01.12upstream/2011.01.12
Diffstat (limited to 'test/interface')
-rw-r--r-- | test/interface/bigdata.go | 52 | ||||
-rw-r--r-- | test/interface/convert1.go | 18 | ||||
-rw-r--r-- | test/interface/convert2.go | 18 | ||||
-rw-r--r-- | test/interface/embed.go | 63 | ||||
-rw-r--r-- | test/interface/embed0.go | 24 | ||||
-rw-r--r-- | test/interface/embed1.go | 50 | ||||
-rw-r--r-- | test/interface/embed2.go | 70 | ||||
-rw-r--r-- | test/interface/explicit.go | 12 | ||||
-rw-r--r-- | test/interface/fail.go | 12 | ||||
-rw-r--r-- | test/interface/fake.go | 78 | ||||
-rw-r--r-- | test/interface/receiver.go | 4 | ||||
-rw-r--r-- | test/interface/returntype.go | 6 | ||||
-rw-r--r-- | test/interface/struct.go | 152 |
13 files changed, 304 insertions, 255 deletions
diff --git a/test/interface/bigdata.go b/test/interface/bigdata.go index 674ea1276..44f6ab127 100644 --- a/test/interface/bigdata.go +++ b/test/interface/bigdata.go @@ -23,24 +23,24 @@ func (z *IntPtr) M() int64 { return int64(*z) } var bad bool func test(name string, i I) { - m := i.M(); + m := i.M() if m != 12345 { - println(name, m); - bad = true; + println(name, m) + bad = true } } func ptrs() { - var bigptr BigPtr = BigPtr{ 10000, 2000, 300, 45 }; - var smallptr SmallPtr = SmallPtr{ 12345 }; - var intptr IntPtr = 12345; - -// test("bigptr", bigptr); - test("&bigptr", &bigptr); -// test("smallptr", smallptr); - test("&smallptr", &smallptr); -// test("intptr", intptr); - test("&intptr", &intptr); + var bigptr BigPtr = BigPtr{ 10000, 2000, 300, 45 } + var smallptr SmallPtr = SmallPtr{ 12345 } + var intptr IntPtr = 12345 + +// test("bigptr", bigptr) + test("&bigptr", &bigptr) +// test("smallptr", smallptr) + test("&smallptr", &smallptr) +// test("intptr", intptr) + test("&intptr", &intptr) } type Big struct { a, b, c, d int64 } @@ -53,23 +53,23 @@ type Int int32 func (z Int) M() int64 { return int64(z) } func nonptrs() { - var big Big = Big{ 10000, 2000, 300, 45 }; - var small Small = Small{ 12345 }; - var int Int = 12345; - - test("big", big); - test("&big", &big); - test("small", small); - test("&small", &small); - test("int", int); - test("&int", &int); + var big Big = Big{ 10000, 2000, 300, 45 } + var small Small = Small{ 12345 } + var int Int = 12345 + + test("big", big) + test("&big", &big) + test("small", small) + test("&small", &small) + test("int", int) + test("&int", &int) } func main() { - ptrs(); - nonptrs(); + ptrs() + nonptrs() if bad { - println("BUG: interface4"); + println("BUG: interface4") } } diff --git a/test/interface/convert1.go b/test/interface/convert1.go index 0eff6a95d..658b1a92f 100644 --- a/test/interface/convert1.go +++ b/test/interface/convert1.go @@ -9,17 +9,17 @@ package main -type R interface { R(); } -type RW interface { R(); W(); } +type R interface { R() } +type RW interface { R(); W() } var e interface {} -var r R; -var rw RW; +var r R +var rw RW func main() { - r = r; - r = rw; - e = r; - e = rw; - rw = rw; + r = r + r = rw + e = r + e = rw + rw = rw } diff --git a/test/interface/convert2.go b/test/interface/convert2.go index 0eff6a95d..658b1a92f 100644 --- a/test/interface/convert2.go +++ b/test/interface/convert2.go @@ -9,17 +9,17 @@ package main -type R interface { R(); } -type RW interface { R(); W(); } +type R interface { R() } +type RW interface { R(); W() } var e interface {} -var r R; -var rw RW; +var r R +var rw RW func main() { - r = r; - r = rw; - e = r; - e = rw; - rw = rw; + r = r + r = rw + e = r + e = rw + rw = rw } diff --git a/test/interface/embed.go b/test/interface/embed.go index 936ea49b7..2fddee190 100644 --- a/test/interface/embed.go +++ b/test/interface/embed.go @@ -4,7 +4,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// Check methods derived from embedded interface and *interface values. +// Check methods derived from embedded interface values. package main @@ -19,64 +19,43 @@ func (t T) M() int64 { return int64(t) } var t = T(Value) var pt = &t var ti Inter = t -var pti = &ti type S struct { Inter } var s = S{ ti } var ps = &s -type SP struct { *Inter } -var sp = SP{ &ti } -var psp = &sp - var i Inter -var pi = &i var ok = true func check(s string, v int64) { if v != Value { - println(s, v); - ok = false; + println(s, v) + ok = false } } func main() { - check("t.M()", t.M()); - check("pt.M()", pt.M()); - check("ti.M()", ti.M()); - check("pti.M()", pti.M()); - check("s.M()", s.M()); - check("ps.M()", ps.M()); - check("sp.M()", sp.M()); - check("psp.M()", psp.M()); - - i = t; - check("i = t; i.M()", i.M()); - check("i = t; pi.M()", pi.M()); - - i = pt; - check("i = pt; i.M()", i.M()); - check("i = pt; pi.M()", pi.M()); - - i = s; - check("i = s; i.M()", i.M()); - check("i = s; pi.M()", pi.M()); - - i = ps; - check("i = ps; i.M()", i.M()); - check("i = ps; pi.M()", pi.M()); - - i = sp; - check("i = sp; i.M()", i.M()); - check("i = sp; pi.M()", pi.M()); - - i = psp; - check("i = psp; i.M()", i.M()); - check("i = psp; pi.M()", pi.M()); + check("t.M()", t.M()) + check("pt.M()", pt.M()) + check("ti.M()", ti.M()) + check("s.M()", s.M()) + check("ps.M()", ps.M()) + + i = t + check("i = t; i.M()", i.M()) + + i = pt + check("i = pt; i.M()", i.M()) + + i = s + check("i = s; i.M()", i.M()) + + i = ps + check("i = ps; i.M()", i.M()) if !ok { - println("BUG: interface10"); + println("BUG: interface10") os.Exit(1) } } diff --git a/test/interface/embed0.go b/test/interface/embed0.go index fd16e2733..bbd81e760 100644 --- a/test/interface/embed0.go +++ b/test/interface/embed0.go @@ -12,18 +12,18 @@ type T int func (t T) m() {} type I interface { m() } -type J interface { I; } +type J interface { I } func main() { - var i I; - var j J; - var t T; - i = t; - j = t; - _ = i; - _ = j; - i = j; - _ = i; - j = i; - _ = j; + var i I + var j J + var t T + i = t + j = t + _ = i + _ = j + i = j + _ = i + j = i + _ = j } diff --git a/test/interface/embed1.go b/test/interface/embed1.go index 6e15031ea..24e50471f 100644 --- a/test/interface/embed1.go +++ b/test/interface/embed1.go @@ -14,32 +14,32 @@ type T int func (t T) m() {} type I interface { m() } -type J interface { I; } +type J interface { I } -type PI interface { p.I; } -type PJ interface { p.J; } +type PI interface { p.I } +type PJ interface { p.J } func main() { - var i I; - var j J; - var t T; - i = t; - j = t; - _ = i; - _ = j; - i = j; - _ = i; - j = i; - _ = j; - var pi PI; - var pj PJ; - var pt p.T; - pi = pt; - pj = pt; - _ = pi; - _ = pj; - pi = pj; - _ = pi; - pj = pi; - _ = pj; + var i I + var j J + var t T + i = t + j = t + _ = i + _ = j + i = j + _ = i + j = i + _ = j + var pi PI + var pj PJ + var pt p.T + pi = pt + pj = pt + _ = pi + _ = pj + pi = pj + _ = pi + pj = pi + _ = pj } diff --git a/test/interface/embed2.go b/test/interface/embed2.go new file mode 100644 index 000000000..c18a1fece --- /dev/null +++ b/test/interface/embed2.go @@ -0,0 +1,70 @@ +// errchk $G -e $D/$F.go + +// 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. + +// Check methods derived from embedded interface and *interface values. + +package main + +import "os" + +const Value = 1e12 + +type Inter interface { M() int64 } + +type T int64 +func (t T) M() int64 { return int64(t) } +var t = T(Value) +var pt = &t +var ti Inter = t +var pti = &ti + +type S struct { Inter } +var s = S{ ti } +var ps = &s + +type SP struct { *Inter } // ERROR "interface" + +var i Inter +var pi = &i + +var ok = true + +func check(s string, v int64) { + if v != Value { + println(s, v) + ok = false + } +} + +func main() { + check("t.M()", t.M()) + check("pt.M()", pt.M()) + check("ti.M()", ti.M()) + check("pti.M()", pti.M()) // ERROR "method" + check("s.M()", s.M()) + check("ps.M()", ps.M()) + + i = t + check("i = t; i.M()", i.M()) + check("i = t; pi.M()", pi.M()) // ERROR "method" + + i = pt + check("i = pt; i.M()", i.M()) + check("i = pt; pi.M()", pi.M()) // ERROR "method" + + i = s + check("i = s; i.M()", i.M()) + check("i = s; pi.M()", pi.M()) // ERROR "method" + + i = ps + check("i = ps; i.M()", i.M()) + check("i = ps; pi.M()", pi.M()) // ERROR "method" + + if !ok { + println("BUG: interface10") + os.Exit(1) + } +} diff --git a/test/interface/explicit.go b/test/interface/explicit.go index 120135cb6..b952f8fc8 100644 --- a/test/interface/explicit.go +++ b/test/interface/explicit.go @@ -42,10 +42,10 @@ func main() { t = i // ERROR "incompatible|need type assertion" i = i2 // ok - i2 = i // ERROR "missing N method" + i2 = i // ERROR "incompatible|missing N method" i = I(i2) // ok - i2 = I2(i) // ERROR "missing N method" + i2 = I2(i) // ERROR "invalid|missing N method" e = E(t) // ok t = T(e) // ERROR "need explicit|need type assertion|incompatible" @@ -64,8 +64,8 @@ var _ = m.(Int) // ERROR "impossible type assertion" var ii int var jj Int -var m1 M = ii // ERROR "missing" -var m2 M = jj // ERROR "wrong type for M method" +var m1 M = ii // ERROR "incompatible|missing" +var m2 M = jj // ERROR "incompatible|wrong type for M method" -var m3 = M(ii) // ERROR "missing" -var m4 = M(jj) // ERROR "wrong type for M method" +var m3 = M(ii) // ERROR "invalid|missing" +var m4 = M(jj) // ERROR "invalid|wrong type for M method" diff --git a/test/interface/fail.go b/test/interface/fail.go index 07bd865c8..3e741d3f9 100644 --- a/test/interface/fail.go +++ b/test/interface/fail.go @@ -13,12 +13,12 @@ type I interface { } func main() { - var s *S; - var i I; - var e interface {}; - e = s; - i = e.(I); - _ = i; + var s *S + var i I + var e interface {} + e = s + i = e.(I) + _ = i } // hide S down here to avoid static warning diff --git a/test/interface/fake.go b/test/interface/fake.go index 687b3ff0c..5cf3be052 100644 --- a/test/interface/fake.go +++ b/test/interface/fake.go @@ -12,69 +12,69 @@ package main import "reflect" type T struct { - f float32; - g float32; + f float32 + g float32 - s string; - t string; + s string + t string - u uint32; - v uint32; + u uint32 + v uint32 - w uint32; - x uint32; + w uint32 + x uint32 - y uint32; - z uint32; + y uint32 + z uint32 } func add(s, t string) string { - return s + t; + return s + t } func assert(b bool) { if !b { - panic("assert"); + panic("assert") } } func main() { - var x T; - x.f = 1.0; - x.g = x.f; - x.s = add("abc", "def"); - x.t = add("abc", "def"); - x.u = 1; - x.v = 2; - x.w = 1<<28; - x.x = 2<<28; - x.y = 0x12345678; - x.z = x.y; + var x T + x.f = 1.0 + x.g = x.f + x.s = add("abc", "def") + x.t = add("abc", "def") + x.u = 1 + x.v = 2 + x.w = 1<<28 + x.x = 2<<28 + x.y = 0x12345678 + x.z = x.y // check mem and string - v := reflect.NewValue(x); - i := v.(*reflect.StructValue).Field(0); - j := v.(*reflect.StructValue).Field(1); - assert(i.Interface() == j.Interface()); + v := reflect.NewValue(x) + i := v.(*reflect.StructValue).Field(0) + j := v.(*reflect.StructValue).Field(1) + assert(i.Interface() == j.Interface()) - s := v.(*reflect.StructValue).Field(2); - t := v.(*reflect.StructValue).Field(3); - assert(s.Interface() == t.Interface()); + s := v.(*reflect.StructValue).Field(2) + t := v.(*reflect.StructValue).Field(3) + assert(s.Interface() == t.Interface()) // make sure different values are different. // make sure whole word is being compared, // not just a single byte. - i = v.(*reflect.StructValue).Field(4); - j = v.(*reflect.StructValue).Field(5); - assert(i.Interface() != j.Interface()); + i = v.(*reflect.StructValue).Field(4) + j = v.(*reflect.StructValue).Field(5) + assert(i.Interface() != j.Interface()) - i = v.(*reflect.StructValue).Field(6); - j = v.(*reflect.StructValue).Field(7); - assert(i.Interface() != j.Interface()); + i = v.(*reflect.StructValue).Field(6) + j = v.(*reflect.StructValue).Field(7) + assert(i.Interface() != j.Interface()) - i = v.(*reflect.StructValue).Field(8); - j = v.(*reflect.StructValue).Field(9); - assert(i.Interface() == j.Interface()); + i = v.(*reflect.StructValue).Field(8) + j = v.(*reflect.StructValue).Field(9) + assert(i.Interface() == j.Interface()) } /* diff --git a/test/interface/receiver.go b/test/interface/receiver.go index f74cecb2c..f53daf8da 100644 --- a/test/interface/receiver.go +++ b/test/interface/receiver.go @@ -64,7 +64,7 @@ func main() { v = &t v.V() - // p = t; // ERROR + // p = t // ERROR var i interface{} = t if _, ok := i.(P); ok { println("dynamic i.(P) succeeded incorrectly") @@ -87,7 +87,7 @@ func main() { v = &s v.V() - // p = s; // ERROR + // p = s // ERROR var j interface{} = s if _, ok := j.(P); ok { println("dynamic j.(P) succeeded incorrectly") diff --git a/test/interface/returntype.go b/test/interface/returntype.go index 93298bce7..c526b3b0e 100644 --- a/test/interface/returntype.go +++ b/test/interface/returntype.go @@ -18,8 +18,8 @@ type I1 interface { Name() int8 } type I2 interface { Name() int64 } func main() { - var i1 I1; - var s *S; - i1 = s; + var i1 I1 + var s *S + i1 = s print(i1.(I2).Name()) } diff --git a/test/interface/struct.go b/test/interface/struct.go index 1c7028e06..40b7f4f91 100644 --- a/test/interface/struct.go +++ b/test/interface/struct.go @@ -14,39 +14,39 @@ var fail int func check(b bool, msg string) { if (!b) { - println("failure in", msg); - fail++; + println("failure in", msg) + fail++ } } -type I1 interface { Get() int; Put(int); } +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"); + 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"); + 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"); + 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 } @@ -55,57 +55,57 @@ 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"); +// 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"); + 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"); + 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 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"); + 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"); + 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"); + 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 } @@ -114,42 +114,42 @@ 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"); +// 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"); + 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"); + 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(); + f1() + f2() + f3() +// f4() + f5() + f6() + f7() + f8() + f9() +// f10() + f11() + f12() if fail > 0 { os.Exit(1) } |