From caa888218a0e1db21e52e4310d500f0444d1a6cd Mon Sep 17 00:00:00 2001 From: Alan Lawrence Date: Sat, 23 Nov 2024 09:59:11 +0000 Subject: [PATCH] try_read_wire_{value=>concrete} --- hugr-passes/src/dataflow/results.rs | 11 ++++------- hugr-passes/src/dataflow/test.rs | 14 ++++++++------ 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/hugr-passes/src/dataflow/results.rs b/hugr-passes/src/dataflow/results.rs index 50d55f22d..d60b89e36 100644 --- a/hugr-passes/src/dataflow/results.rs +++ b/hugr-passes/src/dataflow/results.rs @@ -81,13 +81,10 @@ impl> AnalysisResults { /// [PartialValue::Value] or a [PartialValue::PartialSum] with a single possible tag.) /// /// # Errors - /// `None` if the analysis did not produce a result for that wire + /// `None` if the analysis did not produce a result for that wire, or if + /// the Hugr did not have a [Type](hugr_core::types::Type) for the specified wire /// `Some(e)` if [conversion to a concrete value](PartialValue::try_into_concrete) failed with error `e` - /// - /// # Panics - /// - /// If a [Type](hugr_core::types::Type) for the specified wire could not be extracted from the Hugr - pub fn try_read_wire_value( + pub fn try_read_wire_concrete( &self, w: Wire, ) -> Result>> @@ -99,7 +96,7 @@ impl> AnalysisResults { .hugr() .out_value_types(w.node()) .find(|(p, _)| *p == w.source()) - .unwrap(); + .ok_or(None)?; v.try_into_concrete(&typ).map_err(Some) } } diff --git a/hugr-passes/src/dataflow/test.rs b/hugr-passes/src/dataflow/test.rs index e5d8d48ee..b3ea4a04f 100644 --- a/hugr-passes/src/dataflow/test.rs +++ b/hugr-passes/src/dataflow/test.rs @@ -68,7 +68,7 @@ fn test_make_tuple() { let results = Machine::default().run(TestContext(hugr), []); - let x: Value = results.try_read_wire_value(v3).unwrap(); + let x: Value = results.try_read_wire_concrete(v3).unwrap(); assert_eq!(x, Value::tuple([Value::false_val(), Value::true_val()])); } @@ -84,9 +84,9 @@ fn test_unpack_tuple_const() { let results = Machine::default().run(TestContext(hugr), []); - let o1_r: Value = results.try_read_wire_value(o1).unwrap(); + let o1_r: Value = results.try_read_wire_concrete(o1).unwrap(); assert_eq!(o1_r, Value::false_val()); - let o2_r: Value = results.try_read_wire_value(o2).unwrap(); + let o2_r: Value = results.try_read_wire_concrete(o2).unwrap(); assert_eq!(o2_r, Value::true_val()); } @@ -110,7 +110,7 @@ fn test_tail_loop_never_iterates() { let results = Machine::default().run(TestContext(hugr), []); - let o_r: Value = results.try_read_wire_value(tl_o).unwrap(); + let o_r: Value = results.try_read_wire_concrete(tl_o).unwrap(); assert_eq!(o_r, r_v); assert_eq!( Some(TailLoopTermination::NeverContinues), @@ -298,9 +298,11 @@ fn test_conditional() { )); let results = Machine::default().run(TestContext(hugr), [(0.into(), arg_pv)]); - let cond_r1: Value = results.try_read_wire_value(cond_o1).unwrap(); + let cond_r1: Value = results.try_read_wire_concrete(cond_o1).unwrap(); assert_eq!(cond_r1, Value::false_val()); - assert!(results.try_read_wire_value::(cond_o2).is_err()); + assert!(results + .try_read_wire_concrete::(cond_o2) + .is_err()); assert_eq!(results.case_reachable(case1.node()), Some(false)); // arg_pv is variant 1 or 2 only assert_eq!(results.case_reachable(case2.node()), Some(true));