1 from .base import TestBase
2 from ..core import OpCode
3 from ..core import MemoryBuffer
4 from ..core import PassRegistry
5 from ..core import Context
6 from ..core import Module
7 from ..bit_reader import parse_bitcode
9 class TestCore(TestBase):
10 def test_opcode(self):
11 self.assertTrue(hasattr(OpCode, 'Ret'))
12 self.assertTrue(isinstance(OpCode.Ret, OpCode))
13 self.assertEqual(OpCode.Ret.value, 1)
15 op = OpCode.from_value(1)
16 self.assertTrue(isinstance(op, OpCode))
17 self.assertEqual(op, OpCode.Ret)
19 def test_memory_buffer_create_from_file(self):
20 source = self.get_test_file()
22 MemoryBuffer(filename=source)
24 def test_memory_buffer_failing(self):
25 with self.assertRaises(Exception):
26 MemoryBuffer(filename="/hopefully/this/path/doesnt/exist")
28 def test_memory_buffer_len(self):
29 source = self.get_test_file()
30 m = MemoryBuffer(filename=source)
31 self.assertEqual(len(m), 50)
33 def test_create_passregistry(self):
36 def test_create_context(self):
37 Context.GetGlobalContext()
39 def test_create_module_with_name(self):
40 # Make sure we can not create a module without a LLVMModuleRef.
41 with self.assertRaises(TypeError):
43 m = Module.CreateWithName("test-module")
45 def test_module_getset_datalayout(self):
46 m = Module.CreateWithName("test-module")
47 dl = "e-p:32:32:32-i1:8:32-i8:8:32-i16:16:32-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:32:64-v128:32:128-a0:0:32-n32-S32"
49 self.assertEqual(m.datalayout, dl)
51 def test_module_getset_target(self):
52 m = Module.CreateWithName("test-module")
53 target = "thumbv7-apple-ios5.0.0"
55 self.assertEqual(m.target, target)
57 def test_module_print_module_to_file(self):
58 m = Module.CreateWithName("test")
59 dl = "e-p:32:32:32-i1:8:32-i8:8:32-i16:16:32-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:32:64-v128:32:128-a0:0:32-n32-S32"
61 target = "thumbv7-apple-ios5.0.0"
63 m.print_module_to_file("test2.ll")
65 def test_module_function_iteration(self):
66 m = parse_bitcode(MemoryBuffer(filename=self.get_test_bc()))
68 functions = ["f", "f2", "f3", "f4", "f5", "f6", "g1", "g2", "h1", "h2",
72 self.assertEqual(f.name, functions[i])
78 self.assertEqual(f.name, functions[i])
81 def test_function_basicblock_iteration(self):
82 m = parse_bitcode(MemoryBuffer(filename=self.get_test_bc()))
85 bb_list = ['b1', 'b2', 'end']
93 self.assertEqual(bb.name, bb_list[i])
98 for bb in reversed(f):
100 self.assertEqual(bb.name, bb_list[i])
103 def test_basicblock_instruction_iteration(self):
104 m = parse_bitcode(MemoryBuffer(filename=self.get_test_bc()))
107 inst_list = [('arg1', OpCode.ExtractValue),
108 ('arg2', OpCode.ExtractValue),
116 self.assertEqual(inst.name, inst_list[i][0])
117 self.assertEqual(inst.opcode, inst_list[i][1])
122 for inst in reversed(bb):
124 self.assertEqual(inst.name, inst_list[i][0])
125 self.assertEqual(inst.opcode, inst_list[i][1])