Skip to content

Commit b7b2bcd

Browse files
authored
test: Add tests for constant value deserialization (#1822)
Adds a couple tests to check that the constant value deserialization works. Does not modify anything else.
1 parent b05a419 commit b7b2bcd

File tree

1 file changed

+35
-2
lines changed

1 file changed

+35
-2
lines changed

hugr-core/src/ops/constant.rs

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -583,6 +583,7 @@ pub(crate) mod test {
583583
};
584584
use crate::extension::PRELUDE;
585585
use crate::std_extensions::arithmetic::int_types::ConstInt;
586+
use crate::std_extensions::collections::array::{array_type, ArrayValue};
586587
use crate::{
587588
builder::{BuildError, DFGBuilder, Dataflow, DataflowHugr},
588589
extension::{
@@ -733,16 +734,35 @@ pub(crate) mod test {
733734
ConstUsize::new(257).into()
734735
}
735736

737+
#[fixture]
738+
fn const_serialized_usize() -> Value {
739+
CustomSerialized::try_from_custom_const(ConstUsize::new(257))
740+
.unwrap()
741+
.into()
742+
}
743+
736744
#[fixture]
737745
fn const_tuple() -> Value {
738-
Value::tuple([ConstUsize::new(257).into(), serialized_float(5.1)])
746+
Value::tuple([const_usize(), Value::true_val()])
747+
}
748+
749+
/// Equivalent to [`const_tuple`], but uses a non-resolved opaque op for the usize element.
750+
#[fixture]
751+
fn const_tuple_serialized() -> Value {
752+
Value::tuple([const_serialized_usize(), Value::true_val()])
753+
}
754+
755+
#[fixture]
756+
fn const_array_2_bool() -> Value {
757+
ArrayValue::new(bool_t(), [Value::true_val(), Value::false_val()]).into()
739758
}
740759

741760
#[rstest]
742761
#[case(Value::unit(), Type::UNIT, "const:seq:{}")]
743762
#[case(const_usize(), usize_t(), "const:custom:ConstUsize(")]
744763
#[case(serialized_float(17.4), float64_type(), "const:custom:json:Object")]
745-
#[case(const_tuple(), Type::new_tuple(vec![usize_t(), float64_type()]), "const:seq:{")]
764+
#[case(const_tuple(), Type::new_tuple(vec![usize_t(), bool_t()]), "const:seq:{")]
765+
#[case(const_array_2_bool(), array_type(2, bool_t()), "const:custom:array")]
746766
fn const_type(
747767
#[case] const_value: Value,
748768
#[case] expected_type: Type,
@@ -756,6 +776,19 @@ pub(crate) mod test {
756776
);
757777
}
758778

779+
#[rstest]
780+
#[case(Value::unit(), Value::unit())]
781+
#[case(const_usize(), const_usize())]
782+
#[case(const_serialized_usize(), const_usize())]
783+
#[case(const_tuple_serialized(), const_tuple())]
784+
#[case(const_array_2_bool(), const_array_2_bool())]
785+
fn const_serde_roundtrip(#[case] const_value: Value, #[case] expected_value: Value) {
786+
let serialized = serde_json::to_string(&const_value).unwrap();
787+
let deserialized: Value = serde_json::from_str(&serialized).unwrap();
788+
789+
assert_eq!(deserialized, expected_value);
790+
}
791+
759792
#[rstest]
760793
fn const_custom_value(const_usize: Value, const_tuple: Value) {
761794
assert_eq!(

0 commit comments

Comments
 (0)