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