1 from .base import TestBase
2 from ..core import MemoryBuffer
3 from ..core import PassRegistry
4 from ..core import Context
5 from ..core import Module
6 from ..core import Enums
7 from ..core import OpCode
8 from ..bit_reader import parse_bitcode
10 class TestCore(TestBase):
11 def test_enumerations(self):
12 for enum_cls, enum_spec in Enums:
13 for enum_name, enum_value in enum_spec:
14 # First make sure that enum_cls has the name of the enum as an
15 # attribute. People will access these values as
17 self.assertTrue(hasattr(enum_cls, enum_name))
18 v_attr = getattr(enum_cls, enum_name)
19 self.assertTrue(isinstance(v_attr, enum_cls))
21 # Then make sure that the value returned for this attribute is
22 # correct in both ways.
23 self.assertEqual(v_attr.value, enum_value)
25 e = enum_cls.from_value(enum_value)
26 self.assertTrue(isinstance(e, enum_cls))
27 self.assertEqual(e, v_attr)
29 def test_memory_buffer_create_from_file(self):
30 source = self.get_test_file()
32 MemoryBuffer(filename=source)
34 def test_memory_buffer_failing(self):
35 with self.assertRaises(Exception):
36 MemoryBuffer(filename="/hopefully/this/path/doesnt/exist")
38 def test_memory_buffer_len(self):
39 source = self.get_test_file()
40 m = MemoryBuffer(filename=source)
41 self.assertEqual(len(m), 50)
43 def test_create_passregistry(self):
46 def test_create_context(self):
47 Context.GetGlobalContext()
49 def test_create_module_with_name(self):
50 # Make sure we can not create a module without a LLVMModuleRef.
51 with self.assertRaises(TypeError):
53 m = Module.CreateWithName("test-module")
55 def test_module_getset_datalayout(self):
56 m = Module.CreateWithName("test-module")
57 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"
59 self.assertEqual(m.datalayout, dl)
61 def test_module_getset_target(self):
62 m = Module.CreateWithName("test-module")
63 target = "thumbv7-apple-ios5.0.0"
65 self.assertEqual(m.target, target)
67 def test_module_print_module_to_file(self):
68 m = Module.CreateWithName("test")
69 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"
71 target = "thumbv7-apple-ios5.0.0"
73 m.print_module_to_file("test2.ll")
75 def test_module_function_iteration(self):
76 m = parse_bitcode(MemoryBuffer(filename=self.get_test_bc()))
78 functions = ["f", "f2", "f3", "f4", "f5", "f6", "g1", "g2", "h1", "h2",
82 self.assertEqual(f.name, functions[i])
88 self.assertEqual(f.name, functions[i])
91 def test_function_basicblock_iteration(self):
92 m = parse_bitcode(MemoryBuffer(filename=self.get_test_bc()))
95 bb_list = ['b1', 'b2', 'end']
103 self.assertEqual(bb.name, bb_list[i])
108 for bb in reversed(f):
110 self.assertEqual(bb.name, bb_list[i])
113 def test_basicblock_instruction_iteration(self):
114 m = parse_bitcode(MemoryBuffer(filename=self.get_test_bc()))
117 inst_list = [('arg1', OpCode.ExtractValue),
118 ('arg2', OpCode.ExtractValue),
126 self.assertEqual(inst.name, inst_list[i][0])
127 self.assertEqual(inst.opcode, inst_list[i][1])
128 for op in range(len(inst)):
129 o = inst.get_operand(op)
136 for inst in reversed(bb):
138 self.assertEqual(inst.name, inst_list[i][0])
139 self.assertEqual(inst.opcode, inst_list[i][1])