]> Cypherpunks repositories - gostls13.git/commitdiff
test: a number of fixes.
authorAlan Donovan <adonovan@google.com>
Mon, 11 Feb 2013 23:20:52 +0000 (18:20 -0500)
committerAlan Donovan <adonovan@google.com>
Mon, 11 Feb 2013 23:20:52 +0000 (18:20 -0500)
Details:
- reorder.go: delete p8.
  (Once expectation is changed per b/4627 it is identical to p1.)
- switch.go: added some more (degenerate) switches.
- range.go: improved error messages in a few cases.
- method.go: added tests of calls to promoted methods.

R=iant
CC=golang-dev
https://golang.org/cl/7306087

test/method.go
test/range.go
test/reorder.go
test/switch.go

index 0c239afbd1946f815b83548d8ab49c40cea5e721..d97bc4a7d0907b8014fe79ab27cca0308b189cea 100644 (file)
@@ -128,13 +128,13 @@ func main() {
                panic("fail")
        }
 
-       var zs struct { S }
-       var zps struct { *S1 }
-       var zi struct { I }
-       var zpi struct { *I1 }
-       var zpt struct { *T1 }
-       var zt struct { T }
-       var zv struct { Val }
+       var zs struct{ S }
+       var zps struct{ *S1 }
+       var zi struct{ I }
+       var zpi struct{ *I1 }
+       var zpt struct{ *T1 }
+       var zt struct{ T }
+       var zv struct{ Val }
 
        if zs.val() != 1 {
                println("zs.val:", zs.val())
@@ -247,4 +247,61 @@ func main() {
                println("zv.val():", zv.val())
                panic("fail")
        }
+
+       promotion()
+}
+
+type A struct{ B }
+type B struct {
+       C
+       *D
+}
+type C int
+
+func (C) f()  {} // value receiver, direct field of A
+func (*C) g() {} // pointer receiver
+
+type D int
+
+func (D) h()  {} // value receiver, indirect field of A
+func (*D) i() {} // pointer receiver
+
+func expectPanic() {
+       if r := recover(); r == nil {
+               panic("expected nil dereference")
+       }
+}
+
+func promotion() {
+       var a A
+       // Addressable value receiver.
+       a.f()
+       a.g()
+       func() {
+               defer expectPanic()
+               a.h() // dynamic error: nil dereference in a.B.D->f()
+       }()
+       a.i()
+
+       // Non-addressable value receiver.
+       A(a).f()
+       // A(a).g() // static error: cannot call pointer method on A literal.B.C
+       func() {
+               defer expectPanic()
+               A(a).h() // dynamic error: nil dereference in A().B.D->f()
+       }()
+       A(a).i()
+
+       // Pointer receiver.
+       (&a).f()
+       (&a).g()
+       func() {
+               defer expectPanic()
+               (&a).h() // dynamic error: nil deref: nil dereference in (&a).B.D->f()
+       }()
+       (&a).i()
+
+       c := new(C)
+       c.f() // makes a copy
+       c.g()
 }
index 68b0c9a2f3362be907da60e6fb25c207a4df98f9..8effbe9c53a990decbece1baf23222672203f5c8 100644 (file)
@@ -55,10 +55,10 @@ func testslice() {
                panic("fail")
        }
        if s != 15 {
-               println("wrong sum ranging over makeslice")
+               println("wrong sum ranging over makeslice", s)
                panic("fail")
        }
-       
+
        x := []int{10, 20}
        y := []int{99}
        i := 1
@@ -82,7 +82,7 @@ func testslice1() {
                panic("fail")
        }
        if s != 10 {
-               println("wrong sum ranging over makeslice")
+               println("wrong sum ranging over makeslice", s)
                panic("fail")
        }
 }
@@ -106,7 +106,7 @@ func testarray() {
                panic("fail")
        }
        if s != 15 {
-               println("wrong sum ranging over makearray")
+               println("wrong sum ranging over makearray", s)
                panic("fail")
        }
 }
@@ -122,7 +122,7 @@ func testarray1() {
                panic("fail")
        }
        if s != 10 {
-               println("wrong sum ranging over makearray")
+               println("wrong sum ranging over makearray", s)
                panic("fail")
        }
 }
@@ -155,7 +155,7 @@ func testarrayptr() {
                panic("fail")
        }
        if s != 15 {
-               println("wrong sum ranging over makearrayptr")
+               println("wrong sum ranging over makearrayptr", s)
                panic("fail")
        }
 }
@@ -171,7 +171,7 @@ func testarrayptr1() {
                panic("fail")
        }
        if s != 10 {
-               println("wrong sum ranging over makearrayptr")
+               println("wrong sum ranging over makearrayptr", s)
                panic("fail")
        }
 }
@@ -195,7 +195,7 @@ func teststring() {
                panic("fail")
        }
        if s != 'a'+'b'+'c'+'d'+'☺' {
-               println("wrong sum ranging over makestring")
+               println("wrong sum ranging over makestring", s)
                panic("fail")
        }
 }
@@ -211,7 +211,7 @@ func teststring1() {
                panic("fail")
        }
        if s != 10 {
-               println("wrong sum ranging over makestring")
+               println("wrong sum ranging over makestring", s)
                panic("fail")
        }
 }
@@ -235,7 +235,7 @@ func testmap() {
                panic("fail")
        }
        if s != 'a'+'b'+'c'+'d'+'☺' {
-               println("wrong sum ranging over makemap")
+               println("wrong sum ranging over makemap", s)
                panic("fail")
        }
 }
@@ -251,7 +251,7 @@ func testmap1() {
                panic("fail")
        }
        if s != 10 {
-               println("wrong sum ranging over makemap")
+               println("wrong sum ranging over makemap", s)
                panic("fail")
        }
 }
index 0cdeebd0f3160f4c303bf65383adeb6375c62c07..8fd623c1c7074e4fc1d88b76b380cc48af679c5b 100644 (file)
@@ -19,7 +19,6 @@ func main() {
        p6()
        p7()
        p8()
-       p9()
 }
 
 var gx []int
@@ -43,7 +42,7 @@ func check3(x, y, z, xx, yy, zz int) {
 }
 
 func p1() {
-       x := []int{1,2,3}
+       x := []int{1, 2, 3}
        i := 0
        i, x[i] = 1, 100
        _ = i
@@ -51,7 +50,7 @@ func p1() {
 }
 
 func p2() {
-       x := []int{1,2,3}
+       x := []int{1, 2, 3}
        i := 0
        x[i], i = 100, 1
        _ = i
@@ -59,7 +58,7 @@ func p2() {
 }
 
 func p3() {
-       x := []int{1,2,3}
+       x := []int{1, 2, 3}
        y := x
        gx = x
        x[1], y[0] = f(0), f(1)
@@ -67,7 +66,7 @@ func p3() {
 }
 
 func p4() {
-       x := []int{1,2,3}
+       x := []int{1, 2, 3}
        y := x
        gx = x
        x[1], y[0] = gx[0], gx[1]
@@ -75,7 +74,7 @@ func p4() {
 }
 
 func p5() {
-       x := []int{1,2,3}
+       x := []int{1, 2, 3}
        y := x
        p := &x[0]
        q := &x[1]
@@ -90,7 +89,7 @@ func p6() {
        px := &x
        py := &y
        *px, *py = y, x
-       check3(x, y, z, 2, 1, 3)        
+       check3(x, y, z, 2, 1, 3)
 }
 
 func f1(x, y, z int) (xx, yy, zz int) {
@@ -107,21 +106,6 @@ func p7() {
 }
 
 func p8() {
-       x := []int{1,2,3}
-
-       defer func() {
-               err := recover()
-               if err == nil {
-                       panic("not panicking")
-               }
-               check(x, 100, 2, 3)
-       }()
-
-       i := 0
-       i, x[i], x[5] = 1, 100, 500
-}
-
-func p9() {
        m := make(map[int]int)
        m[0] = len(m)
        if m[0] != 0 {
index fd8748b9bceb257f21d9bded8646808e6f2f3caf..c6a0ebc74ae869c0189cd6e01ba3d19bf91c6518 100644 (file)
@@ -307,9 +307,9 @@ func main() {
 
        // switch on array.
        switch ar := [3]int{1, 2, 3}; ar {
-       case [3]int{1,2,3}:
+       case [3]int{1, 2, 3}:
                assert(true, "[1 2 3]")
-       case [3]int{4,5,6}:
+       case [3]int{4, 5, 6}:
                assert(false, "ar should be [1 2 3]")
        default:
                assert(false, "ar should be [1 2 3]")
@@ -327,12 +327,57 @@ func main() {
                assert(false, "c1 did not match itself")
        }
 
+       // empty switch
+       switch {
+       }
+
+       // empty switch with default case.
+       fired = false
+       switch {
+       default:
+               fired = true
+       }
+       assert(fired, "fail")
+
+       // Default and fallthrough.
+       count = 0
+       switch {
+       default:
+               count++
+               fallthrough
+       case false:
+               count++
+       }
+       assert(count == 2, "fail")
+
+       // fallthrough to default, which is not at end.
+       count = 0
+       switch i5 {
+       case 5:
+               count++
+               fallthrough
+       default:
+               count++
+       case 6:
+               count++
+       }
+       assert(count == 2, "fail")
+
+       // fallthrough in final case.
+       count = 0
+       switch i5 {
+       case 5:
+               count++
+               fallthrough
+       }
+       assert(count == 1, "fail")
+
        i := 0
        switch x := 5; {
-               case i < x:
-                       os.Exit(0)
-               case i == x:
-               case i > x:
-                       os.Exit(1)
+       case i < x:
+               os.Exit(0)
+       case i == x:
+       case i > x:
+               os.Exit(1)
        }
 }