def test_rpython_int_cmp(): def int_cmp(a, b): if a > b: return 1 elif a == b: return 0 else: return -1 mu_int_cmp, _ = fncptr_from_rpy_func(int_cmp, [rffi.LONGLONG, rffi.LONGLONG], rffi.LONGLONG) assert mu_int_cmp(1, 0) == 1 assert mu_int_cmp(0, 1) == -1 assert mu_int_cmp(0, 0) == 0 assert mu_int_cmp(1, 1) == 0 assert mu_int_cmp(1, -1) == 1 assert mu_int_cmp(-1, 1) == -1 assert mu_int_cmp(-1, -2) == 1 assert mu_int_cmp(-2, -1) == -1 assert mu_int_cmp(-1, -1) == 0 assert mu_int_cmp(9223372036854775807, -9223372036854775808) == 1
def test_rpython_dict_new_1(): def new_1(): a = {0: 42} fn, (db, bdlgen) = fncptr_from_rpy_func(new_1, [], lltype.Void) bdlgen.mu.current_thread_as_mu_thread(rmu.null(rmu.MuCPtr)) fn()
def test_rpython_dict_lookup(): def test_lookup(): a = {0: 42} return a[0] fn, (db, bdlgen) = fncptr_from_rpy_func(test_lookup, [], lltype.Signed) bdlgen.mu.current_thread_as_mu_thread(rmu.null(rmu.MuCPtr)) assert fn() == 42
def test_rpython_list_new_5(): def new_5(): a = [1, 2, 3, 4, 5] return len(a) fn, (db, bdlgen) = fncptr_from_rpy_func(new_5, [], rffi.LONGLONG) bdlgen.mu.current_thread_as_mu_thread(rmu.null(rmu.MuCPtr)) assert fn() == 5
def test_rpython_list_new_empty(): def new_empty(): a = [] return a fn, (db, bdlgen) = fncptr_from_rpy_func(new_empty, [], lltype.Void) bdlgen.mu.current_thread_as_mu_thread(rmu.null(rmu.MuCPtr)) fn()
def test_rpython_dict_new_100(): def new_100(): a = {} for i in range(0, 100): a[i] = i fn, (db, bdlgen) = fncptr_from_rpy_func(new_100, [], lltype.Void) bdlgen.mu.current_thread_as_mu_thread(rmu.null(rmu.MuCPtr)) fn()
def compile_rpython_mu(config): print '\n\n' print '\033[33;1m------------------------------------- rpy_mu -------------------------------------\033[0m' preload_libmu() fnp, _ = fncptr_from_rpy_func(config['rpy_fnc'], config['llarg_ts'], config['llres_t'], muemitdir=config['tmpdir'].strpath) return wrap_with_measure_func(fnp, config, 'rpy_mu')
def test_rpython_int_cmp_const_zero_ne_zero(): # these may get optimized away by Rpython compiler def int_cmp_zero_ne_zero(): if 0 != 0: return 0 else: return 1 mu_int_cmp_zero_ne_zero, _ = fncptr_from_rpy_func(int_cmp_zero_ne_zero, [], rffi.LONGLONG) assert mu_int_cmp_zero_ne_zero() == 1
def test_rpython_list_append(): def list_append(n): a = [] for i in range(0, n): a.append(i) return len(a) fn, (db, bdlgen) = fncptr_from_rpy_func(list_append, [rffi.LONGLONG], rffi.LONGLONG) bdlgen.mu.current_thread_as_mu_thread(rmu.null(rmu.MuCPtr)) assert fn(5) == 5 assert fn(10) == 10 assert fn(100) == 100
def test_quicksort(): from perftarget.quicksort import quicksort, setup, teardown fnc, (db, bdlgen) = fncptr_from_rpy_func(quicksort, [rffi.CArrayPtr(rffi.LONGLONG), lltype.Signed, lltype.Signed], lltype.Void) bdlgen.mu.current_thread_as_mu_thread(rmu.null(rmu.MuCPtr)) N = 100 arr, s, e = setup(N) lst = list(arr) fnc(arr, s, e) lst.sort() for i in range(len(lst)): assert lst[i] == arr[i] teardown(arr, s, e)
def test_rpython_int_cmp_zero(): def int_cmp_zero(a): if a > 0: return 1 elif a == 0: return 0 else: return -1 mu_int_cmp_zero, _ = fncptr_from_rpy_func(int_cmp_zero, [rffi.LONGLONG], rffi.LONGLONG) assert mu_int_cmp_zero(1) == 1 assert mu_int_cmp_zero(9223372036854775807) == 1 # assert mu_int_cmp_zero(18446744073709551615) == -1 assert mu_int_cmp_zero(0) == 0 assert mu_int_cmp_zero(-1) == -1 assert mu_int_cmp_zero(-9223372036854775808) == -1
def test_fibonacci_iterative(): def fib_iter(n): if n <= 1: return n k = 2 fib_k_2 = 0 fib_k_1 = 1 fib_k = 0 while k <= n: fib_k = fib_k_2 + fib_k_1 fib_k_2 = fib_k_1 fib_k_1 = fib_k k += 1 return fib_k fnc, (db, bdlgen) = fncptr_from_rpy_func(fib_iter, [rffi.ULONGLONG], rffi.ULONGLONG) bdlgen.mu.current_thread_as_mu_thread(rmu.null(rmu.MuCPtr)) assert fnc(rffi.cast(rffi.ULONGLONG, 20))
def wrap_with_measure_func(fnp, config, target): wrapper_config = { 'name': config['rpy_fnc'].__name__, 'target': target, 'rpy_fnc': 'fnp', 'args': ', '.join(['v%d' % i for i in range(len(config['llarg_ts']))]) } tl_config = {'gc': 'none'} wrapper = rpy_wrapper % wrapper_config exec wrapper in locals() rpy_measure_fnc = locals()['rpy_measure_%(name)s_%(target)s' % wrapper_config] fnp, _ = fncptr_from_rpy_func(rpy_measure_fnc, config['llarg_ts'], rffi.DOUBLE, backend='c', gc='none') return fnp
def test_rpython_int_eq_value(): def int_eq_value(a, b): ret = a == b return ret mu_int_eq_value, _ = fncptr_from_rpy_func(int_eq_value, [rffi.LONGLONG, rffi.LONGLONG], rffi.LONGLONG) assert mu_int_eq_value(1, 0) == 0 assert mu_int_eq_value(0, 1) == 0 assert mu_int_eq_value(1, 1) == 1 assert mu_int_eq_value(1, -1) == 0 assert mu_int_eq_value(-1, 1) == 0 assert mu_int_eq_value(-1, -1) == 1 assert mu_int_eq_value(9223372036854775807, -9223372036854775808) == 0 assert mu_int_eq_value(-9223372036854775808, 9223372036854775807) == 0
def test_fibonacci(): from perftarget.fibonacci import fib fnc, (db, bdlgen) = fncptr_from_rpy_func(fib, [rffi.ULONGLONG], rffi.ULONGLONG) bdlgen.mu.current_thread_as_mu_thread(rmu.null(rmu.MuCPtr)) fnc(rffi.cast(rffi.ULONGLONG, 20)) == 6765