Updates
This commit is contained in:
41
tests/test_analysis_outputs.py
Normal file
41
tests/test_analysis_outputs.py
Normal file
@@ -0,0 +1,41 @@
|
||||
import unittest
|
||||
|
||||
from h8536.analysis import build_call_graph
|
||||
from h8536.data_analysis import analyze_unreached_data
|
||||
from h8536.memory import region_for
|
||||
from h8536.model import Instruction
|
||||
from h8536.rom import Rom
|
||||
|
||||
|
||||
class AnalysisOutputsTest(unittest.TestCase):
|
||||
def test_memory_regions_distinguish_ram_and_register_field(self):
|
||||
self.assertEqual(region_for(0xF680).name, "on_chip_ram")
|
||||
self.assertEqual(region_for(0xFE80).name, "register_field")
|
||||
self.assertEqual(region_for(0x0100).name, "program_or_external")
|
||||
|
||||
def test_unreached_data_scan_finds_ascii_string_candidate(self):
|
||||
data = bytearray([0xFF] * 0x120)
|
||||
data[0x100:0x106] = b"HELLO!"
|
||||
|
||||
candidates = analyze_unreached_data(Rom(bytes(data)), {}, 0, len(data))
|
||||
|
||||
self.assertEqual(candidates["strings"][0]["address"], 0x100)
|
||||
self.assertEqual(candidates["strings"][0]["text"], "HELLO!")
|
||||
|
||||
def test_call_graph_records_direct_calls_by_function_owner(self):
|
||||
instructions = {
|
||||
0x0100: Instruction(0x0100, b"\x18\x02\x00", "JSR", "@loc_0200", kind="call", targets=[0x0200]),
|
||||
0x0103: Instruction(0x0103, b"\x19", "RTS", kind="return", fallthrough=False),
|
||||
0x0200: Instruction(0x0200, b"\x19", "RTS", kind="return", fallthrough=False),
|
||||
}
|
||||
vectors = {0x0000: ("reset", 0x0100)}
|
||||
labels = {0x0100: "vec_reset_0100", 0x0200: "loc_0200"}
|
||||
|
||||
graph = build_call_graph(instructions, vectors, labels)
|
||||
|
||||
self.assertEqual(graph["edges"][0]["from"], 0x0100)
|
||||
self.assertEqual(graph["edges"][0]["to"], 0x0200)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user