diff --git a/bindings/rust/evmc-vm/src/lib.rs b/bindings/rust/evmc-vm/src/lib.rs index d178744ba..690d0cc06 100644 --- a/bindings/rust/evmc-vm/src/lib.rs +++ b/bindings/rust/evmc-vm/src/lib.rs @@ -2,12 +2,9 @@ pub extern crate evmc_sys; pub use evmc_sys as ffi; // TODO: Add helpers for host interface -// TODO: Add convenient helpers for evmc_result // TODO: Add convenient helpers for evmc_execute // TODO: Add a derive macro here for creating evmc_create -//pub fn destroy_result(&mut evmc_result) - /// EVMC result structure. pub struct EvmcResult(Box); @@ -38,7 +35,9 @@ impl EvmcResult { pub fn output(&self) -> Option<&[u8]> { if !self.0.output_data.is_null() && self.0.output_size != 0 { - Some(unsafe { std::slice::from_raw_parts::(self.0.output_data, self.0.output_size) }) + Some(unsafe { + std::slice::from_raw_parts::(self.0.output_data, self.0.output_size) + }) } else { None } @@ -55,3 +54,24 @@ extern "C" fn release_result(result: *const ffi::evmc_result) { Box::from_raw(result as *mut ffi::evmc_result); } } + +#[cfg(test)] +mod tests { + use super::*; + use evmc_sys as ffi; + use std::mem::discriminant; + + #[test] + fn constructor() { + let result = EvmcResult::new( + ffi::evmc_status_code::EVMC_SUCCESS, + 420, + Some(&[0xde, 0xad, 0xbe, 0xef]), + ); + assert!(result.status() == ffi::evmc_status_code::EVMC_SUCCESS); + assert!(result.gasleft() == 420); + assert!(result.output().is_some()); + assert!(result.output().unwrap().len() == 4); + assert!(result.output().unwrap() == [0xde, 0xad, 0xbe, 0xef]); + } +}