mod setup;
use setup::*;

#[test]
fn mov() {
    let c = &mut TestCtx::new("mov");

    for dst in regs() {
        for src in regs() {
            eq(c, format!("mov {dst}, {src}"), |c| c.mov(dst, src));
        }
    }

    for dst in regs() {
        for src in mems() {
            eq(c, format!("mov {dst}, {src}"), |c| c.mov(dst, src));
        }
    }

    for dst in regs() {
        for src in imms() {
            eq(c, format!("mov {dst}, {src}"), |c| c.mov(dst, src));
        }
    }

    for dst in mems() {
        for src in regs() {
            eq(c, format!("mov {dst}, {src}"), |c| c.mov(dst, src));
        }
    }

    for dst in mems() {
        for src in imms() {
            eq(c, format!("mov {dst}, {src}"), |c| c.mov(dst, src));
        }
    }
}

#[test]
fn add_sub() {
    let c = &mut TestCtx::new("add_sub");

    // add
    for dst in regs() {
        for src in imms() {
            eq(c, format!("add {dst}, {src}"), |c| c.add(dst, src))
        }
    }

    for dst in regs() {
        for src in regs() {
            eq(c, format!("add {dst}, {src}"), |c| c.add(dst, src))
        }
    }

    for dst in mems() {
        for src in imms() {
            eq(c, format!("add {dst}, {src}"), |c| c.add(dst, src))
        }
    }

    // sub
    for dst in regs() {
        for src in imms() {
            eq(c, format!("sub {dst}, {src}"), |c| c.sub(dst, src))
        }
    }
}
