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/bool.rs

109lines · 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 logical_and_literals() {
10 let inst = rir::Instruction::LogicalAnd(
11 rir::Operand::Literal(rir::Literal::Bool(true)),
12 rir::Operand::Literal(rir::Literal::Bool(false)),
13 rir::Variable {
14 variable_id: rir::VariableId(0),
15 ty: rir::Ty::Boolean,
16 },
17 );
18 expect![" %var_0 = and i1 true, false"].assert_eq(&inst.to_qir(&rir::Program::default()));
19}
20
21#[test]
22fn logical_and_variables() {
23 let inst = rir::Instruction::LogicalAnd(
24 rir::Operand::Variable(rir::Variable {
25 variable_id: rir::VariableId(1),
26 ty: rir::Ty::Boolean,
27 }),
28 rir::Operand::Variable(rir::Variable {
29 variable_id: rir::VariableId(2),
30 ty: rir::Ty::Boolean,
31 }),
32 rir::Variable {
33 variable_id: rir::VariableId(0),
34 ty: rir::Ty::Boolean,
35 },
36 );
37 expect![" %var_0 = and i1 %var_1, %var_2"].assert_eq(&inst.to_qir(&rir::Program::default()));
38}
39
40#[test]
41fn logical_not_true_literal() {
42 let inst = rir::Instruction::LogicalNot(
43 rir::Operand::Literal(rir::Literal::Bool(true)),
44 rir::Variable {
45 variable_id: rir::VariableId(0),
46 ty: rir::Ty::Boolean,
47 },
48 );
49 expect![" %var_0 = xor i1 true, true"].assert_eq(&inst.to_qir(&rir::Program::default()));
50}
51
52#[test]
53fn logical_not_variables() {
54 let inst = rir::Instruction::LogicalNot(
55 rir::Operand::Variable(rir::Variable {
56 variable_id: rir::VariableId(1),
57 ty: rir::Ty::Boolean,
58 }),
59 rir::Variable {
60 variable_id: rir::VariableId(0),
61 ty: rir::Ty::Boolean,
62 },
63 );
64 expect![" %var_0 = xor i1 %var_1, true"].assert_eq(&inst.to_qir(&rir::Program::default()));
65}
66
67#[test]
68fn logical_not_false_literal() {
69 let inst = rir::Instruction::LogicalNot(
70 rir::Operand::Literal(rir::Literal::Bool(false)),
71 rir::Variable {
72 variable_id: rir::VariableId(0),
73 ty: rir::Ty::Boolean,
74 },
75 );
76 expect![" %var_0 = xor i1 false, true"].assert_eq(&inst.to_qir(&rir::Program::default()));
77}
78
79#[test]
80fn logical_or_literals() {
81 let inst = rir::Instruction::LogicalOr(
82 rir::Operand::Literal(rir::Literal::Bool(true)),
83 rir::Operand::Literal(rir::Literal::Bool(false)),
84 rir::Variable {
85 variable_id: rir::VariableId(0),
86 ty: rir::Ty::Boolean,
87 },
88 );
89 expect![" %var_0 = or i1 true, false"].assert_eq(&inst.to_qir(&rir::Program::default()));
90}
91
92#[test]
93fn logical_or_variables() {
94 let inst = rir::Instruction::LogicalOr(
95 rir::Operand::Variable(rir::Variable {
96 variable_id: rir::VariableId(1),
97 ty: rir::Ty::Boolean,
98 }),
99 rir::Operand::Variable(rir::Variable {
100 variable_id: rir::VariableId(2),
101 ty: rir::Ty::Boolean,
102 }),
103 rir::Variable {
104 variable_id: rir::VariableId(0),
105 ty: rir::Ty::Boolean,
106 },
107 );
108 expect![" %var_0 = or i1 %var_1, %var_2"].assert_eq(&inst.to_qir(&rir::Program::default()));
109}
110