@@ -5,8 +5,13 @@ use std::sync::Arc;
55use assert_matches:: assert_matches;
66use blockifier_test_utils:: cairo_versions:: { CairoVersion , RunnableCairo1 } ;
77use blockifier_test_utils:: contracts:: FeatureContract ;
8+ use cairo_lang_starknet_classes:: casm_contract_class:: {
9+ CasmContractEntryPoint ,
10+ CasmContractEntryPoints ,
11+ } ;
812use cairo_lang_starknet_classes:: NestedIntList ;
913use cairo_lang_utils:: bigint:: BigUintAsHex ;
14+ use num_bigint:: BigUint ;
1015use rstest:: rstest;
1116use starknet_api:: contract_class:: compiled_class_hash:: { HashVersion , HashableCompiledClass } ;
1217use starknet_api:: contract_class:: ContractClass ;
@@ -16,6 +21,8 @@ use starknet_types_core::hash::Blake2Felt252;
1621use crate :: execution:: contract_class:: {
1722 CompiledClassV1 ,
1823 ContractClassV1Inner ,
24+ EntryPointV1 ,
25+ EntryPointsByType ,
1926 FeltSizeCount ,
2027 NestedFeltCounts ,
2128 RunnableCompiledClass ,
@@ -184,3 +191,48 @@ fn test_encoded_u32_len(#[case] test_data: &[Felt]) {
184191
185192 assert_eq ! ( actual_u32_len, estimated_u32_len) ;
186193}
194+
195+ #[ rstest]
196+ #[ case:: empty( CasmContractEntryPoints :: default ( ) ) ]
197+ #[ case:: single_external( CasmContractEntryPoints {
198+ external: vec![ CasmContractEntryPoint {
199+ selector: BigUint :: from( 123u64 ) ,
200+ offset: 42 ,
201+ builtins: vec![ "range_check" . to_string( ) , "pedersen" . to_string( ) ] ,
202+ } ] ,
203+ l1_handler: vec![ ] ,
204+ constructor: vec![ ] ,
205+ } ) ]
206+ #[ case:: all_types( CasmContractEntryPoints {
207+ external: vec![
208+ CasmContractEntryPoint {
209+ selector: BigUint :: from( 100u64 ) ,
210+ offset: 10 ,
211+ builtins: vec![ "range_check" . to_string( ) ] ,
212+ } ,
213+ CasmContractEntryPoint {
214+ selector: BigUint :: from( 200u64 ) ,
215+ offset: 20 ,
216+ builtins: vec![ ] ,
217+ } ,
218+ ] ,
219+ l1_handler: vec![ CasmContractEntryPoint {
220+ selector: BigUint :: from( 300u64 ) ,
221+ offset: 30 ,
222+ builtins: vec![ "pedersen" . to_string( ) ] ,
223+ } ] ,
224+ constructor: vec![ CasmContractEntryPoint {
225+ selector: BigUint :: from( 400u64 ) ,
226+ offset: 40 ,
227+ builtins: vec![ "range_check" . to_string( ) , "bitwise" . to_string( ) ] ,
228+ } ] ,
229+ } ) ]
230+ fn test_entry_points_round_trip ( #[ case] original : CasmContractEntryPoints ) {
231+ // Convert CasmContractEntryPoints -> EntryPointsByType<EntryPointV1>.
232+ let entry_points_by_type: EntryPointsByType < EntryPointV1 > = ( & original) . into ( ) ;
233+
234+ // Convert back: EntryPointsByType<EntryPointV1> -> CasmContractEntryPoints.
235+ let round_tripped: CasmContractEntryPoints = ( & entry_points_by_type) . into ( ) ;
236+
237+ assert_eq ! ( round_tripped, original) ;
238+ }
0 commit comments