fix size estimation, add tests

This commit is contained in:
Ty Overby 2015-02-07 18:10:12 -08:00
parent 64a8877c55
commit 58c3c65eea
2 changed files with 12 additions and 3 deletions

View File

@ -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))
}

View File

@ -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<F>(&mut self, __: &str, f: F) -> EncodingResult<()> where