ttvm 0.3.5

Runtime and compiler infrastructure API for Rust
Documentation
use super::*;

#[test]
fn test_byte() {
    assert_eq!(Byte::MIN, i64::MIN);
    assert_eq!(Byte::MAX, i64::MAX);

    assert_eq!(IPtr::MIN, i64::MIN);
    assert_eq!(IPtr::MAX, i64::MAX);
    
    assert_eq!(RPtr::MIN, usize::MIN);
    assert_eq!(RPtr::MAX, usize::MAX);
}

#[test]
fn test_mem() {
    let mut mem = Mem::new();

    assert_eq!(NULL, 0);
    assert_eq!(mem.size(), 1);

    let addr1 = match mem.alloc(4) {
        Ok(ok) => {
            assert_eq!(ok, 1);
            assert_eq!(mem.size(), 2);

            ok
        },
        Err(err) => panic!("{}", err.to_string())
    };
    
    match mem.get_mut(addr1) {
        Ok(ok) => {
            assert_eq!(ok.len(), 4);

            *match ok.get_mut(0) {
                Some(ok) => ok,
                None => panic!("{}", "unexpected None")
            } = 'O' as Byte;

            *match ok.get_mut(1) {
                Some(ok) => ok,
                None => panic!("{}", "unexpected None")
            } = 'K' as Byte;

            *match ok.get_mut(2) {
                Some(ok) => ok,
                None => panic!("{}", "unexpected None")
            } = 0xA; // '\n' as Byte

            *match ok.get_mut(3) {
                Some(ok) => ok,
                None => panic!("{}", "unexpected None")
            } = 0x0; // '\0' as Byte
        },
        Err(err) => panic!("{}", err.to_string())
    };

    match mem.get(addr1) {
        Ok(ok) => {
            assert_eq!(ok.len(), 4);

            assert_eq!(*match ok.get(0) {
                Some(ok) => ok,
                None => panic!("{}", "unexpected None")
            }, 'O' as Byte);

            assert_eq!(*match ok.get(1) {
                Some(ok) => ok,
                None => panic!("{}", "unexpected None")
            }, 'K' as Byte);

            assert_eq!(*match ok.get(2) {
                Some(ok) => ok,
                None => panic!("{}", "unexpected None")
            }, 0xA); // '\n' as Byte

            assert_eq!(*match ok.get(3) {
                Some(ok) => ok,
                None => panic!("{}", "unexpected None")
            }, 0x0); // '\0' as Byte

            assert_eq!(ok.len(), 4);
        },
        Err(err) => panic!("{}", err.to_string())
    };

    match mem.dealloc(addr1) {
        Ok(ok) => {
            assert_eq!(ok, 4);
            assert_eq!(mem.size(), 2);

            ok
        },
        Err(err) => panic!("{}", err.to_string())
    };

    let mut addr2 = raw::malloc(&mut mem, 10);
    assert_eq!(addr2, 2);

    addr2 = raw::realloc(&mut mem, addr2, 20);
    assert_eq!(addr2, 3);

    addr2 = raw::calloc(&mut mem, 3, 10);
    assert_eq!(addr2, 4);
    
    raw::free(&mut mem, addr2);
}