Exemplo n.º 1
0
def test_fn_args(capfd):
    frame = interpret_source('''
    function foo(x) {
        print(x);
    };
    foo(10);
    ''')
    out, _ = capfd.readouterr()
    assert out == '10.0\n'
    assert frame.names == ['foo']
    assert len(frame.vars) == 1
    assert frame.test_valuestack == []

    frame = interpret_source('''
    function foo(x, y) {
        print(x + y);
    };
    x = 20;
    foo(10, x);
    ''')
    out, _ = capfd.readouterr()
    assert out == '30.0\n'
    assert frame.names == ['foo', 'x']
    assert len(frame.vars) == 2
    assert frame.test_valuestack == []
Exemplo n.º 2
0
def test_scope():
    frame = interpret_source('''
    x = 10;
    function s() {
        return x;
    };
    y = s();
    ''')
    assert frame.names == ['x', 's', 'y']
    assert frame.vars[2] == W_FloatObject(10.0)

    frame = interpret_source('''
    g = 30;
    function s() {
        g = 10;
        function inner() {
            return g;
        };
        return inner;
    };
    function scoped() {
        g = 20;
        inner = s();
        return inner();
    };

    y = scoped();
    ''')
    assert frame.names == ['g', 's', 'scoped', 'y']
    assert frame.vars[3] == W_FloatObject(10.0)
Exemplo n.º 3
0
def test_if():
    frame = interpret_source('''
    if (0) {
        x = 10;
    }''')
    assert frame.names == ['x']
    assert frame.vars == [None]
    assert frame.test_valuestack == []

    frame = interpret_source('''
    if (1) {
        x = 10;
    }''')
    assert frame.names == ['x']
    assert frame.vars == [W_FloatObject(10.0)]
    assert frame.test_valuestack == []
Exemplo n.º 4
0
def test_binary_add():
    frame = interpret_source('''
    x = 1 + 2.5;
    ''')
    assert frame.names == ['x']
    assert frame.vars == [W_FloatObject(3.5)]
    assert frame.test_valuestack == []
Exemplo n.º 5
0
def test_load_variable():
    frame = interpret_source('''
    x = 2.71;
    y = x;
    ''')
    assert frame.test_valuestack == []
    assert frame.names == ['x', 'y']
    assert frame.vars == [W_FloatObject(2.71), W_FloatObject(2.71)]
Exemplo n.º 6
0
def test_fn_noop():
    frame = interpret_source('''
    function foo() {};
    foo();
    ''')
    assert frame.names == ['foo']
    assert len(frame.vars) == 1
    assert frame.test_valuestack == []
Exemplo n.º 7
0
def test_return():
    frame = interpret_source('''
    function const() {
        return 3.14;
    };
    z = const();
    ''')
    assert frame.names == ['const', 'z']
    assert frame.vars[1] == W_FloatObject(3.14)

    frame = interpret_source('''
    function two(x) {
        return x * 2;
    };
    z = two(two(11));
    ''')
    assert frame.names == ['two', 'z']
    assert frame.vars[1] == W_FloatObject(44)
Exemplo n.º 8
0
def test_while_loops():
    frame = interpret_source('''
    x = 0;
    while (x < 10) {
        x = x + 1;
    }
    ''')
    assert frame.names == ['x']
    assert frame.vars == [W_FloatObject(10.0)]
    assert frame.test_valuestack == []
Exemplo n.º 9
0
def test_while():
    frame = interpret_source('''
    while (0) {
        x = 10;
    }''')
    assert frame.names == ['x']
    assert frame.vars == [None]
    assert frame.test_valuestack == []

    frame = interpret_source('''
    x = 1;
    y = 10;
    while (x) {
        x = 0;
        y = 100;
    }''')
    assert frame.names == ['x', 'y']
    assert frame.vars == [W_FloatObject(0.0), W_FloatObject(100.0)]
    assert frame.test_valuestack == []
Exemplo n.º 10
0
def test_fn_print(capfd):
    frame = interpret_source('''
    function foo() {
        print(1);
    };
    foo();
    ''')
    out, _ = capfd.readouterr()
    assert out == '1.0\n'
    assert frame.names == ['foo']
    assert len(frame.vars) == 1
    assert frame.test_valuestack == []
Exemplo n.º 11
0
def test_arithmetic_expressions():
    frame = interpret_source('''
    x = 10;
    y = 4 + x * 2;
    z = (x + y) / x + 3;
    foo = y % 5 + y % 1 + y % 2;
    ''')
    x = 10.0
    y = 4 + x * 2
    z = (x + y) / x + 3
    foo = y % 5 + y % 1 + y % 2
    assert frame.names == ['x', 'y', 'z', 'foo']
    assert frame.vars == map(W_FloatObject, [x, y, z, foo])
    assert frame.test_valuestack == []
Exemplo n.º 12
0
def test_binary_bool():
    for binary_op, check_fn in [
            ('<', lambda x, y: x < y),
            ('==', lambda x, y: x == y),
    ]:
        for x, y in [(1.0, 2.5), (1.0, 1.0), (1.0, 1.1)]:
            frame = interpret_source('''
            x = %s;
            y = %s;
            res = x %s y;
            ''' % (x, y, binary_op))
            assert frame.names == ['x', 'y', 'res']
            assert frame.vars == [
                W_FloatObject(x), W_FloatObject(y),
                W_BoolObject(check_fn(x, y))]
            assert frame.test_valuestack == []
Exemplo n.º 13
0
def test_recursion():
    frame = interpret_source('''
    function fib(x) {
        if (x < 3) {
            return 1;
        } else {
            return fib(x - 1) + fib(x - 2);
        }
    };
    f1 = fib(1);
    f2 = fib(2);
    f3 = fib(3);
    f4 = fib(4);
    f10 = fib(10);
    ''')
    assert frame.names == ['fib', 'f1', 'f2', 'f3', 'f4', 'f10']
    assert frame.vars[1] == W_FloatObject(1.0)
    assert frame.vars[2] == W_FloatObject(1.0)
    assert frame.vars[3] == W_FloatObject(2.0)
    assert frame.vars[4] == W_FloatObject(3.0)
    assert frame.vars[5] == W_FloatObject(55.0)
Exemplo n.º 14
0
def test_dicard_top():
    frame = interpret_source('2.71;')
    assert frame.test_valuestack == []
    assert frame.vars == []
Exemplo n.º 15
0
def test_assignment():
    frame = interpret_source('x = 2.71;')
    assert frame.test_valuestack == []
    assert frame.vars == [W_FloatObject(2.71)]
Exemplo n.º 16
0
def test_print(capfd):
    frame = interpret_source('print(3.78);')
    out, _ = capfd.readouterr()
    assert out == '3.78\n'
    assert frame.test_valuestack == []