diff --git a/src/test.rs b/src/test.rs index 9ccb0be..5845ee6 100644 --- a/src/test.rs +++ b/src/test.rs @@ -21,7 +21,11 @@ use super::{ use super::SizeLimit::{Infinite, Bounded}; fn the_same<'a, V>(element: V) where V: Encodable, V: Decodable, V: PartialEq, V: Debug { - assert!(element == decode(encode(&element, Infinite).unwrap().as_slice()).unwrap()); + let size = encoded_size(&element); + let encoded = encode(&element, Infinite).unwrap(); + let decoded = decode(&encoded[]).unwrap(); + assert!(element == decoded); + assert!(size == encoded.len() as u64); } #[test] @@ -219,8 +223,8 @@ fn too_big_encode() { assert!(encode(&0u32, Bounded(3)).is_err()); assert!(encode(&0u32, Bounded(4)).is_ok()); - assert!(encode(&"abcde", Bounded(4)).is_err()); - assert!(encode(&"abcde", Bounded(5)).is_ok()); + assert!(encode(&"abcde", Bounded(8 + 4)).is_err()); + assert!(encode(&"abcde", Bounded(8 + 5)).is_ok()); } #[test] @@ -230,6 +234,10 @@ fn test_encoded_size() { assert!(encoded_size(&0u32) == 4); assert!(encoded_size(&0u64) == 8); + // length + assert!(encoded_size(&"") == 8); + assert!(encoded_size(&"a") == 8 + 1); + assert!(encoded_size(&vec![0u32, 1u32, 2u32]) == 8 + 3 * (4)) } diff --git a/src/writer.rs b/src/writer.rs index e6229c0..5956143 100644 --- a/src/writer.rs +++ b/src/writer.rs @@ -289,6 +289,7 @@ impl Encoder for SizeChecker { self.add_raw(v.len_utf8()) } fn emit_str(&mut self, v: &str) -> EncodingResult<()> { + try!(self.add_value(0 as u64)); self.add_raw(v.len()) } fn emit_enum(&mut self, __: &str, f: F) -> EncodingResult<()> where