@@ -583,6 +583,7 @@ pub(crate) mod test {
583
583
} ;
584
584
use crate :: extension:: PRELUDE ;
585
585
use crate :: std_extensions:: arithmetic:: int_types:: ConstInt ;
586
+ use crate :: std_extensions:: collections:: array:: { array_type, ArrayValue } ;
586
587
use crate :: {
587
588
builder:: { BuildError , DFGBuilder , Dataflow , DataflowHugr } ,
588
589
extension:: {
@@ -733,16 +734,35 @@ pub(crate) mod test {
733
734
ConstUsize :: new ( 257 ) . into ( )
734
735
}
735
736
737
+ #[ fixture]
738
+ fn const_serialized_usize ( ) -> Value {
739
+ CustomSerialized :: try_from_custom_const ( ConstUsize :: new ( 257 ) )
740
+ . unwrap ( )
741
+ . into ( )
742
+ }
743
+
736
744
#[ fixture]
737
745
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 ( )
739
758
}
740
759
741
760
#[ rstest]
742
761
#[ case( Value :: unit( ) , Type :: UNIT , "const:seq:{}" ) ]
743
762
#[ case( const_usize( ) , usize_t( ) , "const:custom:ConstUsize(" ) ]
744
763
#[ 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" ) ]
746
766
fn const_type (
747
767
#[ case] const_value : Value ,
748
768
#[ case] expected_type : Type ,
@@ -756,6 +776,19 @@ pub(crate) mod test {
756
776
) ;
757
777
}
758
778
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
+
759
792
#[ rstest]
760
793
fn const_custom_value ( const_usize : Value , const_tuple : Value ) {
761
794
assert_eq ! (
0 commit comments