github.com/tencent/goom@v1.0.1/test/data.go (about)

     1  // Package test 兼容性测试、跨包结构测试工具类
     2  package test
     3  
     4  import "fmt"
     5  
     6  // GlobalVar 用于测试全局变量 mock
     7  var GlobalVar = 1
     8  
     9  // Foo foo 测试函数
    10  //
    11  //go:noinline
    12  func Foo(i int) int {
    13  	// check 对 defer 的支持
    14  	defer func() { fmt.Printf("defer\n") }()
    15  	cgoFuncAny()
    16  	return i * 1
    17  }
    18  
    19  // foo foo 测试未导出函数
    20  //
    21  //go:noinline
    22  func foo(i int) int {
    23  	// check 对 defer 的支持
    24  	defer func() { fmt.Printf("defer\n") }()
    25  	return i * 1
    26  }
    27  
    28  // Invokefoo foo 测试调用未导出函数
    29  //
    30  //go:noinline
    31  func Invokefoo(i int) int {
    32  	return foo(i)
    33  }
    34  
    35  // fake 未导出结构体
    36  type fake struct {
    37  	field1 string
    38  	field2 int
    39  }
    40  
    41  // NewUnexportedFake 构建未导出fake
    42  // nolint
    43  func NewUnexportedFake() *fake {
    44  	return &fake{
    45  		field1: "field1",
    46  		field2: 2,
    47  	}
    48  }
    49  
    50  // Call 普通方法
    51  //
    52  //go:noinline
    53  func (f *fake) Call(i int) int {
    54  	if i < -10000 {
    55  		dummy()
    56  	}
    57  	return i
    58  }
    59  
    60  // Call2 普通方法
    61  //
    62  //go:noinline
    63  func (f *fake) Call2(i int) int {
    64  	if i < -10000 {
    65  		dummy()
    66  	}
    67  	return i
    68  }
    69  
    70  // call 未导出方法
    71  //
    72  //go:noinline
    73  func (f *fake) call(i int) int {
    74  	if i < -10000 {
    75  		dummy()
    76  	}
    77  	return i
    78  }
    79  
    80  // Invokecall 测试调用未导出函数
    81  //
    82  //go:noinline
    83  func (f *fake) Invokecall(i int) int {
    84  	return f.call(i)
    85  }
    86  
    87  func dummy() {
    88  	fmt.Println("never print, just from fill function length")
    89  }
    90  
    91  // S 测试返回复杂类型
    92  type S struct {
    93  	Field1 string
    94  	Field2 int
    95  }
    96  
    97  // S1 测试返回同等结构(不同Type)的值
    98  type S1 struct {
    99  	Field1 string
   100  	Field2 int
   101  }
   102  
   103  // Foo1 foo1 测试函数返回复杂类型
   104  //
   105  //go:noinline
   106  func Foo1() *S {
   107  	return &S{
   108  		Field1: "ok",
   109  		Field2: 2,
   110  	}
   111  }
   112  
   113  // GetS 测试返回多参返回值
   114  //
   115  //go:noinline
   116  func GetS() ([]byte, error) {
   117  	return []byte("hello"), nil
   118  }