blob: dc44ea245b9c9021868ce2a2c3de7c1a2343eefd [file] [log] [blame]
Ken Thompsonc4de2492009-05-05 21:19:58 -07001// $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
7package main
8
Rob Pike325cf8e2010-03-24 16:46:53 -07009const (
Ken Thompson876c6372009-05-06 12:43:09 -070010 // example from the spec
Rob Pike325cf8e2010-03-24 16:46:53 -070011 n1 = +5
12 n2 = -5
13 d1 = +3
14 d2 = -3
Ken Thompsonc4de2492009-05-05 21:19:58 -070015
Rob Pike325cf8e2010-03-24 16:46:53 -070016 q1 = +1
17 q2 = -1
18 q3 = -1
19 q4 = +1
Ken Thompsonc4de2492009-05-05 21:19:58 -070020
Rob Pike325cf8e2010-03-24 16:46:53 -070021 r1 = +2
22 r2 = -2
23 r3 = +2
24 r4 = -2
Ken Thompsonc4de2492009-05-05 21:19:58 -070025)
26
Rob Pike325cf8e2010-03-24 16:46:53 -070027func main() {
Ken Thompsonc4de2492009-05-05 21:19:58 -070028 /* ideals */
29 if n1/d1 != q1 || n1%d1 != r1 {
Rob Pike325cf8e2010-03-24 16:46:53 -070030 println("ideal-1", n1, d1, n1/d1, n1%d1)
31 panic("fail")
Ken Thompsonc4de2492009-05-05 21:19:58 -070032 }
33 if n2/d1 != q2 || n2%d1 != r2 {
Rob Pike325cf8e2010-03-24 16:46:53 -070034 println("ideal-2", n2, d1, n2/d1, n2%d1)
35 panic("fail")
Ken Thompsonc4de2492009-05-05 21:19:58 -070036 }
37 if n1/d2 != q3 || n1%d2 != r3 {
Rob Pike325cf8e2010-03-24 16:46:53 -070038 println("ideal-3", n1, d2, n1/d2, n1%d2)
39 panic("fail")
Ken Thompsonc4de2492009-05-05 21:19:58 -070040 }
41 if n2/d2 != q4 || n2%d2 != r4 {
Rob Pike325cf8e2010-03-24 16:46:53 -070042 println("ideal-4", n2, d2, n2/d2, n2%d2)
43 panic("fail")
Ken Thompsonc4de2492009-05-05 21:19:58 -070044 }
45
46 /* int */
Rob Pike325cf8e2010-03-24 16:46:53 -070047 var in1 int = +5
48 var in2 int = -5
49 var id1 int = +3
50 var id2 int = -3
Ken Thompsonc4de2492009-05-05 21:19:58 -070051
52 if in1/id1 != q1 || in1%id1 != r1 {
Rob Pike325cf8e2010-03-24 16:46:53 -070053 println("int-1", in1, id1, in1/id1, in1%id1)
54 panic("fail")
Ken Thompsonc4de2492009-05-05 21:19:58 -070055 }
56 if in2/id1 != q2 || in2%id1 != r2 {
Rob Pike325cf8e2010-03-24 16:46:53 -070057 println("int-2", in2, id1, in2/id1, in2%id1)
58 panic("fail")
Ken Thompsonc4de2492009-05-05 21:19:58 -070059 }
60 if in1/id2 != q3 || in1%id2 != r3 {
Rob Pike325cf8e2010-03-24 16:46:53 -070061 println("int-3", in1, id2, in1/id2, in1%id2)
62 panic("fail")
Ken Thompsonc4de2492009-05-05 21:19:58 -070063 }
64 if in2/id2 != q4 || in2%id2 != r4 {
Rob Pike325cf8e2010-03-24 16:46:53 -070065 println("int-4", in2, id2, in2/id2, in2%id2)
66 panic("fail")
Ken Thompsonc4de2492009-05-05 21:19:58 -070067 }
68
69 /* int8 */
Rob Pike325cf8e2010-03-24 16:46:53 -070070 var bn1 int8 = +5
71 var bn2 int8 = -5
72 var bd1 int8 = +3
73 var bd2 int8 = -3
Ken Thompsonc4de2492009-05-05 21:19:58 -070074
75 if bn1/bd1 != q1 || bn1%bd1 != r1 {
Rob Pike325cf8e2010-03-24 16:46:53 -070076 println("int8-1", bn1, bd1, bn1/bd1, bn1%bd1)
77 panic("fail")
Ken Thompsonc4de2492009-05-05 21:19:58 -070078 }
79 if bn2/bd1 != q2 || bn2%bd1 != r2 {
Rob Pike325cf8e2010-03-24 16:46:53 -070080 println("int8-2", bn2, bd1, bn2/bd1, bn2%bd1)
81 panic("fail")
Ken Thompsonc4de2492009-05-05 21:19:58 -070082 }
83 if bn1/bd2 != q3 || bn1%bd2 != r3 {
Rob Pike325cf8e2010-03-24 16:46:53 -070084 println("int8-3", bn1, bd2, bn1/bd2, bn1%bd2)
85 panic("fail")
Ken Thompsonc4de2492009-05-05 21:19:58 -070086 }
87 if bn2/bd2 != q4 || bn2%bd2 != r4 {
Rob Pike325cf8e2010-03-24 16:46:53 -070088 println("int8-4", bn2, bd2, bn2/bd2, bn2%bd2)
89 panic("fail")
Ken Thompsonc4de2492009-05-05 21:19:58 -070090 }
91
92 /* int16 */
Rob Pike325cf8e2010-03-24 16:46:53 -070093 var sn1 int16 = +5
94 var sn2 int16 = -5
95 var sd1 int16 = +3
96 var sd2 int16 = -3
Ken Thompsonc4de2492009-05-05 21:19:58 -070097
98 if sn1/sd1 != q1 || sn1%sd1 != r1 {
Rob Pike325cf8e2010-03-24 16:46:53 -070099 println("int16-1", sn1, sd1, sn1/sd1, sn1%sd1)
100 panic("fail")
Ken Thompsonc4de2492009-05-05 21:19:58 -0700101 }
102 if sn2/sd1 != q2 || sn2%sd1 != r2 {
Rob Pike325cf8e2010-03-24 16:46:53 -0700103 println("int16-2", sn2, sd1, sn2/sd1, sn2%sd1)
104 panic("fail")
Ken Thompsonc4de2492009-05-05 21:19:58 -0700105 }
106 if sn1/sd2 != q3 || sn1%sd2 != r3 {
Rob Pike325cf8e2010-03-24 16:46:53 -0700107 println("int16-3", sn1, sd2, sn1/sd2, sn1%sd2)
108 panic("fail")
Ken Thompsonc4de2492009-05-05 21:19:58 -0700109 }
110 if sn2/sd2 != q4 || sn2%sd2 != r4 {
Rob Pike325cf8e2010-03-24 16:46:53 -0700111 println("int16-4", sn2, sd2, sn2/sd2, sn2%sd2)
112 panic("fail")
Ken Thompsonc4de2492009-05-05 21:19:58 -0700113 }
114
115 /* int32 */
Rob Pike325cf8e2010-03-24 16:46:53 -0700116 var ln1 int32 = +5
117 var ln2 int32 = -5
118 var ld1 int32 = +3
119 var ld2 int32 = -3
Ken Thompsonc4de2492009-05-05 21:19:58 -0700120
121 if ln1/ld1 != q1 || ln1%ld1 != r1 {
Rob Pike325cf8e2010-03-24 16:46:53 -0700122 println("int32-1", ln1, ld1, ln1/ld1, ln1%ld1)
123 panic("fail")
Ken Thompsonc4de2492009-05-05 21:19:58 -0700124 }
125 if ln2/ld1 != q2 || ln2%ld1 != r2 {
Rob Pike325cf8e2010-03-24 16:46:53 -0700126 println("int32-2", ln2, ld1, ln2/ld1, ln2%ld1)
127 panic("fail")
Ken Thompsonc4de2492009-05-05 21:19:58 -0700128 }
129 if ln1/ld2 != q3 || ln1%ld2 != r3 {
Rob Pike325cf8e2010-03-24 16:46:53 -0700130 println("int32-3", ln1, ld2, ln1/ld2, ln1%ld2)
131 panic("fail")
Ken Thompsonc4de2492009-05-05 21:19:58 -0700132 }
133 if ln2/ld2 != q4 || ln2%ld2 != r4 {
Rob Pike325cf8e2010-03-24 16:46:53 -0700134 println("int32-4", ln2, ld2, ln2/ld2, ln2%ld2)
135 panic("fail")
Ken Thompsonc4de2492009-05-05 21:19:58 -0700136 }
137
138 /* int64 */
Rob Pike325cf8e2010-03-24 16:46:53 -0700139 var qn1 int64 = +5
140 var qn2 int64 = -5
141 var qd1 int64 = +3
142 var qd2 int64 = -3
Ken Thompsonc4de2492009-05-05 21:19:58 -0700143
144 if qn1/qd1 != q1 || qn1%qd1 != r1 {
Rob Pike325cf8e2010-03-24 16:46:53 -0700145 println("int64-1", qn1, qd1, qn1/qd1, qn1%qd1)
146 panic("fail")
Ken Thompsonc4de2492009-05-05 21:19:58 -0700147 }
148 if qn2/qd1 != q2 || qn2%qd1 != r2 {
Rob Pike325cf8e2010-03-24 16:46:53 -0700149 println("int64-2", qn2, qd1, qn2/qd1, qn2%qd1)
150 panic("fail")
Ken Thompsonc4de2492009-05-05 21:19:58 -0700151 }
152 if qn1/qd2 != q3 || qn1%qd2 != r3 {
Rob Pike325cf8e2010-03-24 16:46:53 -0700153 println("int64-3", qn1, qd2, qn1/qd2, qn1%qd2)
154 panic("fail")
Ken Thompsonc4de2492009-05-05 21:19:58 -0700155 }
156 if qn2/qd2 != q4 || qn2%qd2 != r4 {
Rob Pike325cf8e2010-03-24 16:46:53 -0700157 println("int64-4", qn2, qd2, qn2/qd2, qn2%qd2)
158 panic("fail")
Ken Thompson876c6372009-05-06 12:43:09 -0700159 }
160
161 if n1/qd1 != q1 || n1%qd1 != r1 {
Rob Pike325cf8e2010-03-24 16:46:53 -0700162 println("mixed int64-1", n1, qd1, n1/qd1, n1%qd1)
163 panic("fail")
Ken Thompson876c6372009-05-06 12:43:09 -0700164 }
165 if n2/qd1 != q2 || n2%qd1 != r2 {
Rob Pike325cf8e2010-03-24 16:46:53 -0700166 println("mixed int64-2", n2, qd1, n2/qd1, n2%qd1)
167 panic("fail")
Ken Thompson876c6372009-05-06 12:43:09 -0700168 }
169 if n1/qd2 != q3 || n1%qd2 != r3 {
Rob Pike325cf8e2010-03-24 16:46:53 -0700170 println("mixed int64-3", n1, qd2, n1/qd2, n1%qd2)
171 panic("fail")
Ken Thompson876c6372009-05-06 12:43:09 -0700172 }
173 if n2/qd2 != q4 || n2%qd2 != r4 {
Rob Pike325cf8e2010-03-24 16:46:53 -0700174 println("mixed int64-4", n2, qd2, n2/qd2, n2%qd2)
175 panic("fail")
Ken Thompson876c6372009-05-06 12:43:09 -0700176 }
177
178 if qn1/d1 != q1 || qn1%d1 != r1 {
Rob Pike325cf8e2010-03-24 16:46:53 -0700179 println("mixed int64-5", qn1, d1, qn1/d1, qn1%d1)
180 panic("fail")
Ken Thompson876c6372009-05-06 12:43:09 -0700181 }
182 if qn2/d1 != q2 || qn2%d1 != r2 {
Rob Pike325cf8e2010-03-24 16:46:53 -0700183 println("mixed int64-6", qn2, d1, qn2/d1, qn2%d1)
184 panic("fail")
Ken Thompson876c6372009-05-06 12:43:09 -0700185 }
186 if qn1/d2 != q3 || qn1%d2 != r3 {
Rob Pike325cf8e2010-03-24 16:46:53 -0700187 println("mixed int64-7", qn1, d2, qn1/d2, qn1%d2)
188 panic("fail")
Ken Thompson876c6372009-05-06 12:43:09 -0700189 }
190 if qn2/d2 != q4 || qn2%d2 != r4 {
Rob Pike325cf8e2010-03-24 16:46:53 -0700191 println("mixed int64-8", qn2, d2, qn2/d2, qn2%d2)
192 panic("fail")
Ken Thompsonc4de2492009-05-05 21:19:58 -0700193 }
194
195 /* uint */
Rob Pike325cf8e2010-03-24 16:46:53 -0700196 var uin1 uint = +5
197 var uid1 uint = +3
Ken Thompsonc4de2492009-05-05 21:19:58 -0700198
199 if uin1/uid1 != q1 || uin1%uid1 != r1 {
Rob Pike325cf8e2010-03-24 16:46:53 -0700200 println("uint", uin1, uid1, uin1/uid1, uin1%uid1)
201 panic("fail")
Ken Thompsonc4de2492009-05-05 21:19:58 -0700202 }
203
204 /* uint8 */
Rob Pike325cf8e2010-03-24 16:46:53 -0700205 var ubn1 uint8 = +5
206 var ubd1 uint8 = +3
Ken Thompsonc4de2492009-05-05 21:19:58 -0700207
208 if ubn1/ubd1 != q1 || ubn1%ubd1 != r1 {
Rob Pike325cf8e2010-03-24 16:46:53 -0700209 println("uint8", ubn1, ubd1, ubn1/ubd1, ubn1%ubd1)
210 panic("fail")
Ken Thompsonc4de2492009-05-05 21:19:58 -0700211 }
212
213 /* uint16 */
Rob Pike325cf8e2010-03-24 16:46:53 -0700214 var usn1 uint16 = +5
215 var usd1 uint16 = +3
Ken Thompsonc4de2492009-05-05 21:19:58 -0700216
217 if usn1/usd1 != q1 || usn1%usd1 != r1 {
Rob Pike325cf8e2010-03-24 16:46:53 -0700218 println("uint16", usn1, usd1, usn1/usd1, usn1%usd1)
219 panic("fail")
Ken Thompsonc4de2492009-05-05 21:19:58 -0700220 }
221
222 /* uint32 */
Rob Pike325cf8e2010-03-24 16:46:53 -0700223 var uln1 uint32 = +5
224 var uld1 uint32 = +3
Ken Thompsonc4de2492009-05-05 21:19:58 -0700225
226 if uln1/uld1 != q1 || uln1%uld1 != r1 {
Rob Pike325cf8e2010-03-24 16:46:53 -0700227 println("uint32", uln1, uld1, uln1/uld1, uln1%uld1)
228 panic("fail")
Ken Thompsonc4de2492009-05-05 21:19:58 -0700229 }
230
231 /* uint64 */
Rob Pike325cf8e2010-03-24 16:46:53 -0700232 var uqn1 uint64 = +5
233 var uqd1 uint64 = +3
Ken Thompsonc4de2492009-05-05 21:19:58 -0700234
235 if uqn1/uqd1 != q1 || uqn1%uqd1 != r1 {
Rob Pike325cf8e2010-03-24 16:46:53 -0700236 println("uint64", uqn1, uqd1, uqn1/uqd1, uqn1%uqd1)
237 panic("fail")
Ken Thompsonc4de2492009-05-05 21:19:58 -0700238 }
239 if n1/uqd1 != q1 || n1%uqd1 != r1 {
Rob Pike325cf8e2010-03-24 16:46:53 -0700240 println("mixed uint64-1", n1, uqd1, n1/uqd1, n1%uqd1)
241 panic("fail")
Ken Thompsonc4de2492009-05-05 21:19:58 -0700242 }
243 if uqn1/d1 != q1 || uqn1%d1 != r1 {
Rob Pike325cf8e2010-03-24 16:46:53 -0700244 println("mixed uint64-2", uqn1, d1, uqn1/d1, uqn1%d1)
245 panic("fail")
Ken Thompsonc4de2492009-05-05 21:19:58 -0700246 }
247}