()
| 569 | |
| 570 | #[test] |
| 571 | fn 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); |
nothing calls this directly
no test coverage detected