Added more tests
This commit is contained in:
parent
c088697446
commit
df782ae1cb
@ -25,10 +25,6 @@ func (f *Function) ExecuteRegisterNumber(operation token.Token, register cpu.Reg
|
|||||||
f.RegisterNumber(asm.MUL, register, number)
|
f.RegisterNumber(asm.MUL, register, number)
|
||||||
|
|
||||||
case token.Div, token.DivAssign:
|
case token.Div, token.DivAssign:
|
||||||
if register != x86.RAX {
|
|
||||||
f.SaveRegister(x86.RAX)
|
|
||||||
}
|
|
||||||
|
|
||||||
f.SaveRegister(x86.RDX)
|
f.SaveRegister(x86.RDX)
|
||||||
tmp := f.NewRegister()
|
tmp := f.NewRegister()
|
||||||
f.RegisterNumber(asm.MOVE, tmp, number)
|
f.RegisterNumber(asm.MOVE, tmp, number)
|
||||||
@ -36,7 +32,6 @@ func (f *Function) ExecuteRegisterNumber(operation token.Token, register cpu.Reg
|
|||||||
f.FreeRegister(tmp)
|
f.FreeRegister(tmp)
|
||||||
|
|
||||||
case token.Mod, token.ModAssign:
|
case token.Mod, token.ModAssign:
|
||||||
f.SaveRegister(x86.RAX)
|
|
||||||
f.SaveRegister(x86.RDX)
|
f.SaveRegister(x86.RDX)
|
||||||
tmp := f.NewRegister()
|
tmp := f.NewRegister()
|
||||||
f.RegisterNumber(asm.MOVE, tmp, number)
|
f.RegisterNumber(asm.MOVE, tmp, number)
|
||||||
|
@ -25,15 +25,10 @@ func (f *Function) ExecuteRegisterRegister(operation token.Token, register cpu.R
|
|||||||
f.RegisterRegister(asm.MUL, register, operand)
|
f.RegisterRegister(asm.MUL, register, operand)
|
||||||
|
|
||||||
case token.Div, token.DivAssign:
|
case token.Div, token.DivAssign:
|
||||||
if register != x86.RAX {
|
|
||||||
f.SaveRegister(x86.RAX)
|
|
||||||
}
|
|
||||||
|
|
||||||
f.SaveRegister(x86.RDX)
|
f.SaveRegister(x86.RDX)
|
||||||
f.RegisterRegister(asm.DIV, register, operand)
|
f.RegisterRegister(asm.DIV, register, operand)
|
||||||
|
|
||||||
case token.Mod, token.ModAssign:
|
case token.Mod, token.ModAssign:
|
||||||
f.SaveRegister(x86.RAX)
|
|
||||||
f.SaveRegister(x86.RDX)
|
f.SaveRegister(x86.RDX)
|
||||||
f.RegisterRegister(asm.MODULO, register, operand)
|
f.RegisterRegister(asm.MODULO, register, operand)
|
||||||
|
|
||||||
|
17
tests/programs/operator-assign-number.q
Normal file
17
tests/programs/operator-assign-number.q
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
main() {
|
||||||
|
f(10)
|
||||||
|
}
|
||||||
|
|
||||||
|
f(x int) {
|
||||||
|
y := x
|
||||||
|
x -= 2
|
||||||
|
assert x < y
|
||||||
|
x += 2
|
||||||
|
assert x == y
|
||||||
|
x *= 2
|
||||||
|
assert x > y
|
||||||
|
x /= 2
|
||||||
|
assert x == y
|
||||||
|
x %= 2
|
||||||
|
assert x < 2
|
||||||
|
}
|
18
tests/programs/operator-assign-variable.q
Normal file
18
tests/programs/operator-assign-variable.q
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
main() {
|
||||||
|
f(10)
|
||||||
|
}
|
||||||
|
|
||||||
|
f(x int) {
|
||||||
|
y := x
|
||||||
|
num := 2
|
||||||
|
x -= num
|
||||||
|
assert x < y
|
||||||
|
x += num
|
||||||
|
assert x == y
|
||||||
|
x *= num
|
||||||
|
assert x > y
|
||||||
|
x /= num
|
||||||
|
assert x == y
|
||||||
|
x %= num
|
||||||
|
assert x < num
|
||||||
|
}
|
@ -1,30 +0,0 @@
|
|||||||
main() {
|
|
||||||
number(10)
|
|
||||||
register(10)
|
|
||||||
}
|
|
||||||
|
|
||||||
number(x int) {
|
|
||||||
y := x
|
|
||||||
x -= 1
|
|
||||||
assert x < y
|
|
||||||
x += 1
|
|
||||||
assert x == y
|
|
||||||
x *= 2
|
|
||||||
assert x > y
|
|
||||||
x /= 2
|
|
||||||
assert x == y
|
|
||||||
}
|
|
||||||
|
|
||||||
register(x int) {
|
|
||||||
y := x
|
|
||||||
num := 1
|
|
||||||
x -= num
|
|
||||||
assert x < y
|
|
||||||
x += num
|
|
||||||
assert x == y
|
|
||||||
num = 2
|
|
||||||
x *= num
|
|
||||||
assert x > y
|
|
||||||
x /= num
|
|
||||||
assert x == y
|
|
||||||
}
|
|
17
tests/programs/operator-number.q
Normal file
17
tests/programs/operator-number.q
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
main() {
|
||||||
|
f(10)
|
||||||
|
}
|
||||||
|
|
||||||
|
f(x int) {
|
||||||
|
y := x
|
||||||
|
x = x - 2
|
||||||
|
assert x < y
|
||||||
|
x = x + 2
|
||||||
|
assert x == y
|
||||||
|
x = x * 2
|
||||||
|
assert x > y
|
||||||
|
x = x / 2
|
||||||
|
assert x == y
|
||||||
|
x = x % 2
|
||||||
|
assert x < 2
|
||||||
|
}
|
18
tests/programs/operator-variable.q
Normal file
18
tests/programs/operator-variable.q
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
main() {
|
||||||
|
f(10)
|
||||||
|
}
|
||||||
|
|
||||||
|
f(x int) {
|
||||||
|
y := x
|
||||||
|
num := 2
|
||||||
|
x = x - num
|
||||||
|
assert x < y
|
||||||
|
x = x + num
|
||||||
|
assert x == y
|
||||||
|
x = x * num
|
||||||
|
assert x > y
|
||||||
|
x = x / num
|
||||||
|
assert x == y
|
||||||
|
x = x % num
|
||||||
|
assert x < num
|
||||||
|
}
|
@ -28,7 +28,10 @@ var programs = []struct {
|
|||||||
{"return-multi", 0},
|
{"return-multi", 0},
|
||||||
{"math", 0},
|
{"math", 0},
|
||||||
{"precedence", 0},
|
{"precedence", 0},
|
||||||
{"operator-assign", 0},
|
{"operator-number", 0},
|
||||||
|
{"operator-variable", 0},
|
||||||
|
{"operator-assign-number", 0},
|
||||||
|
{"operator-assign-variable", 0},
|
||||||
{"const", 0},
|
{"const", 0},
|
||||||
{"escape-rune", 0},
|
{"escape-rune", 0},
|
||||||
{"escape-string", 0},
|
{"escape-string", 0},
|
||||||
|
Loading…
x
Reference in New Issue
Block a user