예제 #1
0
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
예제 #2
0
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()
예제 #3
0
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
예제 #4
0
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
예제 #5
0
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()
예제 #6
0
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()
예제 #7
0
파일: perfcmp.py 프로젝트: jstnlef/zebu-vm
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')
예제 #8
0
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
예제 #9
0
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
예제 #10
0
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)
예제 #11
0
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
예제 #12
0
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))
예제 #13
0
파일: perfcmp.py 프로젝트: jstnlef/zebu-vm
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
예제 #14
0
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
예제 #15
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