(store: &mut Store<()>, mem: &Memory)
| 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)?; |
no test coverage detected