use hase::assemble;
#[test]
fn empty() {
assert_eq!(assemble("").unwrap(), vec![0]);
}
#[test]
fn define_register() {
assert_eq!(assemble("x:1").unwrap(), vec![1, 0, 1]);
}
#[test]
fn define_list() {
assert_eq!(
assemble("x:[1 2 3]").unwrap(),
vec![1, 0, 3, 1, 96, 0, 1, 1, 0, 0, 1, 1, 96, 0, 2, 1, 0, 0, 1, 1, 96, 0, 3, 1, 0, 0, 1]
);
}
#[test]
fn add_one() {
assert_eq!(
assemble("x:1\nx+2").unwrap(),
vec![1, 0, 1, 1, 0b01100000, 0, 2]
);
}
#[test]
fn return_reg() {
assert_eq!(assemble("x:1\n=x").unwrap(), vec![1, 0, 1, 0, 193, 0, 1]);
}
#[test]
fn register_not_found() {
assert!(assemble("y+1").is_err());
}
#[test]
fn standalone_add() {
assert!(assemble("+").is_err());
}
#[test]
fn standalone_left() {
assert!(assemble("<").is_err());
}
#[test]
fn two_numbers() {
assert!(assemble("1 1").is_err());
}
#[test]
fn duplicate_register() {
assert!(assemble("a:1\na:1").is_err());
}
#[test]
fn duplicate_label() {
assert!(assemble("1=1\n1=1").is_err());
}
#[test]
fn jump() {
assert_eq!(
assemble("1=1\nn1").unwrap(),
vec![0, 0, 192, 0, 1, 0, 160, 0, 0]
)
}