@@ -293,4 +293,79 @@ mod tests {
293
293
let _ = ShadowHeap :: < TestProv > :: default ( ) ;
294
294
teardown ( ) ;
295
295
}
296
+
297
+ #[ test]
298
+ fn test_shadow_heap_performance ( ) {
299
+ setup ( ) ;
300
+ let heap = ShadowHeap :: < TestProv > :: default ( ) ;
301
+
302
+ // Create test data
303
+ const NUM_OPERATIONS : usize = 1000 ;
304
+ let test_values: Vec < TestProv > = ( 0 ..NUM_OPERATIONS )
305
+ . map ( |i| TestProv { value : ( i % 255 ) as u8 } )
306
+ . collect ( ) ;
307
+
308
+ // Sequential addresses
309
+ unsafe {
310
+ for i in 0 ..NUM_OPERATIONS {
311
+ let addr = i * 8 ; // Word-aligned addresses
312
+ heap. store_prov ( & test_values[ i] , addr) ;
313
+ }
314
+
315
+ for i in 0 ..NUM_OPERATIONS {
316
+ let addr = i * 8 ;
317
+ let loaded = heap. load_prov ( addr) ;
318
+ assert_eq ! ( loaded. value, test_values[ i] . value) ;
319
+ }
320
+ }
321
+
322
+ // Scattered addresses (using different L1/L2 indices)
323
+ unsafe {
324
+ for i in 0 ..NUM_OPERATIONS {
325
+ let addr = i * 0x1_0000_0000 ; // Spread across L1 entries
326
+ heap. store_prov ( & test_values[ i] , addr) ;
327
+ }
328
+
329
+ for i in 0 ..NUM_OPERATIONS {
330
+ let addr = i * 0x1_0000_0000 ;
331
+ let loaded = heap. load_prov ( addr) ;
332
+ assert_eq ! ( loaded. value, test_values[ i] . value) ;
333
+ }
334
+ }
335
+
336
+ // Random access pattern
337
+ let random_addrs: Vec < usize > = ( 0 ..NUM_OPERATIONS )
338
+ . map ( |i| i * 0x1234_5678 )
339
+ . collect ( ) ;
340
+
341
+ unsafe {
342
+ for i in 0 ..NUM_OPERATIONS {
343
+ heap. store_prov ( & test_values[ i] , random_addrs[ i] ) ;
344
+ }
345
+
346
+ for i in 0 ..NUM_OPERATIONS {
347
+ let loaded = heap. load_prov ( random_addrs[ i] ) ;
348
+ assert_eq ! ( loaded. value, test_values[ i] . value) ;
349
+ }
350
+ }
351
+
352
+ // Mixed operations (interleaved stores and loads)
353
+ unsafe {
354
+ for i in 0 ..NUM_OPERATIONS {
355
+ let addr = i * 0x1000 ;
356
+ heap. store_prov ( & test_values[ i] , addr) ;
357
+ let loaded = heap. load_prov ( addr) ;
358
+ assert_eq ! ( loaded. value, test_values[ i] . value) ;
359
+
360
+ // Also load from a previous address
361
+ if i > 0 {
362
+ let prev_addr = ( i - 1 ) * 0x1000 ;
363
+ let loaded = heap. load_prov ( prev_addr) ;
364
+ assert_eq ! ( loaded. value, test_values[ i - 1 ] . value) ;
365
+ }
366
+ }
367
+ }
368
+
369
+ teardown ( ) ;
370
+ }
296
371
}
0 commit comments