import { expect } from "chai"
|
|
|
|
import { Loc } from "../../lib/ir/loc"
|
|
import { prettyPrintSSA } from "../../lib/ir/pretty"
|
|
import type { SSA } from "../../lib/ir/ssa"
|
|
|
|
describe("ir", () => {
|
|
describe("prettyPrintSSA", () => {
|
|
it("load with immediate", () => {
|
|
const ssa: SSA = {
|
|
dest: Loc.vari("x"),
|
|
source: 42,
|
|
}
|
|
|
|
expect(prettyPrintSSA(ssa)).to.equal("x = 42")
|
|
})
|
|
|
|
it("load with register", () => {
|
|
const ssa: SSA = {
|
|
dest: Loc.vari("x"),
|
|
source: Loc.reg("A"),
|
|
}
|
|
|
|
expect(prettyPrintSSA(ssa)).to.equal("x = %A")
|
|
})
|
|
|
|
it("load with temporary", () => {
|
|
const ssa: SSA = {
|
|
dest: Loc.vari("x"),
|
|
source: Loc.temp("t0"),
|
|
}
|
|
|
|
expect(prettyPrintSSA(ssa)).to.equal("x = #t0")
|
|
})
|
|
|
|
it("load with variable", () => {
|
|
const ssa: SSA = {
|
|
dest: Loc.vari("x"),
|
|
source: Loc.vari("y"),
|
|
}
|
|
|
|
expect(prettyPrintSSA(ssa)).to.equal("x = y")
|
|
})
|
|
|
|
it("unary op", () => {
|
|
const ssa: SSA = {
|
|
dest: Loc.vari("x"),
|
|
source: Loc.vari("y"),
|
|
op: "arith_negate",
|
|
}
|
|
|
|
expect(prettyPrintSSA(ssa)).to.equal("x = arith_negate(y)")
|
|
})
|
|
|
|
it("binary op", () => {
|
|
const ssa: SSA = {
|
|
dest: Loc.vari("x"),
|
|
source: Loc.vari("y"),
|
|
source1: 42,
|
|
op: "add",
|
|
}
|
|
|
|
expect(prettyPrintSSA(ssa)).to.equal("x = add(y, 42)")
|
|
})
|
|
})
|
|
})
|