1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
#[cfg(test)] mod tests { use reader::VarIntReader; use varint::VarInt; use writer::VarIntWriter; #[test] fn test_required_space() { assert_eq!((0 as u32).required_space(), 1); assert_eq!((1 as u32).required_space(), 1); assert_eq!((128 as u32).required_space(), 2); assert_eq!((16384 as u32).required_space(), 3); assert_eq!((2097151 as u32).required_space(), 3); assert_eq!((2097152 as u32).required_space(), 4); } #[test] fn test_encode_u64() { assert_eq!((0 as u32).encode_var_vec(), vec![0b00000000]); assert_eq!((300 as u32).encode_var_vec(), vec![0b10101100, 0b00000010]); } #[test] fn test_identity_u64() { for i in 1 as u64..100 { assert_eq!(u64::decode_var_vec(&i.encode_var_vec()), (i, 1)); } for i in 16400 as u64..16500 { assert_eq!(u64::decode_var_vec(&i.encode_var_vec()), (i, 3)); } } #[test] fn test_decode_max_u64() { let max_vec_encoded = vec![0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01]; assert_eq!(u64::decode_var_vec(&max_vec_encoded).0, u64::max_value()); } #[test] fn test_encode_i64() { assert_eq!((0 as i64).encode_var_vec(), (0 as u32).encode_var_vec()); assert_eq!((150 as i64).encode_var_vec(), (300 as u32).encode_var_vec()); assert_eq!( (-150 as i64).encode_var_vec(), (299 as u32).encode_var_vec() ); assert_eq!( (-2147483648 as i64).encode_var_vec(), (4294967295 as u64).encode_var_vec() ); assert_eq!( (i64::max_value() as i64).encode_var_vec(), &[0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01] ); assert_eq!( (i64::min_value() as i64).encode_var_vec(), &[0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01] ); } #[test] fn test_decode_min_i64() { let min_vec_encoded = vec![0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01]; assert_eq!(i64::decode_var_vec(&min_vec_encoded).0, i64::min_value()); } #[test] fn test_decode_max_i64() { let max_vec_encoded = vec![0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01]; assert_eq!(i64::decode_var_vec(&max_vec_encoded).0, i64::max_value()); } #[test] fn test_encode_i16() { assert_eq!((150 as i16).encode_var_vec(), (300 as u32).encode_var_vec()); assert_eq!( (-150 as i16).encode_var_vec(), (299 as u32).encode_var_vec() ); } #[test] fn test_reader_writer() { let mut buf = Vec::with_capacity(128); let i1: u32 = 1; let i2: u32 = 65532; let i3: u32 = 4200123456; let i4: i64 = i3 as i64 * 1000; let i5: i32 = -32456; assert!(buf.write_varint(i1).is_ok()); assert!(buf.write_varint(i2).is_ok()); assert!(buf.write_varint(i3).is_ok()); assert!(buf.write_varint(i4).is_ok()); assert!(buf.write_varint(i5).is_ok()); let mut reader: &[u8] = buf.as_ref(); assert_eq!(i1, reader.read_varint().unwrap()); assert_eq!(i2, reader.read_varint().unwrap()); assert_eq!(i3, reader.read_varint().unwrap()); assert_eq!(i4, reader.read_varint().unwrap()); assert_eq!(i5, reader.read_varint().unwrap()); assert!(reader.read_varint::<u32>().is_err()); } }