github.com/zebozhuang/go@v0.0.0-20200207033046-f8a98f6f5c5d/src/go/types/testdata/const0.src (about) 1 // Copyright 2012 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 // constant declarations 6 7 package const0 8 9 // constants declarations must be initialized by constants 10 var x = 0 11 const c0 = x /* ERROR "not constant" */ 12 13 // typed constants must have constant types 14 const _ interface /* ERROR invalid constant type */ {} = 0 15 16 func _ () { 17 const _ interface /* ERROR invalid constant type */ {} = 0 18 for i := 0; i < 10; i++ {} // don't crash with non-nil iota here 19 } 20 21 // untyped constants 22 const ( 23 // boolean values 24 ub0 = false 25 ub1 = true 26 ub2 = 2 < 1 27 ub3 = ui1 == uf1 28 ub4 = true /* ERROR "cannot convert" */ == 0 29 30 // integer values 31 ui0 = 0 32 ui1 = 1 33 ui2 = 42 34 ui3 = 3141592653589793238462643383279502884197169399375105820974944592307816406286 35 ui4 = -10 36 37 ui5 = ui0 + ui1 38 ui6 = ui1 - ui1 39 ui7 = ui2 * ui1 40 ui8 = ui3 / ui3 41 ui9 = ui3 % ui3 42 43 ui10 = 1 / 0 /* ERROR "division by zero" */ 44 ui11 = ui1 / 0 /* ERROR "division by zero" */ 45 ui12 = ui3 / ui0 /* ERROR "division by zero" */ 46 ui13 = 1 % 0 /* ERROR "division by zero" */ 47 ui14 = ui1 % 0 /* ERROR "division by zero" */ 48 ui15 = ui3 % ui0 /* ERROR "division by zero" */ 49 50 ui16 = ui2 & ui3 51 ui17 = ui2 | ui3 52 ui18 = ui2 ^ ui3 53 ui19 = 1 /* ERROR "invalid operation" */ % 1.0 54 55 // floating point values 56 uf0 = 0. 57 uf1 = 1. 58 uf2 = 4.2e1 59 uf3 = 3.141592653589793238462643383279502884197169399375105820974944592307816406286 60 uf4 = 1e-1 61 62 uf5 = uf0 + uf1 63 uf6 = uf1 - uf1 64 uf7 = uf2 * uf1 65 uf8 = uf3 / uf3 66 uf9 = uf3 /* ERROR "not defined" */ % uf3 67 68 uf10 = 1 / 0 /* ERROR "division by zero" */ 69 uf11 = uf1 / 0 /* ERROR "division by zero" */ 70 uf12 = uf3 / uf0 /* ERROR "division by zero" */ 71 72 uf16 = uf2 /* ERROR "not defined" */ & uf3 73 uf17 = uf2 /* ERROR "not defined" */ | uf3 74 uf18 = uf2 /* ERROR "not defined" */ ^ uf3 75 76 // complex values 77 uc0 = 0.i 78 uc1 = 1.i 79 uc2 = 4.2e1i 80 uc3 = 3.141592653589793238462643383279502884197169399375105820974944592307816406286i 81 uc4 = 1e-1i 82 83 uc5 = uc0 + uc1 84 uc6 = uc1 - uc1 85 uc7 = uc2 * uc1 86 uc8 = uc3 / uc3 87 uc9 = uc3 /* ERROR "not defined" */ % uc3 88 89 uc10 = 1 / 0 /* ERROR "division by zero" */ 90 uc11 = uc1 / 0 /* ERROR "division by zero" */ 91 uc12 = uc3 / uc0 /* ERROR "division by zero" */ 92 93 uc16 = uc2 /* ERROR "not defined" */ & uc3 94 uc17 = uc2 /* ERROR "not defined" */ | uc3 95 uc18 = uc2 /* ERROR "not defined" */ ^ uc3 96 ) 97 98 type ( 99 mybool bool 100 myint int 101 myfloat float64 102 mycomplex complex128 103 ) 104 105 // typed constants 106 const ( 107 // boolean values 108 tb0 bool = false 109 tb1 bool = true 110 tb2 mybool = 2 < 1 111 tb3 mybool = ti1 /* ERROR "mismatched types" */ == tf1 112 113 // integer values 114 ti0 int8 = ui0 115 ti1 int32 = ui1 116 ti2 int64 = ui2 117 ti3 myint = ui3 /* ERROR "overflows" */ 118 ti4 myint = ui4 119 120 ti5 = ti0 /* ERROR "mismatched types" */ + ti1 121 ti6 = ti1 - ti1 122 ti7 = ti2 /* ERROR "mismatched types" */ * ti1 123 ti8 = ti3 / ti3 124 ti9 = ti3 % ti3 125 126 ti10 = 1 / 0 /* ERROR "division by zero" */ 127 ti11 = ti1 / 0 /* ERROR "division by zero" */ 128 ti12 = ti3 /* ERROR "mismatched types" */ / ti0 129 ti13 = 1 % 0 /* ERROR "division by zero" */ 130 ti14 = ti1 % 0 /* ERROR "division by zero" */ 131 ti15 = ti3 /* ERROR "mismatched types" */ % ti0 132 133 ti16 = ti2 /* ERROR "mismatched types" */ & ti3 134 ti17 = ti2 /* ERROR "mismatched types" */ | ti4 135 ti18 = ti2 ^ ti5 // no mismatched types error because the type of ti5 is unknown 136 137 // floating point values 138 tf0 float32 = 0. 139 tf1 float32 = 1. 140 tf2 float64 = 4.2e1 141 tf3 myfloat = 3.141592653589793238462643383279502884197169399375105820974944592307816406286 142 tf4 myfloat = 1e-1 143 144 tf5 = tf0 + tf1 145 tf6 = tf1 - tf1 146 tf7 = tf2 /* ERROR "mismatched types" */ * tf1 147 tf8 = tf3 / tf3 148 tf9 = tf3 /* ERROR "not defined" */ % tf3 149 150 tf10 = 1 / 0 /* ERROR "division by zero" */ 151 tf11 = tf1 / 0 /* ERROR "division by zero" */ 152 tf12 = tf3 /* ERROR "mismatched types" */ / tf0 153 154 tf16 = tf2 /* ERROR "mismatched types" */ & tf3 155 tf17 = tf2 /* ERROR "mismatched types" */ | tf3 156 tf18 = tf2 /* ERROR "mismatched types" */ ^ tf3 157 158 // complex values 159 tc0 = 0.i 160 tc1 = 1.i 161 tc2 = 4.2e1i 162 tc3 = 3.141592653589793238462643383279502884197169399375105820974944592307816406286i 163 tc4 = 1e-1i 164 165 tc5 = tc0 + tc1 166 tc6 = tc1 - tc1 167 tc7 = tc2 * tc1 168 tc8 = tc3 / tc3 169 tc9 = tc3 /* ERROR "not defined" */ % tc3 170 171 tc10 = 1 / 0 /* ERROR "division by zero" */ 172 tc11 = tc1 / 0 /* ERROR "division by zero" */ 173 tc12 = tc3 / tc0 /* ERROR "division by zero" */ 174 175 tc16 = tc2 /* ERROR "not defined" */ & tc3 176 tc17 = tc2 /* ERROR "not defined" */ | tc3 177 tc18 = tc2 /* ERROR "not defined" */ ^ tc3 178 ) 179 180 // initialization cycles 181 const ( 182 a /* ERROR "initialization cycle" */ = a 183 b /* ERROR "initialization cycle" */ , c /* ERROR "initialization cycle" */, d, e = e, d, c, b // TODO(gri) should only have one cycle error 184 f float64 = d 185 ) 186 187 // multiple initialization 188 const ( 189 a1, a2, a3 = 7, 3.1415926, "foo" 190 b1, b2, b3 = b3, b1, 42 191 c1, c2, c3 /* ERROR "missing init expr for c3" */ = 1, 2 192 d1, d2, d3 = 1, 2, 3, 4 /* ERROR "extra init expr 4" */ 193 _p0 = assert(a1 == 7) 194 _p1 = assert(a2 == 3.1415926) 195 _p2 = assert(a3 == "foo") 196 _p3 = assert(b1 == 42) 197 _p4 = assert(b2 == 42) 198 _p5 = assert(b3 == 42) 199 ) 200 201 func _() { 202 const ( 203 a1, a2, a3 = 7, 3.1415926, "foo" 204 b1, b2, b3 = b3, b1, 42 205 c1, c2, c3 /* ERROR "missing init expr for c3" */ = 1, 2 206 d1, d2, d3 = 1, 2, 3, 4 /* ERROR "extra init expr 4" */ 207 _p0 = assert(a1 == 7) 208 _p1 = assert(a2 == 3.1415926) 209 _p2 = assert(a3 == "foo") 210 _p3 = assert(b1 == 42) 211 _p4 = assert(b2 == 42) 212 _p5 = assert(b3 == 42) 213 ) 214 } 215 216 // iota 217 const ( 218 iota0 = iota 219 iota1 = iota 220 iota2 = iota*2 221 _a0 = assert(iota0 == 0) 222 _a1 = assert(iota1 == 1) 223 _a2 = assert(iota2 == 4) 224 iota6 = iota*3 225 226 iota7 227 iota8 228 _a3 = assert(iota7 == 21) 229 _a4 = assert(iota8 == 24) 230 ) 231 232 const ( 233 _b0 = iota 234 _b1 = assert(iota + iota2 == 5) 235 _b2 = len([iota]int{}) // iota may appear in a type! 236 _b3 = assert(_b2 == 2) 237 _b4 = len(A{}) 238 ) 239 240 type A [iota /* ERROR "cannot use iota" */ ]int 241 242 // constant expressions with operands across different 243 // constant declarations must use the right iota values 244 const ( 245 _c0 = iota 246 _c1 247 _c2 248 _x = _c2 + _d1 + _e0 // 3 249 ) 250 251 const ( 252 _d0 = iota 253 _d1 254 ) 255 256 const ( 257 _e0 = iota 258 ) 259 260 var _ = assert(_x == 3) 261 262 // special cases 263 const ( 264 _n0 = nil /* ERROR "not constant" */ 265 _n1 = [ /* ERROR "not constant" */ ]int{} 266 ) 267 268 // iotas must not be usable in expressions outside constant declarations 269 type _ [iota /* ERROR "iota outside constant decl" */ ]byte 270 var _ = iota /* ERROR "iota outside constant decl" */ 271 func _() { 272 _ = iota /* ERROR "iota outside constant decl" */ 273 const _ = iota 274 _ = iota /* ERROR "iota outside constant decl" */ 275 } 276 277 func _() { 278 iota := 123 279 const x = iota /* ERROR "is not constant" */ 280 var y = iota 281 _ = y 282 } 283 284 // constant arithmetic precision and rounding must lead to expected (integer) results 285 var _ = []int64{ 286 0.0005 * 1e9, 287 0.001 * 1e9, 288 0.005 * 1e9, 289 0.01 * 1e9, 290 0.05 * 1e9, 291 0.1 * 1e9, 292 0.5 * 1e9, 293 1 * 1e9, 294 5 * 1e9, 295 }