Add llvm_cbuilder tests
This commit is contained in:
parent
d795000176
commit
a52db30af8
14 changed files with 5 additions and 1 deletions
94
llvm_cbuilder/tests/test_translate.py
Normal file
94
llvm_cbuilder/tests/test_translate.py
Normal file
|
|
@ -0,0 +1,94 @@
|
|||
|
||||
from llvm.core import Module
|
||||
from llvm_cbuilder import *
|
||||
from llvm_cbuilder.translator import translate
|
||||
import llvm_cbuilder.shortnames as C
|
||||
import unittest, logging
|
||||
|
||||
#logging.basicConfig(level=logging.DEBUG)
|
||||
|
||||
class FooIf(CDefinition):
|
||||
_name_ = 'foo_if'
|
||||
_retty_ = C.int
|
||||
_argtys_ = [('x', C.int),
|
||||
('y', C.int),]
|
||||
|
||||
def body(self, x, y):
|
||||
@translate
|
||||
def _():
|
||||
if x > y:
|
||||
return x - y
|
||||
else:
|
||||
return y - x
|
||||
|
||||
|
||||
class FooWhile(CDefinition):
|
||||
_name_ = 'foo_while'
|
||||
_retty_ = C.int
|
||||
_argtys_ = [('x', C.int)]
|
||||
|
||||
def body(self, x):
|
||||
y = self.var_copy(x)
|
||||
|
||||
@translate
|
||||
def _():
|
||||
while x > 0:
|
||||
x -= 1
|
||||
y += x
|
||||
return y
|
||||
|
||||
class FooForRange(CDefinition):
|
||||
_name_ = 'foo_for_range'
|
||||
_retty_ = C.int
|
||||
_argtys_ = [('x', C.int)]
|
||||
|
||||
def body(self, x):
|
||||
y = self.var(x.type, 0)
|
||||
|
||||
@translate
|
||||
def _():
|
||||
for i in range(x + 1):
|
||||
y += i
|
||||
return y
|
||||
|
||||
|
||||
class TestTranslate(unittest.TestCase):
|
||||
def test_if(self):
|
||||
mod = Module.new(__name__)
|
||||
lfoo = FooIf()(mod)
|
||||
|
||||
print(mod)
|
||||
mod.verify()
|
||||
|
||||
exe = CExecutor(mod)
|
||||
foo = exe.get_ctype_function(lfoo, 'int, int')
|
||||
self.assertEqual(foo(10, 20), 20 - 10)
|
||||
self.assertEqual(foo(23, 17), 23 - 17)
|
||||
|
||||
def test_whileloop(self):
|
||||
mod = Module.new(__name__)
|
||||
lfoo = FooWhile()(mod)
|
||||
|
||||
print(mod)
|
||||
mod.verify()
|
||||
|
||||
exe = CExecutor(mod)
|
||||
foo = exe.get_ctype_function(lfoo, 'int')
|
||||
self.assertEqual(foo(10), sum(range(10+1)))
|
||||
self.assertEqual(foo(1324), sum(range(1324+1)))
|
||||
|
||||
def test_forloop(self):
|
||||
mod = Module.new(__name__)
|
||||
lfoo = FooForRange()(mod)
|
||||
|
||||
print(mod)
|
||||
mod.verify()
|
||||
|
||||
exe = CExecutor(mod)
|
||||
foo = exe.get_ctype_function(lfoo, 'int')
|
||||
self.assertEqual(foo(10), sum(range(10+1)))
|
||||
self.assertEqual(foo(1324), sum(range(1324+1)))
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue