unc-vm-runner 0.12.2

This crate implements the specification of the interface that unc blockchain exposes to the smart contracts.
Documentation
use crate::logic::tests::vm_logic_builder::VMLogicBuilder;

#[test]
fn test_storage_write_counter() {
    let mut logic_builder = VMLogicBuilder::default();
    let data_record_cost = logic_builder.fees_config.storage_usage_config.num_extra_bytes_record;
    let mut logic = logic_builder.build();
    let key = logic.internal_mem_write(b"foo");
    let val = logic.internal_mem_write(b"bar");

    logic.storage_write(key.len, key.ptr, val.len, val.ptr, 0).expect("storage write ok");

    let cost_expected = data_record_cost + key.len + val.len;

    assert_eq!(logic.storage_usage().unwrap(), cost_expected);

    logic.storage_write(key.len, key.ptr, val.len, val.ptr, 0).expect("storage write ok");

    assert_eq!(logic.storage_usage().unwrap(), cost_expected);
}

#[test]
fn test_storage_remove() {
    let mut logic_builder = VMLogicBuilder::default();
    let mut logic = logic_builder.build();
    let key = logic.internal_mem_write(b"foo");
    let val = logic.internal_mem_write(b"bar");

    logic.storage_write(key.len, key.ptr, val.len, val.ptr, 0).expect("storage write ok");

    logic.storage_remove(key.len, key.ptr, 0).expect("storage remove ok");

    assert_eq!(logic.storage_usage().unwrap(), 0u64);
}