Ken Thompson | c4de249 | 2009-05-05 21:19:58 -0700 | [diff] [blame] | 1 | // $G $D/$F.go && $L $F.$A && ./$A.out |
| 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 | package main |
| 8 | |
Rob Pike | 325cf8e | 2010-03-24 16:46:53 -0700 | [diff] [blame] | 9 | const ( |
Ken Thompson | 876c637 | 2009-05-06 12:43:09 -0700 | [diff] [blame] | 10 | // example from the spec |
Rob Pike | 325cf8e | 2010-03-24 16:46:53 -0700 | [diff] [blame] | 11 | n1 = +5 |
| 12 | n2 = -5 |
| 13 | d1 = +3 |
| 14 | d2 = -3 |
Ken Thompson | c4de249 | 2009-05-05 21:19:58 -0700 | [diff] [blame] | 15 | |
Rob Pike | 325cf8e | 2010-03-24 16:46:53 -0700 | [diff] [blame] | 16 | q1 = +1 |
| 17 | q2 = -1 |
| 18 | q3 = -1 |
| 19 | q4 = +1 |
Ken Thompson | c4de249 | 2009-05-05 21:19:58 -0700 | [diff] [blame] | 20 | |
Rob Pike | 325cf8e | 2010-03-24 16:46:53 -0700 | [diff] [blame] | 21 | r1 = +2 |
| 22 | r2 = -2 |
| 23 | r3 = +2 |
| 24 | r4 = -2 |
Ken Thompson | c4de249 | 2009-05-05 21:19:58 -0700 | [diff] [blame] | 25 | ) |
| 26 | |
Rob Pike | 325cf8e | 2010-03-24 16:46:53 -0700 | [diff] [blame] | 27 | func main() { |
Ken Thompson | c4de249 | 2009-05-05 21:19:58 -0700 | [diff] [blame] | 28 | /* ideals */ |
| 29 | if n1/d1 != q1 || n1%d1 != r1 { |
Rob Pike | 325cf8e | 2010-03-24 16:46:53 -0700 | [diff] [blame] | 30 | println("ideal-1", n1, d1, n1/d1, n1%d1) |
| 31 | panic("fail") |
Ken Thompson | c4de249 | 2009-05-05 21:19:58 -0700 | [diff] [blame] | 32 | } |
| 33 | if n2/d1 != q2 || n2%d1 != r2 { |
Rob Pike | 325cf8e | 2010-03-24 16:46:53 -0700 | [diff] [blame] | 34 | println("ideal-2", n2, d1, n2/d1, n2%d1) |
| 35 | panic("fail") |
Ken Thompson | c4de249 | 2009-05-05 21:19:58 -0700 | [diff] [blame] | 36 | } |
| 37 | if n1/d2 != q3 || n1%d2 != r3 { |
Rob Pike | 325cf8e | 2010-03-24 16:46:53 -0700 | [diff] [blame] | 38 | println("ideal-3", n1, d2, n1/d2, n1%d2) |
| 39 | panic("fail") |
Ken Thompson | c4de249 | 2009-05-05 21:19:58 -0700 | [diff] [blame] | 40 | } |
| 41 | if n2/d2 != q4 || n2%d2 != r4 { |
Rob Pike | 325cf8e | 2010-03-24 16:46:53 -0700 | [diff] [blame] | 42 | println("ideal-4", n2, d2, n2/d2, n2%d2) |
| 43 | panic("fail") |
Ken Thompson | c4de249 | 2009-05-05 21:19:58 -0700 | [diff] [blame] | 44 | } |
| 45 | |
| 46 | /* int */ |
Rob Pike | 325cf8e | 2010-03-24 16:46:53 -0700 | [diff] [blame] | 47 | var in1 int = +5 |
| 48 | var in2 int = -5 |
| 49 | var id1 int = +3 |
| 50 | var id2 int = -3 |
Ken Thompson | c4de249 | 2009-05-05 21:19:58 -0700 | [diff] [blame] | 51 | |
| 52 | if in1/id1 != q1 || in1%id1 != r1 { |
Rob Pike | 325cf8e | 2010-03-24 16:46:53 -0700 | [diff] [blame] | 53 | println("int-1", in1, id1, in1/id1, in1%id1) |
| 54 | panic("fail") |
Ken Thompson | c4de249 | 2009-05-05 21:19:58 -0700 | [diff] [blame] | 55 | } |
| 56 | if in2/id1 != q2 || in2%id1 != r2 { |
Rob Pike | 325cf8e | 2010-03-24 16:46:53 -0700 | [diff] [blame] | 57 | println("int-2", in2, id1, in2/id1, in2%id1) |
| 58 | panic("fail") |
Ken Thompson | c4de249 | 2009-05-05 21:19:58 -0700 | [diff] [blame] | 59 | } |
| 60 | if in1/id2 != q3 || in1%id2 != r3 { |
Rob Pike | 325cf8e | 2010-03-24 16:46:53 -0700 | [diff] [blame] | 61 | println("int-3", in1, id2, in1/id2, in1%id2) |
| 62 | panic("fail") |
Ken Thompson | c4de249 | 2009-05-05 21:19:58 -0700 | [diff] [blame] | 63 | } |
| 64 | if in2/id2 != q4 || in2%id2 != r4 { |
Rob Pike | 325cf8e | 2010-03-24 16:46:53 -0700 | [diff] [blame] | 65 | println("int-4", in2, id2, in2/id2, in2%id2) |
| 66 | panic("fail") |
Ken Thompson | c4de249 | 2009-05-05 21:19:58 -0700 | [diff] [blame] | 67 | } |
| 68 | |
| 69 | /* int8 */ |
Rob Pike | 325cf8e | 2010-03-24 16:46:53 -0700 | [diff] [blame] | 70 | var bn1 int8 = +5 |
| 71 | var bn2 int8 = -5 |
| 72 | var bd1 int8 = +3 |
| 73 | var bd2 int8 = -3 |
Ken Thompson | c4de249 | 2009-05-05 21:19:58 -0700 | [diff] [blame] | 74 | |
| 75 | if bn1/bd1 != q1 || bn1%bd1 != r1 { |
Rob Pike | 325cf8e | 2010-03-24 16:46:53 -0700 | [diff] [blame] | 76 | println("int8-1", bn1, bd1, bn1/bd1, bn1%bd1) |
| 77 | panic("fail") |
Ken Thompson | c4de249 | 2009-05-05 21:19:58 -0700 | [diff] [blame] | 78 | } |
| 79 | if bn2/bd1 != q2 || bn2%bd1 != r2 { |
Rob Pike | 325cf8e | 2010-03-24 16:46:53 -0700 | [diff] [blame] | 80 | println("int8-2", bn2, bd1, bn2/bd1, bn2%bd1) |
| 81 | panic("fail") |
Ken Thompson | c4de249 | 2009-05-05 21:19:58 -0700 | [diff] [blame] | 82 | } |
| 83 | if bn1/bd2 != q3 || bn1%bd2 != r3 { |
Rob Pike | 325cf8e | 2010-03-24 16:46:53 -0700 | [diff] [blame] | 84 | println("int8-3", bn1, bd2, bn1/bd2, bn1%bd2) |
| 85 | panic("fail") |
Ken Thompson | c4de249 | 2009-05-05 21:19:58 -0700 | [diff] [blame] | 86 | } |
| 87 | if bn2/bd2 != q4 || bn2%bd2 != r4 { |
Rob Pike | 325cf8e | 2010-03-24 16:46:53 -0700 | [diff] [blame] | 88 | println("int8-4", bn2, bd2, bn2/bd2, bn2%bd2) |
| 89 | panic("fail") |
Ken Thompson | c4de249 | 2009-05-05 21:19:58 -0700 | [diff] [blame] | 90 | } |
| 91 | |
| 92 | /* int16 */ |
Rob Pike | 325cf8e | 2010-03-24 16:46:53 -0700 | [diff] [blame] | 93 | var sn1 int16 = +5 |
| 94 | var sn2 int16 = -5 |
| 95 | var sd1 int16 = +3 |
| 96 | var sd2 int16 = -3 |
Ken Thompson | c4de249 | 2009-05-05 21:19:58 -0700 | [diff] [blame] | 97 | |
| 98 | if sn1/sd1 != q1 || sn1%sd1 != r1 { |
Rob Pike | 325cf8e | 2010-03-24 16:46:53 -0700 | [diff] [blame] | 99 | println("int16-1", sn1, sd1, sn1/sd1, sn1%sd1) |
| 100 | panic("fail") |
Ken Thompson | c4de249 | 2009-05-05 21:19:58 -0700 | [diff] [blame] | 101 | } |
| 102 | if sn2/sd1 != q2 || sn2%sd1 != r2 { |
Rob Pike | 325cf8e | 2010-03-24 16:46:53 -0700 | [diff] [blame] | 103 | println("int16-2", sn2, sd1, sn2/sd1, sn2%sd1) |
| 104 | panic("fail") |
Ken Thompson | c4de249 | 2009-05-05 21:19:58 -0700 | [diff] [blame] | 105 | } |
| 106 | if sn1/sd2 != q3 || sn1%sd2 != r3 { |
Rob Pike | 325cf8e | 2010-03-24 16:46:53 -0700 | [diff] [blame] | 107 | println("int16-3", sn1, sd2, sn1/sd2, sn1%sd2) |
| 108 | panic("fail") |
Ken Thompson | c4de249 | 2009-05-05 21:19:58 -0700 | [diff] [blame] | 109 | } |
| 110 | if sn2/sd2 != q4 || sn2%sd2 != r4 { |
Rob Pike | 325cf8e | 2010-03-24 16:46:53 -0700 | [diff] [blame] | 111 | println("int16-4", sn2, sd2, sn2/sd2, sn2%sd2) |
| 112 | panic("fail") |
Ken Thompson | c4de249 | 2009-05-05 21:19:58 -0700 | [diff] [blame] | 113 | } |
| 114 | |
| 115 | /* int32 */ |
Rob Pike | 325cf8e | 2010-03-24 16:46:53 -0700 | [diff] [blame] | 116 | var ln1 int32 = +5 |
| 117 | var ln2 int32 = -5 |
| 118 | var ld1 int32 = +3 |
| 119 | var ld2 int32 = -3 |
Ken Thompson | c4de249 | 2009-05-05 21:19:58 -0700 | [diff] [blame] | 120 | |
| 121 | if ln1/ld1 != q1 || ln1%ld1 != r1 { |
Rob Pike | 325cf8e | 2010-03-24 16:46:53 -0700 | [diff] [blame] | 122 | println("int32-1", ln1, ld1, ln1/ld1, ln1%ld1) |
| 123 | panic("fail") |
Ken Thompson | c4de249 | 2009-05-05 21:19:58 -0700 | [diff] [blame] | 124 | } |
| 125 | if ln2/ld1 != q2 || ln2%ld1 != r2 { |
Rob Pike | 325cf8e | 2010-03-24 16:46:53 -0700 | [diff] [blame] | 126 | println("int32-2", ln2, ld1, ln2/ld1, ln2%ld1) |
| 127 | panic("fail") |
Ken Thompson | c4de249 | 2009-05-05 21:19:58 -0700 | [diff] [blame] | 128 | } |
| 129 | if ln1/ld2 != q3 || ln1%ld2 != r3 { |
Rob Pike | 325cf8e | 2010-03-24 16:46:53 -0700 | [diff] [blame] | 130 | println("int32-3", ln1, ld2, ln1/ld2, ln1%ld2) |
| 131 | panic("fail") |
Ken Thompson | c4de249 | 2009-05-05 21:19:58 -0700 | [diff] [blame] | 132 | } |
| 133 | if ln2/ld2 != q4 || ln2%ld2 != r4 { |
Rob Pike | 325cf8e | 2010-03-24 16:46:53 -0700 | [diff] [blame] | 134 | println("int32-4", ln2, ld2, ln2/ld2, ln2%ld2) |
| 135 | panic("fail") |
Ken Thompson | c4de249 | 2009-05-05 21:19:58 -0700 | [diff] [blame] | 136 | } |
| 137 | |
| 138 | /* int64 */ |
Rob Pike | 325cf8e | 2010-03-24 16:46:53 -0700 | [diff] [blame] | 139 | var qn1 int64 = +5 |
| 140 | var qn2 int64 = -5 |
| 141 | var qd1 int64 = +3 |
| 142 | var qd2 int64 = -3 |
Ken Thompson | c4de249 | 2009-05-05 21:19:58 -0700 | [diff] [blame] | 143 | |
| 144 | if qn1/qd1 != q1 || qn1%qd1 != r1 { |
Rob Pike | 325cf8e | 2010-03-24 16:46:53 -0700 | [diff] [blame] | 145 | println("int64-1", qn1, qd1, qn1/qd1, qn1%qd1) |
| 146 | panic("fail") |
Ken Thompson | c4de249 | 2009-05-05 21:19:58 -0700 | [diff] [blame] | 147 | } |
| 148 | if qn2/qd1 != q2 || qn2%qd1 != r2 { |
Rob Pike | 325cf8e | 2010-03-24 16:46:53 -0700 | [diff] [blame] | 149 | println("int64-2", qn2, qd1, qn2/qd1, qn2%qd1) |
| 150 | panic("fail") |
Ken Thompson | c4de249 | 2009-05-05 21:19:58 -0700 | [diff] [blame] | 151 | } |
| 152 | if qn1/qd2 != q3 || qn1%qd2 != r3 { |
Rob Pike | 325cf8e | 2010-03-24 16:46:53 -0700 | [diff] [blame] | 153 | println("int64-3", qn1, qd2, qn1/qd2, qn1%qd2) |
| 154 | panic("fail") |
Ken Thompson | c4de249 | 2009-05-05 21:19:58 -0700 | [diff] [blame] | 155 | } |
| 156 | if qn2/qd2 != q4 || qn2%qd2 != r4 { |
Rob Pike | 325cf8e | 2010-03-24 16:46:53 -0700 | [diff] [blame] | 157 | println("int64-4", qn2, qd2, qn2/qd2, qn2%qd2) |
| 158 | panic("fail") |
Ken Thompson | 876c637 | 2009-05-06 12:43:09 -0700 | [diff] [blame] | 159 | } |
| 160 | |
| 161 | if n1/qd1 != q1 || n1%qd1 != r1 { |
Rob Pike | 325cf8e | 2010-03-24 16:46:53 -0700 | [diff] [blame] | 162 | println("mixed int64-1", n1, qd1, n1/qd1, n1%qd1) |
| 163 | panic("fail") |
Ken Thompson | 876c637 | 2009-05-06 12:43:09 -0700 | [diff] [blame] | 164 | } |
| 165 | if n2/qd1 != q2 || n2%qd1 != r2 { |
Rob Pike | 325cf8e | 2010-03-24 16:46:53 -0700 | [diff] [blame] | 166 | println("mixed int64-2", n2, qd1, n2/qd1, n2%qd1) |
| 167 | panic("fail") |
Ken Thompson | 876c637 | 2009-05-06 12:43:09 -0700 | [diff] [blame] | 168 | } |
| 169 | if n1/qd2 != q3 || n1%qd2 != r3 { |
Rob Pike | 325cf8e | 2010-03-24 16:46:53 -0700 | [diff] [blame] | 170 | println("mixed int64-3", n1, qd2, n1/qd2, n1%qd2) |
| 171 | panic("fail") |
Ken Thompson | 876c637 | 2009-05-06 12:43:09 -0700 | [diff] [blame] | 172 | } |
| 173 | if n2/qd2 != q4 || n2%qd2 != r4 { |
Rob Pike | 325cf8e | 2010-03-24 16:46:53 -0700 | [diff] [blame] | 174 | println("mixed int64-4", n2, qd2, n2/qd2, n2%qd2) |
| 175 | panic("fail") |
Ken Thompson | 876c637 | 2009-05-06 12:43:09 -0700 | [diff] [blame] | 176 | } |
| 177 | |
| 178 | if qn1/d1 != q1 || qn1%d1 != r1 { |
Rob Pike | 325cf8e | 2010-03-24 16:46:53 -0700 | [diff] [blame] | 179 | println("mixed int64-5", qn1, d1, qn1/d1, qn1%d1) |
| 180 | panic("fail") |
Ken Thompson | 876c637 | 2009-05-06 12:43:09 -0700 | [diff] [blame] | 181 | } |
| 182 | if qn2/d1 != q2 || qn2%d1 != r2 { |
Rob Pike | 325cf8e | 2010-03-24 16:46:53 -0700 | [diff] [blame] | 183 | println("mixed int64-6", qn2, d1, qn2/d1, qn2%d1) |
| 184 | panic("fail") |
Ken Thompson | 876c637 | 2009-05-06 12:43:09 -0700 | [diff] [blame] | 185 | } |
| 186 | if qn1/d2 != q3 || qn1%d2 != r3 { |
Rob Pike | 325cf8e | 2010-03-24 16:46:53 -0700 | [diff] [blame] | 187 | println("mixed int64-7", qn1, d2, qn1/d2, qn1%d2) |
| 188 | panic("fail") |
Ken Thompson | 876c637 | 2009-05-06 12:43:09 -0700 | [diff] [blame] | 189 | } |
| 190 | if qn2/d2 != q4 || qn2%d2 != r4 { |
Rob Pike | 325cf8e | 2010-03-24 16:46:53 -0700 | [diff] [blame] | 191 | println("mixed int64-8", qn2, d2, qn2/d2, qn2%d2) |
| 192 | panic("fail") |
Ken Thompson | c4de249 | 2009-05-05 21:19:58 -0700 | [diff] [blame] | 193 | } |
| 194 | |
| 195 | /* uint */ |
Rob Pike | 325cf8e | 2010-03-24 16:46:53 -0700 | [diff] [blame] | 196 | var uin1 uint = +5 |
| 197 | var uid1 uint = +3 |
Ken Thompson | c4de249 | 2009-05-05 21:19:58 -0700 | [diff] [blame] | 198 | |
| 199 | if uin1/uid1 != q1 || uin1%uid1 != r1 { |
Rob Pike | 325cf8e | 2010-03-24 16:46:53 -0700 | [diff] [blame] | 200 | println("uint", uin1, uid1, uin1/uid1, uin1%uid1) |
| 201 | panic("fail") |
Ken Thompson | c4de249 | 2009-05-05 21:19:58 -0700 | [diff] [blame] | 202 | } |
| 203 | |
| 204 | /* uint8 */ |
Rob Pike | 325cf8e | 2010-03-24 16:46:53 -0700 | [diff] [blame] | 205 | var ubn1 uint8 = +5 |
| 206 | var ubd1 uint8 = +3 |
Ken Thompson | c4de249 | 2009-05-05 21:19:58 -0700 | [diff] [blame] | 207 | |
| 208 | if ubn1/ubd1 != q1 || ubn1%ubd1 != r1 { |
Rob Pike | 325cf8e | 2010-03-24 16:46:53 -0700 | [diff] [blame] | 209 | println("uint8", ubn1, ubd1, ubn1/ubd1, ubn1%ubd1) |
| 210 | panic("fail") |
Ken Thompson | c4de249 | 2009-05-05 21:19:58 -0700 | [diff] [blame] | 211 | } |
| 212 | |
| 213 | /* uint16 */ |
Rob Pike | 325cf8e | 2010-03-24 16:46:53 -0700 | [diff] [blame] | 214 | var usn1 uint16 = +5 |
| 215 | var usd1 uint16 = +3 |
Ken Thompson | c4de249 | 2009-05-05 21:19:58 -0700 | [diff] [blame] | 216 | |
| 217 | if usn1/usd1 != q1 || usn1%usd1 != r1 { |
Rob Pike | 325cf8e | 2010-03-24 16:46:53 -0700 | [diff] [blame] | 218 | println("uint16", usn1, usd1, usn1/usd1, usn1%usd1) |
| 219 | panic("fail") |
Ken Thompson | c4de249 | 2009-05-05 21:19:58 -0700 | [diff] [blame] | 220 | } |
| 221 | |
| 222 | /* uint32 */ |
Rob Pike | 325cf8e | 2010-03-24 16:46:53 -0700 | [diff] [blame] | 223 | var uln1 uint32 = +5 |
| 224 | var uld1 uint32 = +3 |
Ken Thompson | c4de249 | 2009-05-05 21:19:58 -0700 | [diff] [blame] | 225 | |
| 226 | if uln1/uld1 != q1 || uln1%uld1 != r1 { |
Rob Pike | 325cf8e | 2010-03-24 16:46:53 -0700 | [diff] [blame] | 227 | println("uint32", uln1, uld1, uln1/uld1, uln1%uld1) |
| 228 | panic("fail") |
Ken Thompson | c4de249 | 2009-05-05 21:19:58 -0700 | [diff] [blame] | 229 | } |
| 230 | |
| 231 | /* uint64 */ |
Rob Pike | 325cf8e | 2010-03-24 16:46:53 -0700 | [diff] [blame] | 232 | var uqn1 uint64 = +5 |
| 233 | var uqd1 uint64 = +3 |
Ken Thompson | c4de249 | 2009-05-05 21:19:58 -0700 | [diff] [blame] | 234 | |
| 235 | if uqn1/uqd1 != q1 || uqn1%uqd1 != r1 { |
Rob Pike | 325cf8e | 2010-03-24 16:46:53 -0700 | [diff] [blame] | 236 | println("uint64", uqn1, uqd1, uqn1/uqd1, uqn1%uqd1) |
| 237 | panic("fail") |
Ken Thompson | c4de249 | 2009-05-05 21:19:58 -0700 | [diff] [blame] | 238 | } |
| 239 | if n1/uqd1 != q1 || n1%uqd1 != r1 { |
Rob Pike | 325cf8e | 2010-03-24 16:46:53 -0700 | [diff] [blame] | 240 | println("mixed uint64-1", n1, uqd1, n1/uqd1, n1%uqd1) |
| 241 | panic("fail") |
Ken Thompson | c4de249 | 2009-05-05 21:19:58 -0700 | [diff] [blame] | 242 | } |
| 243 | if uqn1/d1 != q1 || uqn1%d1 != r1 { |
Rob Pike | 325cf8e | 2010-03-24 16:46:53 -0700 | [diff] [blame] | 244 | println("mixed uint64-2", uqn1, d1, uqn1/d1, uqn1%d1) |
| 245 | panic("fail") |
Ken Thompson | c4de249 | 2009-05-05 21:19:58 -0700 | [diff] [blame] | 246 | } |
| 247 | } |