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

Function shared_memory_basics

tests/all/memory.rs:571–639  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

569
570#[test]
571fn shared_memory_basics() -> Result<()> {
572 let mut config = Config::new();
573 config.shared_memory(true);
574 let engine = Engine::new(&config)?;
575 assert!(SharedMemory::new(&engine, MemoryType::new(1, None)).is_err());
576 assert!(SharedMemory::new(&engine, MemoryType::new(1, Some(1))).is_err());
577 assert!(SharedMemory::new(&engine, MemoryType::new64(1, None)).is_err());
578 assert!(SharedMemory::new(&engine, MemoryType::new64(1, Some(1))).is_err());
579 assert!(
580 MemoryTypeBuilder::default()
581 .shared(true)
582 .min(1)
583 .max(Some(0))
584 .build()
585 .is_err()
586 );
587
588 let memory = SharedMemory::new(&engine, MemoryType::shared(1, 1))?;
589 assert!(memory.ty().is_shared());
590 assert_eq!(memory.ty().minimum(), 1);
591 assert_eq!(memory.ty().maximum(), Some(1));
592 assert_eq!(memory.size(), 1);
593 assert_eq!(memory.data_size(), 65536);
594 assert_eq!(memory.data().len(), 65536);
595 assert!(memory.grow(1).is_err());
596
597 // misaligned
598 assert_eq!(memory.atomic_notify(1, 100), Err(Trap::HeapMisaligned));
599 assert_eq!(
600 memory.atomic_wait32(1, 100, None),
601 Err(Trap::HeapMisaligned)
602 );
603 assert_eq!(
604 memory.atomic_wait64(1, 100, None),
605 Err(Trap::HeapMisaligned)
606 );
607
608 // oob
609 assert_eq!(
610 memory.atomic_notify(1 << 20, 100),
611 Err(Trap::MemoryOutOfBounds)
612 );
613 assert_eq!(
614 memory.atomic_wait32(1 << 20, 100, None),
615 Err(Trap::MemoryOutOfBounds)
616 );
617 assert_eq!(
618 memory.atomic_wait64(1 << 20, 100, None),
619 Err(Trap::MemoryOutOfBounds)
620 );
621
622 // ok
623 assert_eq!(memory.atomic_notify(8, 100), Ok(0));
624 assert_eq!(memory.atomic_wait32(8, 1, None), Ok(WaitResult::Mismatch));
625 assert_eq!(memory.atomic_wait64(8, 1, None), Ok(WaitResult::Mismatch));
626
627 // timeout
628 let near_future = Duration::new(0, 100);

Callers

nothing calls this directly

Calls 3

OkFunction · 0.85
newFunction · 0.50
shared_memoryMethod · 0.45

Tested by

no test coverage detected