MCPcopy Create free account
hub / github.com/bytecodealliance/wasmtime / dynamic_extra_growth_unchanged_pointer

Function dynamic_extra_growth_unchanged_pointer

tests/all/memory.rs:455–506  ·  view source on GitHub ↗
(config: &mut Config)

Source from the content-addressed store, hash-verified

453
454#[wasmtime_test]
455fn dynamic_extra_growth_unchanged_pointer(config: &mut Config) -> Result<()> {
456 const EXTRA_PAGES: u64 = 5;
457 config.memory_reservation(0);
458 // 5 wasm pages extra
459 config.memory_reservation_for_growth(EXTRA_PAGES * (1 << 16));
460 let engine = Engine::new(&config)?;
461 let mut store = Store::new(&engine, ());
462
463 fn assert_behaves_well(store: &mut Store<()>, mem: &Memory) -> Result<()> {
464 let ptr = mem.data_ptr(&store);
465
466 // Each growth here should retain the same linear pointer in memory and the
467 // memory shouldn't get moved.
468 for _ in 0..EXTRA_PAGES {
469 mem.grow(&mut *store, 1)?;
470 assert_eq!(ptr, mem.data_ptr(&store));
471 }
472
473 // Growth afterwards though will be forced to move the pointer
474 mem.grow(&mut *store, 1)?;
475 let new_ptr = mem.data_ptr(&store);
476 assert_ne!(ptr, new_ptr);
477
478 for _ in 0..EXTRA_PAGES - 1 {
479 mem.grow(&mut *store, 1)?;
480 assert_eq!(new_ptr, mem.data_ptr(&store));
481 }
482 Ok(())
483 }
484
485 let mem = Memory::new(&mut store, MemoryType::new(10, None))?;
486 assert_behaves_well(&mut store, &mem)?;
487
488 let module = Module::new(&engine, r#"(module (memory (export "mem") 10))"#)?;
489 let instance = Instance::new(&mut store, &module, &[])?;
490 let mem = instance.get_memory(&mut store, "mem").unwrap();
491 assert_behaves_well(&mut store, &mem)?;
492
493 let module = Module::new(
494 &engine,
495 r#"
496 (module
497 (memory (export "mem") 10)
498 (data (i32.const 0) ""))
499 "#,
500 )?;
501 let instance = Instance::new(&mut store, &module, &[])?;
502 let mem = instance.get_memory(&mut store, "mem").unwrap();
503 assert_behaves_well(&mut store, &mem)?;
504
505 Ok(())
506}
507
508// This test exercises trying to create memories of the maximum 64-bit memory
509// size of `1 << 48` pages. This should always fail but in the process of

Callers

nothing calls this directly

Calls 7

assert_behaves_wellFunction · 0.85
OkFunction · 0.85
newFunction · 0.50
memory_reservationMethod · 0.45
unwrapMethod · 0.45
get_memoryMethod · 0.45

Tested by

no test coverage detected