elrond-wasm-debug 0.38.0

Elrond WebAssembly smart contract API debugging mocks and utils
Documentation
use elrond_wasm::storage::{
    mappers::{MapMapper, MapStorageMapper, StorageClearable, StorageMapper},
    StorageKey,
};
use elrond_wasm_debug::DebugApi;

fn create_map_storage() -> MapStorageMapper<DebugApi, u64, MapMapper<DebugApi, u64, u64>> {
    let _ = DebugApi::dummy();
    let base_key = StorageKey::new(&b"my_map_storage"[..]);
    MapStorageMapper::new(base_key)
}

#[test]
fn test_map_storage_simple() {
    let mut map = create_map_storage();
    assert_eq!(map.len(), 0);
    assert!(map.insert_default(42));
    assert!(!map.insert_default(42));
    let map42_option = map.get(&42);
    assert!(map42_option.is_some());
    let mut map42 = map42_option.unwrap();
    assert_eq!(map42.insert(100, 111), None);
    assert_eq!(map42.insert(100, 200), Some(111));
    assert_eq!(map42.insert(101, 201), None);
    assert_eq!(map42.len(), 2);
    assert_eq!(map.len(), 1);
    map.insert_default(43);
    assert_eq!(map.len(), 2);
    map.insert_default(44);
    assert_eq!(map.len(), 3);
    assert!(map.contains_key(&42));
    assert!(!map.contains_key(&50));
}

#[test]
fn test_map_storage_remove() {
    let mut map = create_map_storage();
    map.insert_default(42);
    map.insert_default(43);
    assert_eq!(map.len(), 2);
    assert!(map.remove(&42));
    assert!(!map.remove(&42));
    assert_eq!(map.len(), 1);
}

#[test]
fn test_map_storage_clear() {
    let mut map = create_map_storage();
    map.insert_default(42);
    let mut nested_map = map.get(&42).unwrap();
    nested_map.insert(420, 421);
    nested_map.insert(422, 423);
    assert_eq!(nested_map.len(), 2);
    map.clear();
    assert_eq!(nested_map.len(), 0);
    assert_eq!(map.len(), 0);
    assert!(map.is_empty());
}