delve/_fixtures/scopetest.go

179 lines
3.1 KiB
Go
Raw Permalink Normal View History

2017-05-04 14:35:31 +00:00
package main
func f1(x int) {}
func f2(x int) {}
func f3(x int) {}
func f4(x int) {}
func f5(x int) {}
func f6(x int) {}
func gret1(x int) int {
return x - 1
}
var boolvar = true
func gretbool() bool {
x := boolvar
boolvar = !boolvar
return x
}
func gret3() (int, int, int) { return 0, 1, 2 }
var v = []int{0, 1, 2}
var ch = make(chan int, 1)
var floatch = make(chan float64, 1)
var iface interface{} = 13
func TestNestedFor() {
a := 0
f1(a) // a int = 0
for i := 0; i < 5; i++ {
f2(i) // a int = 0, i int
2017-05-04 14:35:31 +00:00
for i := 1; i < 5; i++ {
f3(i) // a int = 0, i int = 0, i int = 1
i++
f3(i)
}
f4(i) // a int = 0, i int = 0
}
f5(a)
}
func TestOas2() {
if a, b, c := gret3(); a != 1 {
f1(a) // a int = 0, b int = 1, c int = 2
f1(b) // a int = 0, b int = 1, c int = 2
f1(c) // a int = 0, b int = 1, c int = 2
}
for i, x := range v {
f1(i) // i int = 0, x int = 0
f1(x) // i int = 0, x int = 0
}
if a, ok := <-ch; ok {
f1(a) // a int = 12, ok bool = true
}
if a, ok := iface.(int); ok {
f1(a) // a int = 13, ok bool = true
}
}
func TestIfElse(x int) {
if x := gret1(x); x != 0 {
a := 0
f1(a) // x int = 2, x int = 1, a int = 0
f1(x)
} else {
b := 1
f1(b) // x int = 1, x int = 0, b int = 1
f1(x + 1)
}
}
func TestSwitch(in int) {
switch x := gret1(in); x {
case 0:
i := x + 5
f1(x) // in int = 1, x int = 0, i int = 5
f1(i)
case 1:
j := x + 10
f1(x)
f1(j) // in int = 2, x int = 1, j int = 11
case 2:
k := x + 2
f1(x)
f1(k) // in int = 3, x int = 2, k int = 4
}
}
func TestTypeSwitch(iface interface{}) {
switch x := iface.(type) {
case int:
f1(x) // iface interface{}, x int = 1
case uint8:
f1(int(x)) // iface interface{}, x uint8 = 2
case float64:
f1(int(x) + 1) // iface interface{}, x float64 = 3.0
}
}
func TestSelectScope() {
select {
case i := <-ch:
f1(i) // i int = 13
case f := <-floatch:
f1(int(f)) // f float64 = 14.0
}
}
func TestBlock() {
a := 1
f1(a) // a int = 1
{
b := 2
a := 3
f1(b) // a int = 1, a int = 3, b int = 2
f1(a) // a int = 1, a int = 3, b int = 2
}
}
func TestDiscontiguousRanges() {
a := 0
f1(a) // a int = 0
{
b := 0
f2(b) // a int = 0, b int = 0
if gretbool() {
c := 0
f3(c) // a int = 0, b int = 0, c int = 0
} else {
c := 1.1
f4(int(c)) // a int = 0, b int = 0, c float64 = 1.1
}
f5(b) // a int = 0, b int = 0
}
f6(a) // a int = 0
}
func TestClosureScope() {
a := 1
b := 1
f := func(c int) {
d := 3
f1(a) // a int = 1, c int = 3, d int = 3
f1(c)
f1(d)
if e := 3; e != 0 {
f1(e) // a int = 1, c int = 3, d int = 3, e int = 3
}
}
f(3)
f1(b)
}
func TestClosureShadow() {
v := 1
closure := func() {
f1(v) // v int = 1
v := 2
f1(v) // v int = 1, v int = 2
for i := 0; i < 1; i++ {
f1(v) // v int = 1, v int = 2, i int = 0
}
}
closure()
}
2017-05-04 14:35:31 +00:00
func main() {
ch <- 12
TestNestedFor()
TestOas2()
TestIfElse(2)
TestIfElse(1)
TestSwitch(3)
TestSwitch(2)
TestSwitch(1)
TestTypeSwitch(1)
TestTypeSwitch(uint8(2))
TestTypeSwitch(float64(3.0))
ch <- 13
TestSelectScope()
floatch <- 14.0
TestSelectScope()
TestBlock()
TestDiscontiguousRanges()
TestDiscontiguousRanges()
TestClosureScope()
TestClosureShadow()
2017-05-04 14:35:31 +00:00
}