github.com/gnolang/gno@v0.0.0-20240520182011-228e9d0192ce/gnovm/tests/files/zpersist_valids.gno (about)

     1  // PKGPATH: gno.land/r/demo/tests_test
     2  package tests_test
     3  
     4  type myStruct struct {
     5  	A int
     6  	B string
     7  }
     8  
     9  var (
    10  	// Native types
    11  	abigint      bigint        = 16
    12  	abool        bool          = true
    13  	abyte        byte          = 0x16
    14  	afloat32     float32       = 16.16
    15  	afloat64     float64       = 16.16
    16  	aint         int           = 16
    17  	aint8        int8          = 16
    18  	aint16       int16         = 16
    19  	aint32       int32         = 16
    20  	aint64       int64         = 16
    21  	arune        rune          = 'a'
    22  	astring      string        = "hello"
    23  	astringslice []string      = []string{"A"}
    24  	astruct      myStruct      = myStruct{16, "A"}
    25  	auint        uint          = 16
    26  	auint8       uint8         = 16
    27  	auint16      uint16        = 16
    28  	auint32      uint32        = 16
    29  	auint64      uint64        = 16
    30  	ainterface   interface{}   = struct{ a float32 }{16.0}
    31  	afunc        func() string = func() string { return "A" }
    32  
    33  	// TODO:
    34  	// amap         map[string]string = map[string]string{"a": "1"}
    35  	// more slices
    36  	// slice/map containing unsupported types
    37  
    38  	// Not supported:
    39  	// error
    40  )
    41  
    42  func init() {
    43  	printVars("preinit ")
    44  	mutateVars("B")
    45  	printVars("postinit")
    46  }
    47  
    48  func main() {
    49  	printVars("premain ")
    50  	mutateVars("C")
    51  	printVars("postmain")
    52  }
    53  
    54  func mutateVars(stringModifier string) {
    55  	abigint *= 2
    56  	abool = !abool
    57  	abyte *= 2
    58  	afloat32 *= 2
    59  	afloat64 *= 2
    60  	aint *= 2
    61  	aint8 *= 2
    62  	aint16 *= 2
    63  	aint32 *= 2
    64  	aint64 *= 2
    65  	arune = rune(stringModifier[0])
    66  	astring += stringModifier
    67  	astringslice = append(astringslice, stringModifier)
    68  	auint *= 2
    69  	auint8 *= 2
    70  	auint16 *= 2
    71  	auint32 *= 2
    72  	auint64 *= 2
    73  	astruct.A *= 2
    74  	astruct.B = stringModifier
    75  	ainterface = struct{ a string }{stringModifier}
    76  	afunc = func() string { return stringModifier }
    77  
    78  	// TODO:
    79  	// amap["c"] = "3"
    80  }
    81  
    82  func printVars(phase string) {
    83  	println(phase,
    84  		// variables
    85  		abigint,
    86  		abool,
    87  		abyte,
    88  		afloat32,
    89  		afloat64,
    90  		aint,
    91  		aint8,
    92  		aint16,
    93  		aint32,
    94  		aint64,
    95  		arune,
    96  		astring,
    97  		astringslice,
    98  		astringslice[0],
    99  		astruct,
   100  		auint,
   101  		auint8,
   102  		auint16,
   103  		auint32,
   104  		auint64,
   105  		ainterface,
   106  		afunc(),
   107  	)
   108  }
   109  
   110  // Output:
   111  // preinit  16 true 22 16.16 16.16 16 16 16 16 16 97 hello slice[("A" string)] A (struct{(16 int),("A" string)} gno.land/r/demo/tests_test.myStruct) 16 16 16 16 16 struct{(16 float32)} A
   112  // postinit 32 false 44 32.32 32.32 32 32 32 32 32 66 helloB slice[("A" string),("B" string)] A (struct{(32 int),("B" string)} gno.land/r/demo/tests_test.myStruct) 32 32 32 32 32 struct{("B" string)} B
   113  // premain  32 false 44 32.32 32.32 32 32 32 32 32 66 helloB slice[("A" string),("B" string)] A (struct{(32 int),("B" string)} gno.land/r/demo/tests_test.myStruct) 32 32 32 32 32 struct{("B" string)} B
   114  // postmain 64 true 88 64.64 64.64 64 64 64 64 64 67 helloBC slice[("A" string),("B" string),("C" string)] A (struct{(64 int),("C" string)} gno.land/r/demo/tests_test.myStruct) 64 64 64 64 64 struct{("C" string)} C