@@ -69,7 +69,7 @@ impl Memory {
6969 }
7070
7171 /// Gets the current size of allocated memory
72- pub fn size ( & self ) -> usize {
72+ pub const fn size ( & self ) -> usize {
7373 self . 0 . len ( )
7474 }
7575
@@ -157,3 +157,118 @@ impl Memory {
157157 ( 0 ..len) . map ( |i| self . get ( start + i) ) . collect ( )
158158 }
159159}
160+
161+ #[ cfg( test) ]
162+ mod tests {
163+ use super :: * ;
164+
165+ #[ test]
166+ fn test_basic_memory_operations ( ) {
167+ let mut memory = Memory :: empty ( ) ;
168+
169+ // Test setting and getting values
170+ memory. set ( 0 , F :: ONE ) . unwrap ( ) ;
171+ memory. set ( 5 , F :: from_usize ( 42 ) ) . unwrap ( ) ;
172+
173+ assert_eq ! ( memory. get( 0 ) . unwrap( ) , F :: ONE ) ;
174+ assert_eq ! ( memory. get( 5 ) . unwrap( ) , F :: from_usize( 42 ) ) ;
175+
176+ // Test undefined memory access
177+ assert ! ( matches!( memory. get( 1 ) , Err ( RunnerError :: UndefinedMemory ) ) ) ;
178+ }
179+
180+ #[ test]
181+ fn test_memory_already_set_error ( ) {
182+ let mut memory = Memory :: empty ( ) ;
183+
184+ memory. set ( 0 , F :: ONE ) . unwrap ( ) ;
185+ // Setting same value should work
186+ memory. set ( 0 , F :: ONE ) . unwrap ( ) ;
187+
188+ // Setting different value should fail
189+ assert ! ( matches!(
190+ memory. set( 0 , F :: ZERO ) ,
191+ Err ( RunnerError :: MemoryAlreadySet )
192+ ) ) ;
193+ }
194+
195+ #[ test]
196+ fn test_memory_slices ( ) {
197+ let mut memory = Memory :: empty ( ) ;
198+ let values = vec ! [ F :: ONE , F :: ZERO , F :: from_usize( 42 ) , F :: from_usize( 100 ) ] ;
199+
200+ memory. set_slice ( 10 , & values) . unwrap ( ) ;
201+ let retrieved = memory. get_slice ( 10 , 4 ) . unwrap ( ) ;
202+
203+ assert_eq ! ( retrieved, values) ;
204+ }
205+
206+ #[ test]
207+ fn test_memory_initialization_and_utilities ( ) {
208+ let public_data = vec ! [ F :: ONE , F :: ZERO , F :: from_usize( 123 ) ] ;
209+ let memory = Memory :: new ( public_data. clone ( ) ) ;
210+
211+ // All public data should be initialized
212+ for ( i, expected) in public_data. iter ( ) . enumerate ( ) {
213+ assert ! ( memory. is_initialized( i) ) ;
214+ assert_eq ! ( memory. get( i) . unwrap( ) , * expected) ;
215+ }
216+
217+ assert_eq ! ( memory. size( ) , 3 ) ;
218+
219+ let entries = memory. initialized_entries ( ) ;
220+ assert_eq ! ( entries. len( ) , 3 ) ;
221+ assert_eq ! ( entries[ 0 ] , ( 0 , F :: ONE ) ) ;
222+ assert_eq ! ( entries[ 2 ] , ( 2 , F :: from_usize( 123 ) ) ) ;
223+ }
224+
225+ #[ test]
226+ fn test_vectorized_operations ( ) {
227+ let mut memory = Memory :: empty ( ) ;
228+ let vector = [ F :: ONE ; VECTOR_LEN ] ;
229+
230+ memory. set_vector ( 0 , vector) . unwrap ( ) ;
231+ let retrieved = memory. get_vector ( 0 ) . unwrap ( ) ;
232+
233+ assert_eq ! ( retrieved, vector) ;
234+
235+ // Test vectorized slice
236+ let slice_data = vec ! [ F :: from_usize( 1 ) ; 2 * VECTOR_LEN ] ;
237+ memory. set_vectorized_slice ( 1 , & slice_data) . unwrap ( ) ;
238+ let retrieved_slice = memory. get_vectorized_slice ( 1 , 2 ) . unwrap ( ) ;
239+
240+ assert_eq ! ( retrieved_slice, slice_data) ;
241+ }
242+
243+ #[ test]
244+ fn test_extension_field_operations ( ) {
245+ let mut memory = Memory :: empty ( ) ;
246+
247+ // Create a simple extension field element with proper dimension
248+ let mut coeffs = [ F :: ZERO ; DIMENSION ] ;
249+ coeffs[ 0 ] = F :: ONE ;
250+ let ef_value = EF :: from_basis_coefficients_slice ( & coeffs) . unwrap ( ) ;
251+
252+ memory. set_ef_element ( 0 , ef_value) . unwrap ( ) ;
253+ let retrieved = memory. get_ef_element ( 0 ) . unwrap ( ) ;
254+
255+ assert_eq ! ( retrieved, ef_value) ;
256+
257+ // Test continuous slice of EF elements
258+ memory. set_ef_element ( DIMENSION , ef_value) . unwrap ( ) ;
259+ let ef_slice = memory. get_continuous_slice_of_ef_elements ( 0 , 2 ) . unwrap ( ) ;
260+
261+ assert_eq ! ( ef_slice. len( ) , 2 ) ;
262+ assert_eq ! ( ef_slice[ 0 ] , ef_value) ;
263+ assert_eq ! ( ef_slice[ 1 ] , ef_value) ;
264+ }
265+
266+ #[ test]
267+ fn test_memory_clear ( ) {
268+ let mut memory = Memory :: new ( vec ! [ F :: ONE , F :: ZERO ] ) ;
269+ assert_eq ! ( memory. size( ) , 2 ) ;
270+
271+ memory. clear ( ) ;
272+ assert_eq ! ( memory. size( ) , 0 ) ;
273+ }
274+ }
0 commit comments