Skip to content

Commit 29d2fbc

Browse files
committed
test: better roundtrip test
1 parent 2f8c8b9 commit 29d2fbc

File tree

1 file changed

+36
-38
lines changed

1 file changed

+36
-38
lines changed

hugr-core/tests/model.rs

Lines changed: 36 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,18 @@
11
#![allow(missing_docs)]
22

33
use anyhow::Result;
4+
use rstest::{fixture, rstest};
45
use std::str::FromStr;
56

6-
use hugr::{envelope::read_envelope, std_extensions::std_reg};
7+
use hugr::{
8+
Extension, Hugr,
9+
builder::{Dataflow as _, DataflowHugr as _},
10+
envelope::{EnvelopeConfig, EnvelopeFormat, read_envelope, write_envelope},
11+
extension::prelude::bool_t,
12+
package::Package,
13+
std_extensions::std_reg,
14+
types::Signature,
15+
};
716
use hugr_core::{export::export_package, import::import_package};
817
use hugr_model::v0 as model;
918

@@ -84,46 +93,35 @@ test_roundtrip!(
8493
"../../hugr-model/tests/fixtures/model-entrypoint.edn"
8594
);
8695

87-
#[test]
88-
fn import_package_with_extensions() {
89-
let simple_with_exts = r#"HUGRiHJv)@[{"version":"0.1.0","name":"miniquantum","types":{},"operations":{"H":{"extension":"miniquantum","name":"H","description":"Hadamard gate","signature":{"params":[],"body":{"input":[{"t":"Q"}],"output":[{"t":"Q"}]}},"binary":false}}}](hugr 0)
90-
(mod)
91-
92-
(import core.entrypoint)
93-
94-
(import core.title)
95-
96-
(import prelude.qubit)
97-
98-
(import core.fn)
99-
100-
(import core.meta.description)
96+
#[fixture]
97+
fn simple_dfg_hugr() -> Hugr {
98+
let dfg_builder =
99+
hugr::builder::DFGBuilder::new(Signature::new(vec![bool_t()], vec![bool_t()])).unwrap();
100+
let [i1] = dfg_builder.input_wires_arr();
101+
dfg_builder.finish_hugr_with_outputs([i1]).unwrap()
102+
}
101103

102-
(declare-operation miniquantum.H (core.fn [prelude.qubit] [prelude.qubit])
103-
(meta (core.meta.description "Hadamard gate")))
104+
#[rstest]
105+
#[case(EnvelopeFormat::ModelTextWithExtensions)]
106+
#[case(EnvelopeFormat::ModelWithExtensions)]
107+
fn import_package_with_extensions(#[case] format: EnvelopeFormat, simple_dfg_hugr: Hugr) {
108+
let ext = Extension::new_arc(
109+
"miniquantum".try_into().unwrap(),
110+
hugr::extension::Version::new(0, 1, 0),
111+
|_, _| {},
112+
);
113+
let mut package = Package::new([simple_dfg_hugr]);
114+
package.extensions.register_updated(ext);
104115

105-
(define-func private _1 (core.fn [prelude.qubit] [prelude.qubit])
106-
(meta (core.title "main"))
107-
(dfg [%0] [%1]
108-
(signature (core.fn [prelude.qubit] [prelude.qubit]))
109-
(dfg [%0] [%1]
110-
(signature (core.fn [prelude.qubit] [prelude.qubit]))
111-
(meta core.entrypoint)
112-
(dfg [%2] [%3]
113-
(signature (core.fn [prelude.qubit] [prelude.qubit]))
114-
(miniquantum.H [%2] [%3]
115-
(signature (core.fn [prelude.qubit] [prelude.qubit])))))))
116-
"#;
116+
let mut bytes: Vec<u8> = Vec::new();
117+
write_envelope(&mut bytes, &package, EnvelopeConfig::new(format)).unwrap();
117118

118-
let bytes = simple_with_exts.as_bytes();
119-
let buff = std::io::BufReader::new(bytes);
120-
let (_, pkg) = read_envelope(buff, &std_reg()).unwrap();
119+
let buff = std::io::BufReader::new(bytes.as_slice());
120+
let (_, loaded_pkg) = read_envelope(buff, &std_reg()).unwrap();
121121

122-
assert_eq!(pkg.modules.len(), 1);
123-
assert_eq!(pkg.extensions.len(), 1);
122+
assert_eq!(loaded_pkg.extensions.len(), 1);
123+
let read_ext = loaded_pkg.extensions.iter().next().unwrap();
124+
assert_eq!(read_ext.name(), &"miniquantum".try_into().unwrap());
124125

125-
assert_eq!(
126-
pkg.extensions.iter().next().unwrap().name(),
127-
&hugr::extension::ExtensionId::new_unchecked("miniquantum")
128-
);
126+
assert_eq!(package, loaded_pkg);
129127
}

0 commit comments

Comments
 (0)