Skip to content

Commit 32d279a

Browse files
committed
Add test in hugr-llvm, adding dev dependency on hugr-passes
1 parent c6a4a5c commit 32d279a

File tree

3 files changed

+46
-0
lines changed

3 files changed

+46
-0
lines changed

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

hugr-llvm/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ derive_more = { workspace = true, features = ["debug"] }
4040

4141
[dev-dependencies]
4242
hugr-llvm = { "path" = ".", features = ["test-utils"] }
43+
hugr-passes = { path = "../hugr-passes" }
4344

4445
[build-dependencies]
4546
cc = "1.2.41"

hugr-llvm/src/extension/collections/borrow_array.rs

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3039,4 +3039,48 @@ mod test {
30393039
});
30403040
assert_eq!(1, exec_ctx.exec_hugr_u64(hugr, "main"));
30413041
}
3042+
3043+
#[rstest]
3044+
fn exec_discard_part_borrowed(mut exec_ctx: TestContext) {
3045+
use hugr_passes::replace_types::{DelegatingLinearizer, Linearizer};
3046+
// Builds a HUGR that:
3047+
// - Creates a borrow array [1,2,3]
3048+
// - Borrows index 1
3049+
// - Discards the borrow array using the ReplaceTypes linearizer
3050+
// And then runs this, i.e. to check that it does not panic.
3051+
let inn_arr_ty = borrow_array_type(2, usize_t());
3052+
let arr_ty = borrow_array_type(3, inn_arr_ty.clone());
3053+
let hugr = SimpleHugrConfig::new()
3054+
.with_outs(int_type(6))
3055+
.with_extensions(exec_registry())
3056+
.finish(|mut builder| {
3057+
let inner_arrays = [1, 3, 5].map(|i| {
3058+
let elems = [i, i + 1].map(|v| builder.add_load_value(ConstUsize::new(v)));
3059+
builder.add_new_borrow_array(usize_t(), elems).unwrap()
3060+
});
3061+
let outer = builder
3062+
.add_new_borrow_array(inn_arr_ty.clone(), inner_arrays)
3063+
.unwrap();
3064+
let idx = builder.add_load_value(ConstUsize::new(0));
3065+
let (outer, inner) = builder
3066+
.add_borrow_array_borrow(inn_arr_ty, 3, outer, idx)
3067+
.unwrap();
3068+
builder
3069+
.add_borrow_array_discard(usize_t(), 2, inner)
3070+
.unwrap();
3071+
let dl = DelegatingLinearizer::default();
3072+
let nt = dl.copy_discard_op(&arr_ty, 0).unwrap();
3073+
nt.add(&mut builder, [outer]).unwrap();
3074+
let res = builder.add_load_value(ConstInt::new_u(6, 17).unwrap());
3075+
builder.finish_hugr_with_outputs([res]).unwrap()
3076+
});
3077+
exec_ctx.add_extensions(|cge| {
3078+
cge.add_default_prelude_extensions()
3079+
.add_logic_extensions()
3080+
.add_conversion_extensions()
3081+
.add_default_borrow_array_extensions(DefaultPreludeCodegen)
3082+
.add_default_int_extensions()
3083+
});
3084+
assert_eq!(17, exec_ctx.exec_hugr_u64(hugr, "main"));
3085+
}
30423086
}

0 commit comments

Comments
 (0)