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 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208
|
"""
PYTHON setup.py build_ext -i
PYTHON main.py
"""
######## main.py ########
from __future__ import absolute_import
from pkg.user import UseRegisters
def test():
from pkg import called
assert called == [], called
ureg = UseRegisters()
assert called == [
'Before setFullFlags',
'setFullFlags was called',
'After setFullFlags',
], called
del called[:]
ureg.call_write()
assert called == [
'Before regWriteWithOpWords',
'regWriteWithOpWords was called',
'regWriteWithOpWords leave function',
'After regWriteWithOpWords',
], called
del called[:]
ureg.call_non_fused()
assert called == [
'Before nonFusedMiddle',
'nonFusedMiddle was called',
'After nonFusedMiddle',
'Before nonFusedBottom',
'nonFusedBottom was called',
'After nonFusedBottom',
'Before nonFusedTop',
'nonFusedTop was called',
'After nonFusedTop',
], called
def test_sub():
from pkg import called
from pkg.registers import SubRegisters
ureg = UseRegisters(reg_type=SubRegisters)
del called[:]
ureg.call_sub()
assert called == [
'Before nonFusedSub',
'nonFusedSub was called',
'After nonFusedSub',
'Before fusedSub',
'fusedSub was called',
'After fusedSub',
], called
test()
test_sub()
######## setup.py ########
from distutils.core import setup
from Cython.Build import cythonize
setup(ext_modules = cythonize('pkg/*.pyx'))
######## pkg/__init__.py ########
called = []
######## pkg/user.pxd ########
from .registers cimport Registers, SubRegisters
cdef class UseRegisters:
cdef Registers registers
######## pkg/user.pyx ########
from . import called
cdef class UseRegisters:
def __init__(self, reg_type=Registers):
self.registers = reg_type()
called.append("Before setFullFlags")
self.registers.setFullFlags(<unsigned int>12345, <unsigned int>0)
called.append("After setFullFlags")
def call_write(self):
called.append("Before regWriteWithOpWords")
self.registers.regWriteWithOpWords(0, <unsigned int>0)
called.append("After regWriteWithOpWords")
def call_non_fused(self):
called.append("Before nonFusedMiddle")
self.registers.nonFusedMiddle(0, <unsigned int>0)
called.append("After nonFusedMiddle")
called.append("Before nonFusedBottom")
self.registers.nonFusedBottom(0, <unsigned int>0)
called.append("After nonFusedBottom")
called.append("Before nonFusedTop")
self.registers.nonFusedTop(0, <unsigned int>0)
called.append("After nonFusedTop")
def call_sub(self):
assert isinstance(self.registers, SubRegisters), type(self.registers)
called.append("Before nonFusedSub")
(<SubRegisters>self.registers).nonFusedSub(0, <unsigned int>0)
called.append("After nonFusedSub")
called.append("Before fusedSub")
(<SubRegisters>self.registers).fusedSub(0, <unsigned int>0)
called.append("After fusedSub")
######## pkg/registers.pxd ########
from cython cimport integral
cdef class Registers:
cdef unsigned long long regs[1]
cdef void nonFusedTop(self, unsigned short regId, unsigned int value)
cdef void regWriteWithOpWords(self, unsigned short regId, integral value)
cdef void nonFusedMiddle(self, unsigned short regId, unsigned int value)
cdef void setFullFlags(self, integral reg0, unsigned int reg1)
cdef void nonFusedBottom(self, unsigned short regId, unsigned int value)
cdef void lastFusedImplFirst(self, integral reg0, unsigned int reg1)
cdef class SubRegisters(Registers):
cdef void fusedSub(self, integral reg0, unsigned int reg1)
cdef void nonFusedSub(self, unsigned short regId, unsigned int value)
######## pkg/registers.pyx ########
from . import called
cdef class Registers:
def __init__(self):
pass
cdef void lastFusedImplFirst(self, integral reg0, unsigned int reg1):
called.append("lastFusedImplFirst was called")
cdef void nonFusedTop(self, unsigned short regId, unsigned int value):
called.append("nonFusedTop was called")
cdef void regWriteWithOpWords(self, unsigned short regId, integral value):
called.append("regWriteWithOpWords was called")
self.regs[regId] = value
called.append("regWriteWithOpWords leave function")
cdef void nonFusedMiddle(self, unsigned short regId, unsigned int value):
called.append("nonFusedMiddle was called")
cdef void setFullFlags(self, integral reg0, unsigned int reg1):
called.append("setFullFlags was called")
cdef void nonFusedBottom(self, unsigned short regId, unsigned int value):
called.append("nonFusedBottom was called")
cdef class SubRegisters(Registers):
cdef void fusedSub(self, integral reg0, unsigned int reg1):
called.append("fusedSub was called")
cdef void nonFusedSub(self, unsigned short regId, unsigned int value):
called.append("nonFusedSub was called")
######## pkg/sub.pxd ########
from .registers cimport *
cdef class SubSubRegisters(SubRegisters):
cdef void fusedSubSubFirst(self, integral reg0, unsigned int reg1)
cdef void nonFusedSubSub(self, unsigned short regId, unsigned int value)
cdef void fusedSubSubLast(self, integral reg0, unsigned int reg1)
######## pkg/sub.pyx ########
from . import called
cdef class SubSubRegisters(SubRegisters):
cdef void fusedSubSubFirst(self, integral reg0, unsigned int reg1):
called.append("fusedSubSubFirst was called")
cdef void nonFusedSubSub(self, unsigned short regId, unsigned int value):
called.append("nonFusedSubSub was called")
cdef void fusedSubSubLast(self, integral reg0, unsigned int reg1):
called.append("fusedSubSubLast was called")
|