/ tests / shared.rs
shared.rs
 1  use cbuffer::{RxBuffer, TxBuffer};
 2  use libc::size_t;
 3  
 4  unsafe fn poke_foo(ptr: *mut u8, len: size_t) {
 5      let foo = b"foo\n";
 6      assert!(len >= foo.len());
 7  
 8      for i in 0..foo.len() {
 9          *ptr.add(i) = foo[i];
10      }
11  }
12  
13  unsafe fn assert_foo(ptr: *const u8, len: size_t) {
14      let foo = b"foo\n";
15      assert!(len >= foo.len());
16  
17      for i in 0..foo.len() {
18          assert_eq!(*ptr.add(i), foo[i]);
19      }
20  }
21  
22  #[test]
23  fn foo_test() {
24      let mut ary: [u8; 10] = [0; 10];
25      unsafe {
26          poke_foo(ary.as_mut_ptr(), 10);
27          assert_foo(ary.as_ptr(), 10);
28      }
29  }
30  
31  #[test]
32  #[should_panic]
33  fn foo_fail_test() {
34      let ary: [u8; 10] = [0; 10];
35      unsafe {
36          assert_foo(ary.as_ptr(), 10);
37      }
38  }
39  
40  pub fn write_cbuffer(buf: &dyn TxBuffer) {
41      let (ptr, size) = buf.as_c_char();
42      unsafe {
43          assert_foo(ptr as *const u8, size);
44      }
45  }
46  
47  pub fn read_cbuffer(buf: &mut dyn RxBuffer) -> &[u8] {
48      unsafe {
49          let (ptr, size) = buf.as_c_void();
50          poke_foo(ptr as *mut u8, size);
51          assert_foo(ptr as *const u8, size);
52          buf.done(4)
53      }
54  }
55  
56  pub fn read_cbuffer_resize(buf: &mut dyn RxBuffer) -> &[u8] {
57      unsafe {
58          if let Some(resize) = buf.can_set_capacity() {
59              resize.set_capacity(4);
60          }
61          let (ptr, size) = buf.as_c_void();
62          poke_foo(ptr as *mut u8, size);
63          assert_foo(ptr as *const u8, size);
64          buf.done(4)
65      }
66  }