microsoft/qdk

Public

mirrored fromhttps://github.com/microsoft/qdkAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
iadavis/pipeline-issue-debugging

Branches

Tags

  • No tags available.
0Branches0Tags
Go to file
Add file
Code

Clone

HTTPS

Download ZIP

source/compiler/qsc_codegen/src/qir/instruction_tests/int.rs

559lines · modecode

1// Copyright (c) Microsoft Corporation.
2// Licensed under the MIT License.
3
4use crate::qir::ToQir;
5use expect_test::expect;
6use qsc_rir::rir;
7
8#[test]
9fn add_integer_literals() {
10 let inst = rir::Instruction::Add(
11 rir::Operand::Literal(rir::Literal::Integer(2)),
12 rir::Operand::Literal(rir::Literal::Integer(5)),
13 rir::Variable {
14 variable_id: rir::VariableId(0),
15 ty: rir::Ty::Integer,
16 },
17 );
18 expect![" %var_0 = add i64 2, 5"].assert_eq(&inst.to_qir(&rir::Program::default()));
19}
20
21#[test]
22fn add_integer_variables() {
23 let inst = rir::Instruction::Add(
24 rir::Operand::Variable(rir::Variable {
25 variable_id: rir::VariableId(1),
26 ty: rir::Ty::Integer,
27 }),
28 rir::Operand::Variable(rir::Variable {
29 variable_id: rir::VariableId(2),
30 ty: rir::Ty::Integer,
31 }),
32 rir::Variable {
33 variable_id: rir::VariableId(0),
34 ty: rir::Ty::Integer,
35 },
36 );
37 expect![" %var_0 = add i64 %var_1, %var_2"].assert_eq(&inst.to_qir(&rir::Program::default()));
38}
39
40#[test]
41fn ashr_integer_literals() {
42 let inst = rir::Instruction::Ashr(
43 rir::Operand::Literal(rir::Literal::Integer(2)),
44 rir::Operand::Literal(rir::Literal::Integer(5)),
45 rir::Variable {
46 variable_id: rir::VariableId(0),
47 ty: rir::Ty::Integer,
48 },
49 );
50 expect![" %var_0 = ashr i64 2, 5"].assert_eq(&inst.to_qir(&rir::Program::default()));
51}
52
53#[test]
54fn ashr_integer_variables() {
55 let inst = rir::Instruction::Ashr(
56 rir::Operand::Variable(rir::Variable {
57 variable_id: rir::VariableId(1),
58 ty: rir::Ty::Integer,
59 }),
60 rir::Operand::Variable(rir::Variable {
61 variable_id: rir::VariableId(2),
62 ty: rir::Ty::Integer,
63 }),
64 rir::Variable {
65 variable_id: rir::VariableId(0),
66 ty: rir::Ty::Integer,
67 },
68 );
69 expect![" %var_0 = ashr i64 %var_1, %var_2"].assert_eq(&inst.to_qir(&rir::Program::default()));
70}
71
72#[test]
73fn bitwise_and_integer_literals() {
74 let inst = rir::Instruction::BitwiseAnd(
75 rir::Operand::Literal(rir::Literal::Integer(2)),
76 rir::Operand::Literal(rir::Literal::Integer(5)),
77 rir::Variable {
78 variable_id: rir::VariableId(0),
79 ty: rir::Ty::Integer,
80 },
81 );
82 expect![" %var_0 = and i64 2, 5"].assert_eq(&inst.to_qir(&rir::Program::default()));
83}
84
85#[test]
86fn bitwise_add_integer_variables() {
87 let inst = rir::Instruction::BitwiseAnd(
88 rir::Operand::Variable(rir::Variable {
89 variable_id: rir::VariableId(1),
90 ty: rir::Ty::Integer,
91 }),
92 rir::Operand::Variable(rir::Variable {
93 variable_id: rir::VariableId(2),
94 ty: rir::Ty::Integer,
95 }),
96 rir::Variable {
97 variable_id: rir::VariableId(0),
98 ty: rir::Ty::Integer,
99 },
100 );
101 expect![" %var_0 = and i64 %var_1, %var_2"].assert_eq(&inst.to_qir(&rir::Program::default()));
102}
103
104#[test]
105fn bitwise_not_integer_literals() {
106 let inst = rir::Instruction::BitwiseNot(
107 rir::Operand::Literal(rir::Literal::Integer(2)),
108 rir::Variable {
109 variable_id: rir::VariableId(0),
110 ty: rir::Ty::Integer,
111 },
112 );
113 expect![" %var_0 = xor i64 2, -1"].assert_eq(&inst.to_qir(&rir::Program::default()));
114}
115
116#[test]
117fn bitwise_not_integer_variables() {
118 let inst = rir::Instruction::BitwiseNot(
119 rir::Operand::Variable(rir::Variable {
120 variable_id: rir::VariableId(1),
121 ty: rir::Ty::Integer,
122 }),
123 rir::Variable {
124 variable_id: rir::VariableId(0),
125 ty: rir::Ty::Integer,
126 },
127 );
128 expect![" %var_0 = xor i64 %var_1, -1"].assert_eq(&inst.to_qir(&rir::Program::default()));
129}
130
131#[test]
132fn bitwise_or_integer_literals() {
133 let inst = rir::Instruction::BitwiseOr(
134 rir::Operand::Literal(rir::Literal::Integer(2)),
135 rir::Operand::Literal(rir::Literal::Integer(5)),
136 rir::Variable {
137 variable_id: rir::VariableId(0),
138 ty: rir::Ty::Integer,
139 },
140 );
141 expect![" %var_0 = or i64 2, 5"].assert_eq(&inst.to_qir(&rir::Program::default()));
142}
143
144#[test]
145fn bitwise_or_integer_variables() {
146 let inst = rir::Instruction::BitwiseOr(
147 rir::Operand::Variable(rir::Variable {
148 variable_id: rir::VariableId(1),
149 ty: rir::Ty::Integer,
150 }),
151 rir::Operand::Variable(rir::Variable {
152 variable_id: rir::VariableId(2),
153 ty: rir::Ty::Integer,
154 }),
155 rir::Variable {
156 variable_id: rir::VariableId(0),
157 ty: rir::Ty::Integer,
158 },
159 );
160 expect![" %var_0 = or i64 %var_1, %var_2"].assert_eq(&inst.to_qir(&rir::Program::default()));
161}
162
163#[test]
164fn bitwise_xor_integer_literals() {
165 let inst = rir::Instruction::BitwiseXor(
166 rir::Operand::Literal(rir::Literal::Integer(2)),
167 rir::Operand::Literal(rir::Literal::Integer(5)),
168 rir::Variable {
169 variable_id: rir::VariableId(0),
170 ty: rir::Ty::Integer,
171 },
172 );
173 expect![" %var_0 = xor i64 2, 5"].assert_eq(&inst.to_qir(&rir::Program::default()));
174}
175
176#[test]
177fn bitwise_xor_integer_variables() {
178 let inst = rir::Instruction::BitwiseXor(
179 rir::Operand::Variable(rir::Variable {
180 variable_id: rir::VariableId(1),
181 ty: rir::Ty::Integer,
182 }),
183 rir::Operand::Variable(rir::Variable {
184 variable_id: rir::VariableId(2),
185 ty: rir::Ty::Integer,
186 }),
187 rir::Variable {
188 variable_id: rir::VariableId(0),
189 ty: rir::Ty::Integer,
190 },
191 );
192 expect![" %var_0 = xor i64 %var_1, %var_2"].assert_eq(&inst.to_qir(&rir::Program::default()));
193}
194
195#[test]
196fn icmp_eq_integer_literals() {
197 let inst = rir::Instruction::Icmp(
198 rir::ConditionCode::Eq,
199 rir::Operand::Literal(rir::Literal::Integer(2)),
200 rir::Operand::Literal(rir::Literal::Integer(5)),
201 rir::Variable {
202 variable_id: rir::VariableId(0),
203 ty: rir::Ty::Boolean,
204 },
205 );
206 expect![" %var_0 = icmp eq i64 2, 5"].assert_eq(&inst.to_qir(&rir::Program::default()));
207}
208
209#[test]
210fn icmp_eq_integer_variables() {
211 let inst = rir::Instruction::Icmp(
212 rir::ConditionCode::Eq,
213 rir::Operand::Variable(rir::Variable {
214 variable_id: rir::VariableId(1),
215 ty: rir::Ty::Integer,
216 }),
217 rir::Operand::Variable(rir::Variable {
218 variable_id: rir::VariableId(2),
219 ty: rir::Ty::Integer,
220 }),
221 rir::Variable {
222 variable_id: rir::VariableId(0),
223 ty: rir::Ty::Boolean,
224 },
225 );
226 expect![" %var_0 = icmp eq i64 %var_1, %var_2"]
227 .assert_eq(&inst.to_qir(&rir::Program::default()));
228}
229
230#[test]
231fn icmp_ne_integer_literals() {
232 let inst = rir::Instruction::Icmp(
233 rir::ConditionCode::Ne,
234 rir::Operand::Literal(rir::Literal::Integer(2)),
235 rir::Operand::Literal(rir::Literal::Integer(5)),
236 rir::Variable {
237 variable_id: rir::VariableId(0),
238 ty: rir::Ty::Boolean,
239 },
240 );
241 expect![" %var_0 = icmp ne i64 2, 5"].assert_eq(&inst.to_qir(&rir::Program::default()));
242}
243
244#[test]
245fn icmp_ne_integer_variables() {
246 let inst = rir::Instruction::Icmp(
247 rir::ConditionCode::Ne,
248 rir::Operand::Variable(rir::Variable {
249 variable_id: rir::VariableId(1),
250 ty: rir::Ty::Integer,
251 }),
252 rir::Operand::Variable(rir::Variable {
253 variable_id: rir::VariableId(2),
254 ty: rir::Ty::Integer,
255 }),
256 rir::Variable {
257 variable_id: rir::VariableId(0),
258 ty: rir::Ty::Boolean,
259 },
260 );
261 expect![" %var_0 = icmp ne i64 %var_1, %var_2"]
262 .assert_eq(&inst.to_qir(&rir::Program::default()));
263}
264#[test]
265fn icmp_slt_integer_literals() {
266 let inst = rir::Instruction::Icmp(
267 rir::ConditionCode::Slt,
268 rir::Operand::Literal(rir::Literal::Integer(2)),
269 rir::Operand::Literal(rir::Literal::Integer(5)),
270 rir::Variable {
271 variable_id: rir::VariableId(0),
272 ty: rir::Ty::Boolean,
273 },
274 );
275 expect![" %var_0 = icmp slt i64 2, 5"].assert_eq(&inst.to_qir(&rir::Program::default()));
276}
277
278#[test]
279fn icmp_slt_integer_variables() {
280 let inst = rir::Instruction::Icmp(
281 rir::ConditionCode::Slt,
282 rir::Operand::Variable(rir::Variable {
283 variable_id: rir::VariableId(1),
284 ty: rir::Ty::Integer,
285 }),
286 rir::Operand::Variable(rir::Variable {
287 variable_id: rir::VariableId(2),
288 ty: rir::Ty::Integer,
289 }),
290 rir::Variable {
291 variable_id: rir::VariableId(0),
292 ty: rir::Ty::Boolean,
293 },
294 );
295 expect![" %var_0 = icmp slt i64 %var_1, %var_2"]
296 .assert_eq(&inst.to_qir(&rir::Program::default()));
297}
298#[test]
299fn icmp_sle_integer_literals() {
300 let inst = rir::Instruction::Icmp(
301 rir::ConditionCode::Sle,
302 rir::Operand::Literal(rir::Literal::Integer(2)),
303 rir::Operand::Literal(rir::Literal::Integer(5)),
304 rir::Variable {
305 variable_id: rir::VariableId(0),
306 ty: rir::Ty::Boolean,
307 },
308 );
309 expect![" %var_0 = icmp sle i64 2, 5"].assert_eq(&inst.to_qir(&rir::Program::default()));
310}
311
312#[test]
313fn icmp_sle_integer_variables() {
314 let inst = rir::Instruction::Icmp(
315 rir::ConditionCode::Sle,
316 rir::Operand::Variable(rir::Variable {
317 variable_id: rir::VariableId(1),
318 ty: rir::Ty::Integer,
319 }),
320 rir::Operand::Variable(rir::Variable {
321 variable_id: rir::VariableId(2),
322 ty: rir::Ty::Integer,
323 }),
324 rir::Variable {
325 variable_id: rir::VariableId(0),
326 ty: rir::Ty::Boolean,
327 },
328 );
329 expect![" %var_0 = icmp sle i64 %var_1, %var_2"]
330 .assert_eq(&inst.to_qir(&rir::Program::default()));
331}
332#[test]
333fn icmp_sgt_integer_literals() {
334 let inst = rir::Instruction::Icmp(
335 rir::ConditionCode::Sgt,
336 rir::Operand::Literal(rir::Literal::Integer(2)),
337 rir::Operand::Literal(rir::Literal::Integer(5)),
338 rir::Variable {
339 variable_id: rir::VariableId(0),
340 ty: rir::Ty::Boolean,
341 },
342 );
343 expect![" %var_0 = icmp sgt i64 2, 5"].assert_eq(&inst.to_qir(&rir::Program::default()));
344}
345
346#[test]
347fn icmp_sgt_integer_variables() {
348 let inst = rir::Instruction::Icmp(
349 rir::ConditionCode::Sgt,
350 rir::Operand::Variable(rir::Variable {
351 variable_id: rir::VariableId(1),
352 ty: rir::Ty::Integer,
353 }),
354 rir::Operand::Variable(rir::Variable {
355 variable_id: rir::VariableId(2),
356 ty: rir::Ty::Integer,
357 }),
358 rir::Variable {
359 variable_id: rir::VariableId(0),
360 ty: rir::Ty::Boolean,
361 },
362 );
363 expect![" %var_0 = icmp sgt i64 %var_1, %var_2"]
364 .assert_eq(&inst.to_qir(&rir::Program::default()));
365}
366#[test]
367fn icmp_sge_integer_literals() {
368 let inst = rir::Instruction::Icmp(
369 rir::ConditionCode::Sge,
370 rir::Operand::Literal(rir::Literal::Integer(2)),
371 rir::Operand::Literal(rir::Literal::Integer(5)),
372 rir::Variable {
373 variable_id: rir::VariableId(0),
374 ty: rir::Ty::Boolean,
375 },
376 );
377 expect![" %var_0 = icmp sge i64 2, 5"].assert_eq(&inst.to_qir(&rir::Program::default()));
378}
379
380#[test]
381fn icmp_sge_integer_variables() {
382 let inst = rir::Instruction::Icmp(
383 rir::ConditionCode::Sge,
384 rir::Operand::Variable(rir::Variable {
385 variable_id: rir::VariableId(1),
386 ty: rir::Ty::Integer,
387 }),
388 rir::Operand::Variable(rir::Variable {
389 variable_id: rir::VariableId(2),
390 ty: rir::Ty::Integer,
391 }),
392 rir::Variable {
393 variable_id: rir::VariableId(0),
394 ty: rir::Ty::Boolean,
395 },
396 );
397 expect![" %var_0 = icmp sge i64 %var_1, %var_2"]
398 .assert_eq(&inst.to_qir(&rir::Program::default()));
399}
400
401#[test]
402fn mul_integer_literals() {
403 let inst = rir::Instruction::Mul(
404 rir::Operand::Literal(rir::Literal::Integer(2)),
405 rir::Operand::Literal(rir::Literal::Integer(5)),
406 rir::Variable {
407 variable_id: rir::VariableId(0),
408 ty: rir::Ty::Integer,
409 },
410 );
411 expect![" %var_0 = mul i64 2, 5"].assert_eq(&inst.to_qir(&rir::Program::default()));
412}
413
414#[test]
415fn mul_integer_variables() {
416 let inst = rir::Instruction::Mul(
417 rir::Operand::Variable(rir::Variable {
418 variable_id: rir::VariableId(1),
419 ty: rir::Ty::Integer,
420 }),
421 rir::Operand::Variable(rir::Variable {
422 variable_id: rir::VariableId(2),
423 ty: rir::Ty::Integer,
424 }),
425 rir::Variable {
426 variable_id: rir::VariableId(0),
427 ty: rir::Ty::Integer,
428 },
429 );
430 expect![" %var_0 = mul i64 %var_1, %var_2"].assert_eq(&inst.to_qir(&rir::Program::default()));
431}
432
433#[test]
434fn sdiv_integer_literals() {
435 let inst = rir::Instruction::Sdiv(
436 rir::Operand::Literal(rir::Literal::Integer(2)),
437 rir::Operand::Literal(rir::Literal::Integer(5)),
438 rir::Variable {
439 variable_id: rir::VariableId(0),
440 ty: rir::Ty::Integer,
441 },
442 );
443 expect![" %var_0 = sdiv i64 2, 5"].assert_eq(&inst.to_qir(&rir::Program::default()));
444}
445
446#[test]
447fn sdiv_integer_variables() {
448 let inst = rir::Instruction::Sdiv(
449 rir::Operand::Variable(rir::Variable {
450 variable_id: rir::VariableId(1),
451 ty: rir::Ty::Integer,
452 }),
453 rir::Operand::Variable(rir::Variable {
454 variable_id: rir::VariableId(2),
455 ty: rir::Ty::Integer,
456 }),
457 rir::Variable {
458 variable_id: rir::VariableId(0),
459 ty: rir::Ty::Integer,
460 },
461 );
462 expect![" %var_0 = sdiv i64 %var_1, %var_2"].assert_eq(&inst.to_qir(&rir::Program::default()));
463}
464
465#[test]
466fn shl_integer_literals() {
467 let inst = rir::Instruction::Shl(
468 rir::Operand::Literal(rir::Literal::Integer(2)),
469 rir::Operand::Literal(rir::Literal::Integer(5)),
470 rir::Variable {
471 variable_id: rir::VariableId(0),
472 ty: rir::Ty::Integer,
473 },
474 );
475 expect![" %var_0 = shl i64 2, 5"].assert_eq(&inst.to_qir(&rir::Program::default()));
476}
477
478#[test]
479fn shl_integer_variables() {
480 let inst = rir::Instruction::Shl(
481 rir::Operand::Variable(rir::Variable {
482 variable_id: rir::VariableId(1),
483 ty: rir::Ty::Integer,
484 }),
485 rir::Operand::Variable(rir::Variable {
486 variable_id: rir::VariableId(2),
487 ty: rir::Ty::Integer,
488 }),
489 rir::Variable {
490 variable_id: rir::VariableId(0),
491 ty: rir::Ty::Integer,
492 },
493 );
494 expect![" %var_0 = shl i64 %var_1, %var_2"].assert_eq(&inst.to_qir(&rir::Program::default()));
495}
496
497#[test]
498fn srem_integer_literals() {
499 let inst = rir::Instruction::Srem(
500 rir::Operand::Literal(rir::Literal::Integer(2)),
501 rir::Operand::Literal(rir::Literal::Integer(5)),
502 rir::Variable {
503 variable_id: rir::VariableId(0),
504 ty: rir::Ty::Integer,
505 },
506 );
507 expect![" %var_0 = srem i64 2, 5"].assert_eq(&inst.to_qir(&rir::Program::default()));
508}
509
510#[test]
511fn srem_integer_variables() {
512 let inst = rir::Instruction::Srem(
513 rir::Operand::Variable(rir::Variable {
514 variable_id: rir::VariableId(1),
515 ty: rir::Ty::Integer,
516 }),
517 rir::Operand::Variable(rir::Variable {
518 variable_id: rir::VariableId(2),
519 ty: rir::Ty::Integer,
520 }),
521 rir::Variable {
522 variable_id: rir::VariableId(0),
523 ty: rir::Ty::Integer,
524 },
525 );
526 expect![" %var_0 = srem i64 %var_1, %var_2"].assert_eq(&inst.to_qir(&rir::Program::default()));
527}
528
529#[test]
530fn sub_integer_literals() {
531 let inst = rir::Instruction::Sub(
532 rir::Operand::Literal(rir::Literal::Integer(2)),
533 rir::Operand::Literal(rir::Literal::Integer(5)),
534 rir::Variable {
535 variable_id: rir::VariableId(0),
536 ty: rir::Ty::Integer,
537 },
538 );
539 expect![" %var_0 = sub i64 2, 5"].assert_eq(&inst.to_qir(&rir::Program::default()));
540}
541
542#[test]
543fn sub_integer_variables() {
544 let inst = rir::Instruction::Sub(
545 rir::Operand::Variable(rir::Variable {
546 variable_id: rir::VariableId(1),
547 ty: rir::Ty::Integer,
548 }),
549 rir::Operand::Variable(rir::Variable {
550 variable_id: rir::VariableId(2),
551 ty: rir::Ty::Integer,
552 }),
553 rir::Variable {
554 variable_id: rir::VariableId(0),
555 ty: rir::Ty::Integer,
556 },
557 );
558 expect![" %var_0 = sub i64 %var_1, %var_2"].assert_eq(&inst.to_qir(&rir::Program::default()));
559}
560