acacia_net 0.1.0

A library for the Minecraft: Java Edition network protocol.
use std::io::Cursor;

use crate::{
    types::{VarInt, VarLong, Position},
    serialise::Serialise,
};

#[test]
fn serialise_var_int() {
    let mut buf = Cursor::new(vec![]);
    VarInt(0).serialise(&mut buf).unwrap();
    assert_eq!(*buf.get_ref(), [0u8]);

    let mut buf = Cursor::new(vec![]);
    VarInt(1).serialise(&mut buf).unwrap();
    assert_eq!(*buf.get_ref(), [1u8]);

    let mut buf = Cursor::new(vec![]);
    VarInt(2).serialise(&mut buf).unwrap();
    assert_eq!(*buf.get_ref(), [2u8]);

    let mut buf = Cursor::new(vec![]);
    VarInt(127).serialise(&mut buf).unwrap();
    assert_eq!(*buf.get_ref(), [127u8]);

    let mut buf = Cursor::new(vec![]);
    VarInt(128).serialise(&mut buf).unwrap();
    assert_eq!(*buf.get_ref(), [128u8, 1]);

    let mut buf = Cursor::new(vec![]);
    VarInt(255).serialise(&mut buf).unwrap();
    assert_eq!(*buf.get_ref(), [255u8, 1]);

    let mut buf = Cursor::new(vec![]);
    VarInt(2_147_483_647).serialise(&mut buf).unwrap();
    assert_eq!(*buf.get_ref(), [255u8, 255, 255, 255, 7]);

    let mut buf = Cursor::new(vec![]);
    VarInt(-1).serialise(&mut buf).unwrap();
    assert_eq!(*buf.get_ref(), [255u8, 255, 255, 255, 15]);

    let mut buf = Cursor::new(vec![]);
    VarInt(-2_147_483_648).serialise(&mut buf).unwrap();
    assert_eq!(*buf.get_ref(), [128u8, 128, 128, 128, 8]);
}

#[test]
fn serialise_var_long() {
    let mut buf = Cursor::new(vec![]);
    VarLong(0).serialise(&mut buf).unwrap();
    assert_eq!(*buf.get_ref(), [0u8]);

    let mut buf = Cursor::new(vec![]);
    VarLong(1).serialise(&mut buf).unwrap();
    assert_eq!(*buf.get_ref(), [1u8]);

    let mut buf = Cursor::new(vec![]);
    VarLong(2).serialise(&mut buf).unwrap();
    assert_eq!(*buf.get_ref(), [2u8]);

    let mut buf = Cursor::new(vec![]);
    VarLong(127).serialise(&mut buf).unwrap();
    assert_eq!(*buf.get_ref(), [127u8]);

    let mut buf = Cursor::new(vec![]);
    VarLong(128).serialise(&mut buf).unwrap();
    assert_eq!(*buf.get_ref(), [128u8, 1]);

    let mut buf = Cursor::new(vec![]);
    VarLong(255).serialise(&mut buf).unwrap();
    assert_eq!(*buf.get_ref(), [255u8, 1]);

    let mut buf = Cursor::new(vec![]);
    VarLong(2_147_483_647).serialise(&mut buf).unwrap();
    assert_eq!(*buf.get_ref(), [255u8, 255, 255, 255, 7]);

    let mut buf = Cursor::new(vec![]);
    VarLong(9_223_372_036_854_775_807).serialise(&mut buf).unwrap();
    assert_eq!(*buf.get_ref(), [255u8, 255, 255, 255, 255, 255, 255, 255, 127]);

    let mut buf = Cursor::new(vec![]);
    VarLong(-1).serialise(&mut buf).unwrap();
    assert_eq!(*buf.get_ref(), [255u8, 255, 255, 255, 255, 255, 255, 255, 255, 1]);

    let mut buf = Cursor::new(vec![]);
    VarLong(-2_147_483_648).serialise(&mut buf).unwrap();
    assert_eq!(*buf.get_ref(), [128u8, 128, 128, 128, 248, 255, 255, 255, 255, 1]);

    let mut buf = Cursor::new(vec![]);
    VarLong(-9_223_372_036_854_775_808).serialise(&mut buf).unwrap();
    assert_eq!(*buf.get_ref(), [128u8, 128, 128, 128, 128, 128, 128, 128, 128, 1]);
}

#[test]
fn serialise_position() {
    let mut buf = Cursor::new(vec![]);
    Position(-1, -1, -1).serialise(&mut buf).unwrap();
    assert_eq!(*buf.get_ref(), [0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF]);

    let mut buf = Cursor::new(vec![]);
    Position(-33_554_431, -2047, -33_554_431).serialise(&mut buf).unwrap();
    assert_eq!(*buf.get_ref(), [0x80, 0x00, 0x00, 0x60, 0x06, 0x00, 0x00, 0x01]);
}