gitlab.com/Raven-IO/raven-delve@v1.22.4/_fixtures/scopetest.go (about)

     1  package main
     2  
     3  func f1(x int) {}
     4  func f2(x int) {}
     5  func f3(x int) {}
     6  func f4(x int) {}
     7  func f5(x int) {}
     8  func f6(x int) {}
     9  func gret1(x int) int {
    10  	return x - 1
    11  }
    12  
    13  var boolvar = true
    14  
    15  func gretbool() bool {
    16  	x := boolvar
    17  	boolvar = !boolvar
    18  	return x
    19  }
    20  func gret3() (int, int, int) { return 0, 1, 2 }
    21  
    22  var v = []int{0, 1, 2}
    23  var ch = make(chan int, 1)
    24  var floatch = make(chan float64, 1)
    25  var iface interface{} = 13
    26  
    27  func TestNestedFor() {
    28  	a := 0
    29  	f1(a) // a int = 0
    30  	for i := 0; i < 5; i++ {
    31  		f2(i) // a int = 0, i int
    32  		for i := 1; i < 5; i++ {
    33  			f3(i) // a int = 0, i int = 0, i int = 1
    34  			i++
    35  			f3(i)
    36  		}
    37  		f4(i) // a int = 0, i int = 0
    38  	}
    39  	f5(a)
    40  }
    41  func TestOas2() {
    42  	if a, b, c := gret3(); a != 1 {
    43  		f1(a) // a int = 0, b int = 1, c int = 2
    44  		f1(b) // a int = 0, b int = 1, c int = 2
    45  		f1(c) // a int = 0, b int = 1, c int = 2
    46  	}
    47  	for i, x := range v {
    48  		f1(i) // i int = 0, x int = 0
    49  		f1(x) // i int = 0, x int = 0
    50  	}
    51  	if a, ok := <-ch; ok {
    52  		f1(a) // a int = 12, ok bool = true
    53  	}
    54  	if a, ok := iface.(int); ok {
    55  		f1(a) // a int = 13, ok bool = true
    56  	}
    57  }
    58  func TestIfElse(x int) {
    59  	if x := gret1(x); x != 0 {
    60  		a := 0
    61  		f1(a) // x int = 2, x int = 1, a int = 0
    62  		f1(x)
    63  	} else {
    64  		b := 1
    65  		f1(b) // x int = 1, x int = 0, b int = 1
    66  		f1(x + 1)
    67  	}
    68  }
    69  func TestSwitch(in int) {
    70  	switch x := gret1(in); x {
    71  	case 0:
    72  		i := x + 5
    73  		f1(x) // in int = 1, x int = 0, i int  = 5
    74  		f1(i)
    75  	case 1:
    76  		j := x + 10
    77  		f1(x)
    78  		f1(j) // in int = 2, x int = 1, j int = 11
    79  	case 2:
    80  		k := x + 2
    81  		f1(x)
    82  		f1(k) // in int = 3, x int = 2, k int = 4
    83  	}
    84  }
    85  func TestTypeSwitch(iface interface{}) {
    86  	switch x := iface.(type) {
    87  	case int:
    88  		f1(x) // iface interface{}, x int = 1
    89  	case uint8:
    90  		f1(int(x)) // iface interface{}, x uint8 = 2
    91  	case float64:
    92  		f1(int(x) + 1) // iface interface{}, x float64 = 3.0
    93  	}
    94  }
    95  func TestSelectScope() {
    96  	select {
    97  	case i := <-ch:
    98  		f1(i) // i int = 13
    99  	case f := <-floatch:
   100  		f1(int(f)) // f float64 = 14.0
   101  	}
   102  }
   103  func TestBlock() {
   104  	a := 1
   105  	f1(a) // a int = 1
   106  	{
   107  		b := 2
   108  		a := 3
   109  		f1(b) // a int = 1, a int = 3, b int = 2
   110  		f1(a) // a int = 1, a int = 3, b int = 2
   111  	}
   112  }
   113  func TestDiscontiguousRanges() {
   114  	a := 0
   115  	f1(a) // a int = 0
   116  	{
   117  		b := 0
   118  		f2(b) // a int = 0, b int = 0
   119  		if gretbool() {
   120  			c := 0
   121  			f3(c) // a int = 0, b int = 0, c int = 0
   122  		} else {
   123  			c := 1.1
   124  			f4(int(c)) // a int = 0, b int = 0, c float64 = 1.1
   125  		}
   126  		f5(b) // a int = 0, b int  = 0
   127  	}
   128  	f6(a) // a int = 0
   129  }
   130  func TestClosureScope() {
   131  	a := 1
   132  	b := 1
   133  	f := func(c int) {
   134  		d := 3
   135  		f1(a) // a int = 1, c int = 3, d int = 3
   136  		f1(c)
   137  		f1(d)
   138  		if e := 3; e != 0 {
   139  			f1(e) // a int = 1, c int = 3, d int = 3, e int = 3
   140  		}
   141  	}
   142  	f(3)
   143  	f1(b)
   144  }
   145  func TestClosureShadow() {
   146  	v := 1
   147  	closure := func() {
   148  		f1(v) // v int = 1
   149  		v := 2
   150  		f1(v) // v int = 1, v int = 2
   151  		for i := 0; i < 1; i++ {
   152  			f1(v) // v int = 1, v int = 2, i int = 0
   153  		}
   154  	}
   155  	closure()
   156  }
   157  func main() {
   158  	ch <- 12
   159  	TestNestedFor()
   160  	TestOas2()
   161  	TestIfElse(2)
   162  	TestIfElse(1)
   163  	TestSwitch(3)
   164  	TestSwitch(2)
   165  	TestSwitch(1)
   166  	TestTypeSwitch(1)
   167  	TestTypeSwitch(uint8(2))
   168  	TestTypeSwitch(float64(3.0))
   169  	ch <- 13
   170  	TestSelectScope()
   171  	floatch <- 14.0
   172  	TestSelectScope()
   173  	TestBlock()
   174  	TestDiscontiguousRanges()
   175  	TestDiscontiguousRanges()
   176  	TestClosureScope()
   177  	TestClosureShadow()
   178  }