microsoft/qdk

Public

mirrored from https://github.com/microsoft/qdkAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
v1.18.0

Branches

Tags

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

Clone

HTTPS

Download ZIP

source/compiler/qsc_data_structures/src/namespaces/tests.rs

445lines · modeblame

82fc78d1Alex Hansen2 years ago1// Copyright (c) Microsoft Corporation.
2// Licensed under the MIT License.
3
4// allowing needless raw hashes here because we auto-update these expected outputs
5// and don't want to risk weird breakages
6
7use expect_test::expect;
8
9use super::*;
10
11#[allow(clippy::too_many_lines)]
12#[test]
13fn test_tree_construction() {
14let mut root = NamespaceTreeRoot::default();
15for i in 0..3 {
16for j in 'a'..'d' {
17let _ = root.insert_or_find_namespace(
18vec![Rc::from(format!("ns{i}")), Rc::from(format!("ns{j}"))].into_iter(),
19);
20}
21}
22expect![[r#"
522206d3Alex Hansen2 years ago23NamespaceTreeRoot
24
25children: [
6ede4494Alex Hansen1 years ago26ns1(id 5) {
522206d3Alex Hansen2 years ago27children: [
6ede4494Alex Hansen1 years ago28nsc(id 8) {empty node},
29nsb(id 7) {empty node},
30nsa(id 6) {empty node},
522206d3Alex Hansen2 years ago31]
32},
6ede4494Alex Hansen1 years ago33ns0(id 1) {
522206d3Alex Hansen2 years ago34children: [
6ede4494Alex Hansen1 years ago35nsc(id 4) {empty node},
36nsb(id 3) {empty node},
37nsa(id 2) {empty node},
522206d3Alex Hansen2 years ago38]
39},
6ede4494Alex Hansen1 years ago40ns2(id 9) {
522206d3Alex Hansen2 years ago41children: [
6ede4494Alex Hansen1 years ago42nsc(id 12) {empty node},
43nsb(id 11) {empty node},
44nsa(id 10) {empty node},
522206d3Alex Hansen2 years ago45]
82fc78d1Alex Hansen2 years ago46},
522206d3Alex Hansen2 years ago47]
82fc78d1Alex Hansen2 years ago48}
49"#]]
50.assert_debug_eq(&root);
51}
52
53#[allow(clippy::too_many_lines)]
54#[test]
55fn test_find_id() {
56let mut root = NamespaceTreeRoot::default();
57let mut id_buf = vec![];
58for i in 0..3 {
59for j in 'a'..'d' {
60id_buf.push(root.insert_or_find_namespace(
61vec![Rc::from(format!("ns{i}")), Rc::from(format!("ns{j}"))].into_iter(),
62));
63}
64id_buf.push(root.insert_or_find_namespace(vec![Rc::from(format!("ns{i}"))].into_iter()));
65}
66let mut result_buf = vec![];
67for id in id_buf {
68result_buf.push(root.find_namespace_by_id(&id));
69}
70expect![[r#"
71[
72(
73[
74"ns0",
75"nsa",
76],
77RefCell {
522206d3Alex Hansen2 years ago78value: empty node},
82fc78d1Alex Hansen2 years ago79},
80),
81(
82[
83"ns0",
84"nsb",
85],
86RefCell {
522206d3Alex Hansen2 years ago87value: empty node},
82fc78d1Alex Hansen2 years ago88},
89),
90(
91[
92"ns0",
93"nsc",
94],
95RefCell {
522206d3Alex Hansen2 years ago96value: empty node},
82fc78d1Alex Hansen2 years ago97},
98),
99(
100[
101"ns0",
102],
103RefCell {
522206d3Alex Hansen2 years ago104value:
105children: [
6ede4494Alex Hansen1 years ago106nsc(id 4) {empty node},
107nsb(id 3) {empty node},
108nsa(id 2) {empty node},
522206d3Alex Hansen2 years ago109]
82fc78d1Alex Hansen2 years ago110},
111},
112),
113(
114[
115"ns1",
116"nsa",
117],
118RefCell {
522206d3Alex Hansen2 years ago119value: empty node},
82fc78d1Alex Hansen2 years ago120},
121),
122(
123[
124"ns1",
125"nsb",
126],
127RefCell {
522206d3Alex Hansen2 years ago128value: empty node},
82fc78d1Alex Hansen2 years ago129},
130),
131(
132[
133"ns1",
134"nsc",
135],
136RefCell {
522206d3Alex Hansen2 years ago137value: empty node},
82fc78d1Alex Hansen2 years ago138},
139),
140(
141[
142"ns1",
143],
144RefCell {
522206d3Alex Hansen2 years ago145value:
146children: [
6ede4494Alex Hansen1 years ago147nsc(id 8) {empty node},
148nsb(id 7) {empty node},
149nsa(id 6) {empty node},
522206d3Alex Hansen2 years ago150]
82fc78d1Alex Hansen2 years ago151},
152},
153),
154(
155[
156"ns2",
157"nsa",
158],
159RefCell {
522206d3Alex Hansen2 years ago160value: empty node},
82fc78d1Alex Hansen2 years ago161},
162),
163(
164[
165"ns2",
166"nsb",
167],
168RefCell {
522206d3Alex Hansen2 years ago169value: empty node},
82fc78d1Alex Hansen2 years ago170},
171),
172(
173[
174"ns2",
175"nsc",
176],
177RefCell {
522206d3Alex Hansen2 years ago178value: empty node},
82fc78d1Alex Hansen2 years ago179},
180),
181(
182[
183"ns2",
184],
185RefCell {
522206d3Alex Hansen2 years ago186value:
187children: [
6ede4494Alex Hansen1 years ago188nsc(id 12) {empty node},
189nsb(id 11) {empty node},
190nsa(id 10) {empty node},
522206d3Alex Hansen2 years ago191]
82fc78d1Alex Hansen2 years ago192},
193},
194),
195]
196"#]]
197.assert_debug_eq(&result_buf);
198}
199// test that after inserting lots of namespaces, all ids are unique and sequential
200#[test]
201fn test_insert_or_find_namespace() {
202let mut root = NamespaceTreeRoot::default();
203let mut ids: Vec<usize> = vec![];
204for i in 0..3 {
205for j in 'a'..'d' {
206let id = root.insert_or_find_namespace(
207vec![Rc::from(format!("ns{i}")), Rc::from(format!("ns{j}"))].into_iter(),
208);
209ids.push(id.into());
210}
211}
212let mut ids_sorted = ids.clone();
213ids_sorted.sort_unstable();
214ids_sorted.dedup();
215// there should be no duplicate or out-of-order ids
216assert_eq!(ids_sorted, ids);
7f6e3027Alex Hansen1 years ago217expect![[r#"
82fc78d1Alex Hansen2 years ago218[
6ede4494Alex Hansen1 years ago2192,
2203,
2214,
2226,
2237,
2248,
82fc78d1Alex Hansen2 years ago22510,
7f6e3027Alex Hansen1 years ago22611,
6ede4494Alex Hansen1 years ago22712,
82fc78d1Alex Hansen2 years ago228]
7f6e3027Alex Hansen1 years ago229"#]]
82fc78d1Alex Hansen2 years ago230.assert_debug_eq(&ids);
231}
232
233// test for get_namespace_id
234#[test]
235fn test_get_namespace_id() {
236let mut root = NamespaceTreeRoot::default();
237let mut names_to_query_buf = vec![];
238for i in 0..3 {
239for j in 'a'..'d' {
240let name = vec![Rc::from(format!("ns{i}")), Rc::from(format!("ns{j}"))];
241let _ = root.insert_or_find_namespace(name.clone());
242names_to_query_buf.push(name);
243}
244let name = vec![Rc::from(format!("ns{i}"))];
245let _ = root.insert_or_find_namespace(name.clone());
246names_to_query_buf.push(name);
247}
248let mut result_buf = vec![];
249for name in names_to_query_buf {
250result_buf.push(root.get_namespace_id(name.iter().map(|x| &**x)));
251}
252expect![[r#"
253[
254Some(
255NamespaceId(
6ede4494Alex Hansen1 years ago2562,
82fc78d1Alex Hansen2 years ago257),
258),
259Some(
260NamespaceId(
6ede4494Alex Hansen1 years ago2613,
82fc78d1Alex Hansen2 years ago262),
263),
264Some(
265NamespaceId(
6ede4494Alex Hansen1 years ago2664,
82fc78d1Alex Hansen2 years ago267),
268),
269Some(
270NamespaceId(
6ede4494Alex Hansen1 years ago2711,
82fc78d1Alex Hansen2 years ago272),
273),
274Some(
275NamespaceId(
6ede4494Alex Hansen1 years ago2766,
82fc78d1Alex Hansen2 years ago277),
278),
279Some(
280NamespaceId(
6ede4494Alex Hansen1 years ago2817,
82fc78d1Alex Hansen2 years ago282),
283),
284Some(
285NamespaceId(
6ede4494Alex Hansen1 years ago2868,
82fc78d1Alex Hansen2 years ago287),
288),
289Some(
290NamespaceId(
6ede4494Alex Hansen1 years ago2915,
82fc78d1Alex Hansen2 years ago292),
293),
294Some(
295NamespaceId(
6ede4494Alex Hansen1 years ago29610,
82fc78d1Alex Hansen2 years ago297),
298),
299Some(
300NamespaceId(
6ede4494Alex Hansen1 years ago30111,
82fc78d1Alex Hansen2 years ago302),
303),
304Some(
305NamespaceId(
6ede4494Alex Hansen1 years ago30612,
7f6e3027Alex Hansen1 years ago307),
308),
309Some(
310NamespaceId(
6ede4494Alex Hansen1 years ago3119,
82fc78d1Alex Hansen2 years ago312),
313),
314]
315"#]]
316.assert_debug_eq(&result_buf);
317}
470c99a0Alex Hansen1 years ago318
319#[allow(clippy::too_many_lines)]
320#[test]
321fn test_tree_iter() {
322let mut root = NamespaceTreeRoot::default();
323for i in 0..3 {
324for j in 'a'..'d' {
325let _ = root.insert_or_find_namespace(
326vec![Rc::from(format!("ns{i}")), Rc::from(format!("ns{j}"))].into_iter(),
327);
328}
329}
330
331let result = root.iter().collect::<Vec<_>>();
332expect![[r#"
333[
334[
335[],
336],
337[
338[
339"ns0",
340],
341],
342[
343[
344"ns0",
345"nsa",
346],
347[
348"ns0",
349"nsa",
350],
351],
352[
353[
354"ns0",
355"nsb",
356],
357[
358"ns0",
359"nsb",
360],
361],
362[
363[
364"ns0",
365"nsc",
366],
367[
368"ns0",
369"nsc",
370],
371],
372[
373[
374"ns1",
375],
376],
377[
378[
379"ns1",
380"nsa",
381],
382[
383"ns1",
384"nsa",
385],
386],
387[
388[
389"ns1",
390"nsb",
391],
392[
393"ns1",
394"nsb",
395],
396],
397[
398[
399"ns1",
400"nsc",
401],
402[
403"ns1",
404"nsc",
405],
406],
407[
408[
409"ns2",
410],
411],
412[
413[
414"ns2",
415"nsa",
416],
417[
418"ns2",
419"nsa",
420],
421],
422[
423[
424"ns2",
425"nsb",
426],
427[
428"ns2",
429"nsb",
430],
431],
432[
433[
434"ns2",
435"nsc",
436],
437[
438"ns2",
439"nsc",
440],
441],
442]
443"#]]
444.assert_debug_eq(&result);
445}