varinteger 1.0.6

Rust module for encoding/decoding varints that doesn't do any IO. Inspired by the Node.js varint module
Documentation
extern crate varinteger;

use varinteger::{
  decode, encode, length, signed_decode, signed_encode, signed_length,
};

#[test]
fn test_encode() {
  let mut buf = [0; 512];
  assert_eq!(encode(100, &mut buf), 1);
  assert_eq!(buf[0], 100);

  assert_eq!(encode(1000, &mut buf), 2);
  assert_eq!(buf[0], 232);
  assert_eq!(buf[1], 7);
}

#[test]
fn test_decode() {
  let mut value = 0 as u64;
  assert_eq!(decode(&[100], &mut value), 1);
  assert_eq!(value, 100);

  assert_eq!(decode(&[232, 7], &mut value), 2);
  assert_eq!(value, 1000);
}

#[test]
fn test_length() {
  assert_eq!(length(100), 1);
  assert_eq!(length(1000), 2);

  assert_eq!(length(1 << 49), 8);
  assert_eq!(length((1 << 56) - 1), 8);

  assert_eq!(length(1 << 56), 9);
  assert_eq!(length((1 << 63) - 1), 9);

  assert_eq!(length(1 << 63), 10);
}

#[test]
fn test_signed_encode() {
  let mut buf = [0; 512];
  assert_eq!(signed_encode(100, &mut buf), 2);
  assert_eq!(buf[0], 200);
  assert_eq!(buf[1], 1);

  assert_eq!(signed_encode(-100, &mut buf), 2);
  assert_eq!(buf[0], 199);
  assert_eq!(buf[1], 1);
}

#[test]
fn test_signed_decode() {
  let mut value = 0 as i64;
  assert_eq!(signed_decode(&[200, 1], &mut value), 2);
  assert_eq!(value, 100);

  assert_eq!(signed_decode(&[199, 1], &mut value), 2);
  assert_eq!(value, -100);
}

#[test]
fn test_signed_length() {
  assert_eq!(signed_length(100), 2);
  assert_eq!(signed_length(-100), 2);
}