microsoft/qdk

Public

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

CodeCommitsIssuesPull requestsActionsInsightsSecurity
sccarda/BlochLearning

Branches

Tags

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

Clone

HTTPS

Download ZIP

library/src/tests/convert.rs

298lines · 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 Std.Convert namespace
8
9#[test]
10fn check_bool_array_as_int() {
11 test_expression(
12 "Std.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 "Std.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 "Std.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 "Std.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 "Std.Convert.ResultArrayAsInt([One, Zero, One, Zero])",
216 &Value::Int(0b0101),
217 );
218}
219
220#[test]
221fn check_result_zero_as_bool() {
222 test_expression("Std.Convert.ResultAsBool(Zero)", &Value::Bool(false));
223}
224
225#[test]
226fn check_result_one_as_bool() {
227 test_expression("Std.Convert.ResultAsBool(One)", &Value::Bool(true));
228}
229
230#[test]
231fn check_result_array_as_bool_array() {
232 test_expression(
233 "Std.Convert.ResultArrayAsBoolArray([One, Zero, One, Zero])",
234 &Value::Array(
235 vec![
236 Value::Bool(true),
237 Value::Bool(false),
238 Value::Bool(true),
239 Value::Bool(false),
240 ]
241 .into(),
242 ),
243 );
244}
245
246#[test]
247fn check_bool_true_as_result() {
248 test_expression("Std.Convert.BoolAsResult(true)", &Value::RESULT_ONE);
249}
250
251#[test]
252fn check_bool_false_as_result() {
253 test_expression("Std.Convert.BoolAsResult(false)", &Value::RESULT_ZERO);
254}
255
256#[test]
257fn check_bool_array_as_result_array() {
258 test_expression(
259 "Std.Convert.BoolArrayAsResultArray([true, false, true, false])",
260 &Value::Array(
261 vec![
262 Value::RESULT_ONE,
263 Value::RESULT_ZERO,
264 Value::RESULT_ONE,
265 Value::RESULT_ZERO,
266 ]
267 .into(),
268 ),
269 );
270}
271
272#[test]
273fn test_complex_as_complex_polar() {
274 test_expression(
275 {
276 "{
277 import Std.Math.*;
278 let a = Complex(2.0*Cos(1.0), 2.0*Sin(1.0));
279 Std.Convert.ComplexAsComplexPolar(a)
280 }"
281 },
282 &Value::Tuple(vec![Value::Double(2.0), Value::Double(1.0)].into(), None),
283 );
284}
285
286#[test]
287fn test_complex_polar_as_complex() {
288 test_expression(
289 {
290 "{
291 import Std.Math.*;
292 let a = ComplexPolar(Sqrt(5.0), ArcTan2(1.0, 2.0));
293 Std.Convert.ComplexPolarAsComplex(a)
294 }"
295 },
296 &Value::Tuple(vec![Value::Double(2.0), Value::Double(1.0)].into(), None),
297 );
298}
299