microsoft/qdk

Public

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

CodeCommitsIssuesPull requestsActionsInsightsSecurity
dmitryv/multiplex-z

Branches

Tags

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

Clone

HTTPS

Download ZIP

library/src/tests/convert.rs

310lines · modecode

1// Copyright (c) Microsoft Corporation.
2// Licensed under the MIT License.
3#![allow(clippy::too_many_lines)]
4use super::test_expression;
5use qsc::interpret::Value;
6
7// Tests for Microsoft.Quantum.Convert namespace
8
9#[test]
10fn check_bool_array_as_int() {
11 test_expression(
12 "Microsoft.Quantum.Convert.BoolArrayAsInt([true, false, true, false])",
13 &Value::Int(0b0101),
14 );
15}
16
17#[test]
18fn check_int_as_bool_array() {
19 test_expression(
20 "Microsoft.Quantum.Convert.IntAsBoolArray(5,4)",
21 &Value::Array(
22 vec![
23 Value::Bool(true),
24 Value::Bool(false),
25 Value::Bool(true),
26 Value::Bool(false),
27 ]
28 .into(),
29 ),
30 );
31}
32
33#[test]
34fn check_bigint_as_bool_array() {
35 test_expression(
36 "Microsoft.Quantum.Convert.BigIntAsBoolArray(18446744073709551616L, 128)", // note: 18446744073709551616L == 2^64
37 &Value::Array(
38 vec![
39 Value::Bool(false),
40 Value::Bool(false),
41 Value::Bool(false),
42 Value::Bool(false),
43 Value::Bool(false),
44 Value::Bool(false),
45 Value::Bool(false),
46 Value::Bool(false),
47 Value::Bool(false),
48 Value::Bool(false),
49 Value::Bool(false),
50 Value::Bool(false),
51 Value::Bool(false),
52 Value::Bool(false),
53 Value::Bool(false),
54 Value::Bool(false),
55 Value::Bool(false),
56 Value::Bool(false),
57 Value::Bool(false),
58 Value::Bool(false),
59 Value::Bool(false),
60 Value::Bool(false),
61 Value::Bool(false),
62 Value::Bool(false),
63 Value::Bool(false),
64 Value::Bool(false),
65 Value::Bool(false),
66 Value::Bool(false),
67 Value::Bool(false),
68 Value::Bool(false),
69 Value::Bool(false),
70 Value::Bool(false),
71 Value::Bool(false),
72 Value::Bool(false),
73 Value::Bool(false),
74 Value::Bool(false),
75 Value::Bool(false),
76 Value::Bool(false),
77 Value::Bool(false),
78 Value::Bool(false),
79 Value::Bool(false),
80 Value::Bool(false),
81 Value::Bool(false),
82 Value::Bool(false),
83 Value::Bool(false),
84 Value::Bool(false),
85 Value::Bool(false),
86 Value::Bool(false),
87 Value::Bool(false),
88 Value::Bool(false),
89 Value::Bool(false),
90 Value::Bool(false),
91 Value::Bool(false),
92 Value::Bool(false),
93 Value::Bool(false),
94 Value::Bool(false),
95 Value::Bool(false),
96 Value::Bool(false),
97 Value::Bool(false),
98 Value::Bool(false),
99 Value::Bool(false),
100 Value::Bool(false),
101 Value::Bool(false),
102 Value::Bool(false),
103 Value::Bool(true),
104 Value::Bool(false),
105 Value::Bool(false),
106 Value::Bool(false),
107 Value::Bool(false),
108 Value::Bool(false),
109 Value::Bool(false),
110 Value::Bool(false),
111 Value::Bool(false),
112 Value::Bool(false),
113 Value::Bool(false),
114 Value::Bool(false),
115 Value::Bool(false),
116 Value::Bool(false),
117 Value::Bool(false),
118 Value::Bool(false),
119 Value::Bool(false),
120 Value::Bool(false),
121 Value::Bool(false),
122 Value::Bool(false),
123 Value::Bool(false),
124 Value::Bool(false),
125 Value::Bool(false),
126 Value::Bool(false),
127 Value::Bool(false),
128 Value::Bool(false),
129 Value::Bool(false),
130 Value::Bool(false),
131 Value::Bool(false),
132 Value::Bool(false),
133 Value::Bool(false),
134 Value::Bool(false),
135 Value::Bool(false),
136 Value::Bool(false),
137 Value::Bool(false),
138 Value::Bool(false),
139 Value::Bool(false),
140 Value::Bool(false),
141 Value::Bool(false),
142 Value::Bool(false),
143 Value::Bool(false),
144 Value::Bool(false),
145 Value::Bool(false),
146 Value::Bool(false),
147 Value::Bool(false),
148 Value::Bool(false),
149 Value::Bool(false),
150 Value::Bool(false),
151 Value::Bool(false),
152 Value::Bool(false),
153 Value::Bool(false),
154 Value::Bool(false),
155 Value::Bool(false),
156 Value::Bool(false),
157 Value::Bool(false),
158 Value::Bool(false),
159 Value::Bool(false),
160 Value::Bool(false),
161 Value::Bool(false),
162 Value::Bool(false),
163 Value::Bool(false),
164 Value::Bool(false),
165 Value::Bool(false),
166 Value::Bool(false),
167 ]
168 .into(),
169 ),
170 );
171}
172
173#[test]
174fn check_big_int_as_int_0() {
175 test_expression("Std.Convert.BigIntAsInt(0L)", &Value::Int(0));
176}
177
178#[test]
179fn check_big_int_as_int_1() {
180 test_expression("Std.Convert.BigIntAsInt(1L)", &Value::Int(1));
181}
182
183#[test]
184fn check_big_int_as_int_n1() {
185 test_expression("Std.Convert.BigIntAsInt(-1L)", &Value::Int(-1));
186}
187
188#[test]
189fn check_big_int_as_int_max() {
190 test_expression(
191 "Std.Convert.BigIntAsInt(9_223_372_036_854_775_807L)",
192 &Value::Int(i64::MAX),
193 );
194}
195
196#[test]
197fn check_big_int_as_int_min() {
198 test_expression(
199 "Std.Convert.BigIntAsInt(-9_223_372_036_854_775_808L)",
200 &Value::Int(i64::MIN),
201 );
202}
203
204#[test]
205fn check_bool_array_as_big_int() {
206 test_expression(
207 "Microsoft.Quantum.Convert.BoolArrayAsBigInt([false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false])",
208 &Value::BigInt(18_446_744_073_709_551_616_u128.into()),
209 );
210}
211
212#[test]
213fn check_result_array_as_int() {
214 test_expression(
215 "Microsoft.Quantum.Convert.ResultArrayAsInt([One, Zero, One, Zero])",
216 &Value::Int(0b0101),
217 );
218}
219
220#[test]
221fn check_result_zero_as_bool() {
222 test_expression(
223 "Microsoft.Quantum.Convert.ResultAsBool(Zero)",
224 &Value::Bool(false),
225 );
226}
227
228#[test]
229fn check_result_one_as_bool() {
230 test_expression(
231 "Microsoft.Quantum.Convert.ResultAsBool(One)",
232 &Value::Bool(true),
233 );
234}
235
236#[test]
237fn check_result_array_as_bool_array() {
238 test_expression(
239 "Microsoft.Quantum.Convert.ResultArrayAsBoolArray([One, Zero, One, Zero])",
240 &Value::Array(
241 vec![
242 Value::Bool(true),
243 Value::Bool(false),
244 Value::Bool(true),
245 Value::Bool(false),
246 ]
247 .into(),
248 ),
249 );
250}
251
252#[test]
253fn check_bool_true_as_result() {
254 test_expression(
255 "Microsoft.Quantum.Convert.BoolAsResult(true)",
256 &Value::RESULT_ONE,
257 );
258}
259
260#[test]
261fn check_bool_false_as_result() {
262 test_expression(
263 "Microsoft.Quantum.Convert.BoolAsResult(false)",
264 &Value::RESULT_ZERO,
265 );
266}
267
268#[test]
269fn check_bool_array_as_result_array() {
270 test_expression(
271 "Microsoft.Quantum.Convert.BoolArrayAsResultArray([true, false, true, false])",
272 &Value::Array(
273 vec![
274 Value::RESULT_ONE,
275 Value::RESULT_ZERO,
276 Value::RESULT_ONE,
277 Value::RESULT_ZERO,
278 ]
279 .into(),
280 ),
281 );
282}
283
284#[test]
285fn test_complex_as_complex_polar() {
286 test_expression(
287 {
288 "{
289 import Std.Math.*;
290 let a = Complex(2.0*Cos(1.0), 2.0*Sin(1.0));
291 Microsoft.Quantum.Convert.ComplexAsComplexPolar(a)
292 }"
293 },
294 &Value::Tuple(vec![Value::Double(2.0), Value::Double(1.0)].into(), None),
295 );
296}
297
298#[test]
299fn test_complex_polar_as_complex() {
300 test_expression(
301 {
302 "{
303 import Std.Math.*;
304 let a = ComplexPolar(Sqrt(5.0), ArcTan2(1.0, 2.0));
305 Microsoft.Quantum.Convert.ComplexPolarAsComplex(a)
306 }"
307 },
308 &Value::Tuple(vec![Value::Double(2.0), Value::Double(1.0)].into(), None),
309 );
310}
311