-
Notifications
You must be signed in to change notification settings - Fork 0
/
unit_tests.py
58 lines (43 loc) · 1.32 KB
/
unit_tests.py
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
from instructions import Instructions
from registers import Registers
from memory import Memory
from datatypes_t import *
from exceptions import *
import random
def get_random_value():
return random.randint(0, 32000)
def get_random_register(type="regular"):
to_remove = ["$zero", "hi", "lo", "ra"]
reg_li = Registers().get_all_registers_as_list()
reg_ch = random.choice(list(filter(lambda x: x not in to_remove, reg_li)))
if type == "regular" and reg_ch.startswith("f"):
return get_random_register()
elif type == "float" and not reg_ch.startswith("f"):
return get_random_register()
else:
return reg_ch
def test(result, expected):
assert result == expected, f"Expected {expected}, got {result}"
# testing instructions
# test for li
R = Registers()
M = Memory()
for _ in range(10):
val = get_random_value()
reg = get_random_register()
Instructions.li(R, "$" + reg, val)
result = R.get_register(reg)
test(result, val)
# test for la
# test for move
R = Registers()
M = Memory()
for _ in range(10):
val = get_random_value()
reg0 = get_random_register()
reg1 = get_random_register()
Instructions.li(R, "$" + reg0, val)
Instructions.move(R, "$" + reg1, "$" + reg0)
val0 = R.get_register(reg0)
val1 = R.get_register(reg1)
test(val0, val1)