Просмотр исходного кода

[runtime/memory] test write_slice

ertosns 2 лет назад
Родитель
Сommit
7240222b21
1 измененных файлов с 44 добавлено и 0 удалено
  1. 44 0
      src/runtime/memory.rs

+ 44 - 0
src/runtime/memory.rs

@@ -35,3 +35,47 @@ impl<'a> MemoryManipulation for MemoryView<'a> {
         Ok(slice.write_slice(value_slice)?)
     }
 }
+
+
+#[cfg(test)]
+mod tests {
+    use wasmer::{WasmPtr, MemoryType, Memory, Store};
+    use super::*;
+    use std::io::Cursor;
+    use darkfi_serial::Decodable;
+
+    #[test]
+    fn test_memoryview_writeslice() {
+        let mut store = Store::default();
+        let m = Memory::new(&mut store, MemoryType::new(1, None, false)).unwrap();
+        let value: [u8; 3] = [3, 0, 1];
+        let view = m.view(&mut store);
+        let res = view.write_slice(&value, 0);
+        assert!(res.is_ok());
+        let ptr: WasmPtr<u8> = WasmPtr::new(0);
+        let slice = ptr.slice(&view, value.len() as u32);
+        let mut buf: [u8; 3] = [0;3];
+        let _ = slice.expect("err").read_slice(&mut buf);
+        assert_eq!(buf, value);
+    }
+
+    #[test]
+    fn test_memoryview_allread() -> Result<()> {
+        let mut store = Store::default();
+        let m = Memory::new(&mut store, MemoryType::new(1, None, false)).unwrap();
+        let value: [u8; 3] = [3, 0, 1];
+        let view = m.view(&mut store);
+        let res = view.write_slice(&value, 0);
+        assert!(res.is_ok());
+        let ptr: WasmPtr<u8> = WasmPtr::new(0);
+        let slice = ptr.slice(&view, value.len() as u32)?;
+        let mut buf: [u8; 3] = [0;3];
+        let _ = slice.read_slice(&mut buf);
+        let mut buf_reader = Cursor::new(buf);
+        let ret: [u8; 3] = Decodable::decode(&mut buf_reader)?;
+        assert!(buf.len()==(slice.len() as usize));
+        assert_eq!(ret, value);
+        assert!(buf_reader.position()==slice.len());
+        Ok(())
+    }
+}