1// run 2 3// Copyright 2009 The Go Authors. All rights reserved. 4// Use of this source code is governed by a BSD-style 5// license that can be found in the LICENSE file. 6 7// Test literal syntax for basic types. 8 9package main 10 11var nbad int 12 13func assert(cond bool, msg string) { 14 if !cond { 15 if nbad == 0 { 16 print("BUG") 17 } 18 nbad++ 19 print(" ", msg) 20 } 21} 22 23func equal(a, b float32) bool { 24 return a == b 25} 26 27 28func main() { 29 // bool 30 var t bool = true 31 var f bool = false 32 assert(t == !f, "bool") 33 34 // int8 35 var i00 int8 = 0 36 var i01 int8 = 1 37 var i02 int8 = -1 38 var i03 int8 = 127 39 var i04 int8 = -127 40 var i05 int8 = -128 41 var i06 int8 = +127 42 assert(i01 == i00+1, "i01") 43 assert(i02 == -i01, "i02") 44 assert(i03 == -i04, "i03") 45 assert(-(i05+1) == i06, "i05") 46 47 // int16 48 var i10 int16 = 0 49 var i11 int16 = 1 50 var i12 int16 = -1 51 var i13 int16 = 32767 52 var i14 int16 = -32767 53 var i15 int16 = -32768 54 var i16 int16 = +32767 55 assert(i11 == i10+1, "i11") 56 assert(i12 == -i11, "i12") 57 assert(i13 == -i14, "i13") 58 assert(-(i15+1) == i16, "i15") 59 60 // int32 61 var i20 int32 = 0 62 var i21 int32 = 1 63 var i22 int32 = -1 64 var i23 int32 = 2147483647 65 var i24 int32 = -2147483647 66 var i25 int32 = -2147483648 67 var i26 int32 = +2147483647 68 assert(i21 == i20+1, "i21") 69 assert(i22 == -i21, "i22") 70 assert(i23 == -i24, "i23") 71 assert(-(i25+1) == i26, "i25") 72 assert(i23 == (1<<31)-1, "i23 size") 73 74 // int64 75 var i30 int64 = 0 76 var i31 int64 = 1 77 var i32 int64 = -1 78 var i33 int64 = 9223372036854775807 79 var i34 int64 = -9223372036854775807 80 var i35 int64 = -9223372036854775808 81 var i36 int64 = +9223372036854775807 82 assert(i31 == i30+1, "i31") 83 assert(i32 == -i31, "i32") 84 assert(i33 == -i34, "i33") 85 assert(-(i35+1) == i36, "i35") 86 assert(i33 == (1<<63)-1, "i33 size") 87 88 // uint8 89 var u00 uint8 = 0 90 var u01 uint8 = 1 91 var u02 uint8 = 255 92 var u03 uint8 = +255 93 assert(u01 == u00+1, "u01") 94 assert(u02 == u03, "u02") 95 assert(u03 == (1<<8)-1, "u03 size") 96 97 // uint16 98 var u10 uint16 = 0 99 var u11 uint16 = 1 100 var u12 uint16 = 65535 101 var u13 uint16 = +65535 102 assert(u11 == u10+1, "u11") 103 assert(u12 == u13, "u12") 104 105 // uint32 106 var u20 uint32 = 0 107 var u21 uint32 = 1 108 var u22 uint32 = 4294967295 109 var u23 uint32 = +4294967295 110 assert(u21 == u20+1, "u21") 111 assert(u22 == u23, "u22") 112 113 // uint64 114 var u30 uint64 = 0 115 var u31 uint64 = 1 116 var u32 uint64 = 18446744073709551615 117 var u33 uint64 = +18446744073709551615 118 _, _, _, _ = u30, u31, u32, u33 119 120 // float 121 var f00 float32 = 3.14159 122 var f01 float32 = -3.14159 123 var f02 float32 = +3.14159 124 var f03 float32 = 0.0 125 var f04 float32 = .0 126 var f05 float32 = 0. 127 var f06 float32 = -0.0 128 var f07 float32 = 1e10 129 var f08 float32 = -1e10 130 var f09 float32 = 1e-10 131 var f10 float32 = 1e+10 132 var f11 float32 = 1.e-10 133 var f12 float32 = 1.e+10 134 var f13 float32 = .1e-10 135 var f14 float32 = .1e+10 136 var f15 float32 = 1.1e-10 137 var f16 float32 = 1.1e+10 138 assert(f01 == -f00, "f01") 139 assert(f02 == -f01, "f02") 140 assert(f03 == f04, "f03") 141 assert(f04 == f05, "f04") 142 assert(f05 == f06, "f05") 143 assert(f07 == -f08, "f07") 144 assert(equal(f09, 1/f10), "f09") 145 assert(f11 == f09, "f11") 146 assert(f12 == f10, "f12") 147 assert(equal(f13, f09/10.0), "f13") 148 assert(equal(f14, f12/10.0), "f14") 149 assert(equal(f15, f16/1e20), "f15") 150 151 // character 152 var c0 uint8 = 'a' 153 var c1 uint8 = 'ä' 154 var c2 uint8 = '\a' 155 var c3 uint8 = '\b' 156 var c4 uint8 = '\f' 157 var c5 uint8 = '\n' 158 var c6 uint8 = '\r' 159 var c7 uint8 = '\t' 160 var c8 uint8 = '\v' 161 // var c9 uint8 = '本' // correctly caught as error 162 var c9 uint16 = '本' 163 assert(c0 == 0x61, "c0") 164 assert(c1 == 0xe4, "c1") 165 assert(c2 == 0x07, "c2") 166 assert(c3 == 0x08, "c3") 167 assert(c4 == 0x0c, "c4") 168 assert(c5 == 0x0a, "c4") 169 assert(c6 == 0x0d, "c6") 170 assert(c7 == 0x09, "c7") 171 assert(c8 == 0x0b, "c8") 172 assert(c9 == 0x672c, "c9") 173 174 var c00 uint8 = '\000' 175 var c01 uint8 = '\007' 176 var c02 uint8 = '\177' 177 var c03 uint8 = '\377' 178 assert(c00 == 0, "c00") 179 assert(c01 == 7, "c01") 180 assert(c02 == 127, "c02") 181 assert(c03 == 255, "c03") 182 183 var cx0 uint8 = '\x00' 184 var cx1 uint8 = '\x0f' 185 var cx2 uint8 = '\xff' 186 assert(cx0 == 0, "cx0") 187 assert(cx1 == 15, "cx1") 188 assert(cx2 == 255, "cx2") 189 190 var cu0 uint16 = '\u1234' 191 var cu1 uint32 = '\U00101234' 192 assert(cu0 == 0x1234, "cu0") 193 assert(cu1 == 0x101234, "cu1") 194 195 // string 196 var s0 string = "" 197 var s1 string = "hellô" 198 assert(s1[0] == 'h', "s1-0") 199 assert(s1[4] == 0xc3, "s1-4") 200 assert(s1[5] == 0xb4, "s1-5") 201 var s2 string = "\a\b\f\n\r\t\v" 202 _, _ = s0, s2 203 204 var s00 string = "\000" 205 var s01 string = "\007" 206 var s02 string = "\377" 207 assert(s00[0] == 0, "s00") 208 assert(s01[0] == 7, "s01") 209 assert(s02[0] == 255, "s02") 210 211 var x00 string = "\x00" 212 var x01 string = "\x0f" 213 var x02 string = "\xff" 214 assert(x00[0] == 0, "x00") 215 assert(x01[0] == 15, "x01") 216 assert(x02[0] == 255, "x02") 217 218 // these are all the same string 219 var sj0 string = "日本語" 220 var sj1 string = "\u65e5\u672c\u8a9e" 221 var sj2 string = "\U000065e5\U0000672c\U00008a9e" 222 var sj3 string = "\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e" 223 assert(sj0 == sj1, "sj1") 224 assert(sj0 == sj2, "sj2") 225 assert(sj0 == sj3, "sj3") 226 227 if nbad > 0 { 228 println() 229 } 230} 231