summaryrefslogtreecommitdiff
path: root/test/interface
diff options
context:
space:
mode:
authorOndřej Surý <ondrej@sury.org>2011-01-17 12:40:45 +0100
committerOndřej Surý <ondrej@sury.org>2011-01-17 12:40:45 +0100
commit3e45412327a2654a77944249962b3652e6142299 (patch)
treebc3bf69452afa055423cbe0c5cfa8ca357df6ccf /test/interface
parentc533680039762cacbc37db8dc7eed074c3e497be (diff)
downloadgolang-3e45412327a2654a77944249962b3652e6142299.tar.gz
Imported Upstream version 2011.01.12upstream/2011.01.12
Diffstat (limited to 'test/interface')
-rw-r--r--test/interface/bigdata.go52
-rw-r--r--test/interface/convert1.go18
-rw-r--r--test/interface/convert2.go18
-rw-r--r--test/interface/embed.go63
-rw-r--r--test/interface/embed0.go24
-rw-r--r--test/interface/embed1.go50
-rw-r--r--test/interface/embed2.go70
-rw-r--r--test/interface/explicit.go12
-rw-r--r--test/interface/fail.go12
-rw-r--r--test/interface/fake.go78
-rw-r--r--test/interface/receiver.go4
-rw-r--r--test/interface/returntype.go6
-rw-r--r--test/interface/struct.go152
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)
}