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
pub mod vm;
pub mod util;

#[macro_export]
macro_rules! malbolge {
        ($expression:expr) => {
        use vm::VirtualMachine;
        let mut o = VirtualMachine::new(false);
        o.load(Vec::from($expression));
        o.exec()
    }
}

#[cfg(test)]
mod tests {
    use super::*;
    use super::vm::*;
    use std::path::PathBuf;

    #[test]
    fn malbolge_hello(){
        let mut vm = VirtualMachine::new(false);
        let mut test_path = PathBuf::from(env!("CARGO_MANIFEST_DIR"));
        test_path.push("./mbi/examples/hello.mal");
        vm.load_program(test_path);
        vm.exec();
    }

    #[test]
    fn malbolge_load_path() {
        let mut test_path = PathBuf::from(env!("CARGO_MANIFEST_DIR"));
        test_path.push("./mbi/examples/cat.mal");
        let vm = VirtualMachine::new(false).load_program(test_path);
        assert_eq!(vm, true);
    }

    #[test]
    fn malbolge_macro_string() {
        malbolge!(r#"(=<`#9]76Z{z2V0/S-Qr*)M:,+*)('&%$#"!~}|{z(Kw%$t"Vq0iAm,,j<h'`%"#);
    }
}