def _makefunc_str_int(cls, f): def main(argv): arg0 = argv[1] arg1 = int(argv[2]) try: res = f(arg0, arg1) except MemoryError: print "MEMORY-ERROR" else: print res return 0 t = Translation(main, standalone=True, gc=cls.gcpolicy, policy=annpolicy.StrictAnnotatorPolicy(), taggedpointers=cls.taggedpointers, gcremovetypeptr=cls.removetypeptr) t.disable(['backendopt']) t.set_backend_extra_options(c_debug_defines=True) t.rtype() if conftest.option.view: t.viewcg() exename = t.compile() def run(s, i): data = py.process.cmdexec("%s %s %d" % (exename, s, i)) data = data.strip() if data == 'MEMORY-ERROR': raise MemoryError return data return run
def compile(fn, argtypes, view=False, gcpolicy="ref", backendopt=True, annotatorpolicy=None): t = Translation(fn, argtypes, gc=gcpolicy, backend="c", policy=annotatorpolicy) if not backendopt: t.disable(["backendopt_lltype"]) t.annotate() # XXX fish t.driver.config.translation.countmallocs = True compiled_fn = t.compile_c() if getattr(py.test.config.option, 'view', False): t.view() malloc_counters = t.driver.cbuilder.get_malloc_counters() def checking_fn(*args, **kwds): if 'expected_extra_mallocs' in kwds: expected_extra_mallocs = kwds.pop('expected_extra_mallocs') else: expected_extra_mallocs = 0 res = compiled_fn(*args, **kwds) mallocs, frees = malloc_counters() if isinstance(expected_extra_mallocs, int): assert mallocs - frees == expected_extra_mallocs else: assert mallocs - frees in expected_extra_mallocs return res return checking_fn
def compile(fn, argtypes, view=False, gcpolicy="ref", backendopt=True, annotatorpolicy=None): if argtypes is not None and "__pypy__" in sys.builtin_module_names: py.test.skip("requires building cpython extension modules") t = Translation(fn, argtypes, gc=gcpolicy, backend="c", policy=annotatorpolicy) if not backendopt: t.disable(["backendopt_lltype"]) t.annotate() # XXX fish t.driver.config.translation.countmallocs = True compiled_fn = t.compile_c() try: if py.test.config.option.view: t.view() except AttributeError: pass malloc_counters = t.driver.cbuilder.get_malloc_counters() def checking_fn(*args, **kwds): if 'expected_extra_mallocs' in kwds: expected_extra_mallocs = kwds.pop('expected_extra_mallocs') else: expected_extra_mallocs = 0 res = compiled_fn(*args, **kwds) mallocs, frees = malloc_counters() if isinstance(expected_extra_mallocs, int): assert mallocs - frees == expected_extra_mallocs else: assert mallocs - frees in expected_extra_mallocs return res return checking_fn
def test_disable_logic(): def f(x, y): return x + y t = Translation(f, [int, int]) t.disable(['backendopt']) t.source_c() assert 'backendopt' not in t.driver.done
def test_disable_logic(): def f(x, y): return x + y t = Translation(f, [int, int]) t.disable(["backendopt"]) t.source_c() assert "backendopt" not in t.driver.done
def compile(fn, argtypes, view=False, gcpolicy="ref", backendopt=True, annotatorpolicy=None): t = Translation(fn, argtypes, gc=gcpolicy, backend="c", policy=annotatorpolicy) if not backendopt: t.disable(["backendopt_lltype"]) t.annotate() # XXX fish t.driver.config.translation.countmallocs = True compiled_fn = t.compile_c() if conftest.option.view: t.view() # XXX fish fish fish some more module = t.driver.cbuilder.c_ext_module def checking_fn(*args, **kwds): if 'expected_extra_mallocs' in kwds: expected_extra_mallocs = kwds.pop('expected_extra_mallocs') else: expected_extra_mallocs = 0 res = compiled_fn(*args, **kwds) mallocs, frees = module.malloc_counters() assert mallocs - frees == expected_extra_mallocs return res return checking_fn