Esempio n. 1
0
 def run_script(self, path):
     try:
         with open(path) as f:
             try:
                 eval_source_code(self, f.read())
                 return 0
             except Exception as e:
                 print str(e)
                 return 1
     except KeyboardInterrupt as e:
         return 1
     except Exception as e:
         print str(e)
         return 1
Esempio n. 2
0
def test_eval_plus_string(engine):
    val = eval_source_code(
        engine, """
        eval "+" ["hello", ", ", "world"]
    """)
    assert isinstance(val, Str)
    assert val.str_val == "hello, world"
Esempio n. 3
0
def test_payload_object_str_index(engine):
    val = eval_source_code(
        engine, """
        object: value {"key": {"key": "value"}}
        value object["key"]["key"]
    """)
    assert val.str_val == "value"
Esempio n. 4
0
def test_identifier_for_value(engine):
    val = eval_source_code(engine, '''
    a: value 1
    value a
    ''')
    assert isinstance(val, Int)
    assert val.int_val == 1
Esempio n. 5
0
def test_payload_array_int_index(engine):
    val = eval_source_code(
        engine, """
        array: value [[1, 2, 3]]
        value array[0][0]
    """)
    assert val.int_val == 1
Esempio n. 6
0
def test_builtin_map(engine):
    val = eval_source_code(
        engine, """
        proc "+1" eval "+" [$, 1] end
        eval "map" ["+1", [1, 2, 3]]
    """)
    vals = [el.int_val for el in val.array_val]
    assert vals == [2, 3, 4]
Esempio n. 7
0
def test_builtin_filter(engine):
    val = eval_source_code(
        engine, """
        proc "0?" eval "=" [$, 0] end
        eval "filter" ["0?", [0, 1, 0, 1]]
    """)
    vals = [el.int_val for el in val.array_val]
    assert vals == [0, 0]
Esempio n. 8
0
def test_eval_type(engine):
    val = eval_source_code(engine, """
        eval "type" 1
    """)
    assert val.str_val == 'int'
    val = eval_source_code(engine, """
        eval "type" 1.0
    """)
    assert val.str_val == 'float'
    val = eval_source_code(engine, """
        eval "type" "hello, world"
    """)
    assert val.str_val == 'str'
    val = eval_source_code(engine, """
        eval "type" true
    """)
    assert val.str_val == 'bool'
    val = eval_source_code(engine, """
        eval "type" null
    """)
    assert val.str_val == 'null'
    val = eval_source_code(engine, """
        eval "type" []
    """)
    assert val.str_val == 'array'
    val = eval_source_code(engine, """
        eval "type" {}
    """)
    assert val.str_val == 'object'
Esempio n. 9
0
def test_begin_end_has_one_statement_inside(engine):
    val = eval_source_code(
        engine, """
        begin
        value 1
        end
    """)
    assert isinstance(val, Int)
    assert val.int_val == 1
Esempio n. 10
0
def test_identifier_for_eval_source_code(engine):
    val = eval_source_code(
        engine, """
        s0: value "hello"
        s1: value ", "
        s2: value "world"
        eval "+" [s0, s1, s2]
    """)
    assert isinstance(val, Str)
    assert val.str_val == "hello, world"
Esempio n. 11
0
def test_identifier_for_begin_end_statement(engine):
    val = eval_source_code(
        engine, """
        x: begin
            value 1
        end
        value x
    """)
    assert isinstance(val, Int)
    assert val.int_val == 1
Esempio n. 12
0
def test_begin_end_has_multiple_statements(engine):
    val = eval_source_code(
        engine, """
        begin
        a: value 1
        value a
        end
    """)
    assert isinstance(val, Int)
    assert val.int_val == 1
Esempio n. 13
0
def test_iter_int(engine):
    val = eval_source_code(
        engine, """
        y: value 0
        x: iter 3
            y: eval "+" [y, x]
        end
        value y
    """)
    assert isinstance(val, Int)
    assert val.int_val == 3  # 0 + 1 + 2
Esempio n. 14
0
def test_iter_array(engine):
    val = eval_source_code(
        engine, """
        y: value 0
        x: iter [1, 2, 3]
            y: eval "+" [y, x]
        end
        value y
    """)
    assert isinstance(val, Int)
    assert val.int_val == 6  # 0 + 1 + 2 + 3
Esempio n. 15
0
def test_identifier_for_cond(engine):
    val = eval_source_code(
        engine, """
        ret: cond
            value true
                value "Gotcha."
        end
        value ret
    """)
    assert isinstance(val, Str)
    assert val.str_val == "Gotcha."
Esempio n. 16
0
def test_iter_str(engine):
    val = eval_source_code(
        engine, """
        y: value ""
        x: iter "abc"
            y: eval "+" [y, x]
        end
        value y
    """)
    assert isinstance(val, Str)
    assert val.str_val == "abc"  # "" + "a" + "b" + "c"
Esempio n. 17
0
def test_define_def_and_payload(engine):
    val = eval_source_code(
        engine, """
        proc "+1"
            eval "+" [1, $]
        end

        eval "+1" 0
    """)
    assert isinstance(val, Int)
    assert val.int_val == 1
Esempio n. 18
0
def test_basic_cond(engine):
    val = eval_source_code(
        engine, """
        cond
            value false
                value "Never executed."
            value true
                value "Gotcha."
        end
    """)
    assert isinstance(val, Str)
    assert val.str_val == "Gotcha."
Esempio n. 19
0
def test_cond_int_as_bool(engine):
    val = eval_source_code(
        engine, """
        cond
            value 1
                value "Gotcha."
            value true
                value "Never executed."
        end
    """)
    assert isinstance(val, Str)
    assert val.str_val == "Gotcha."
Esempio n. 20
0
def test_eq(engine):
    val = eval_source_code(engine, """
        eval "=" [1, 1]
    """)
    assert val.bool_val == True

    val = eval_source_code(engine, """
        eval "=" [1.0, 1.0, 1.0]
    """)
    assert val.bool_val == True

    val = eval_source_code(engine, """
        eval "=" ["hello", "hello"]
    """)
    assert val.bool_val == True

    val = eval_source_code(
        engine, """
        eval "=" ["hello", "hello, world"]
    """)
    assert val.bool_val == False
Esempio n. 21
0
def test_builtin_len(engine):
    val = eval_source_code(
        engine, """
        arr0_len: eval "len" []
        arr1_len: eval "len" [0]
        str0_len: eval "len" ""
        str1_len: eval "len" "a"
        obj0_len: eval "len" {}
        obj1_len: eval "len" {"key": "value"}
        value [arr0_len, arr1_len, str0_len, str1_len, obj0_len, obj1_len]
    """)
    lens = [el.int_val for el in val.array_val]
    assert lens == [0, 1, 0, 1, 0, 1]
Esempio n. 22
0
def test_pow(engine):
    val = eval_source_code(
        engine, """
        proc "**"
            pow: value 1
            iter $[1]
                pow: eval "*" [pow, $[0]]
            end
            value pow
        end
        eval "**" [2, 10]
    """)
    assert isinstance(val, Int)
    assert val.int_val == 1024
Esempio n. 23
0
def test_fib(engine):
    val = eval_source_code(
        engine, """
        proc "fib"
            cond
                eval "=" [$, 0]
                    value 0
                eval "=" [$, 1]
                    value 1
                value true
                    begin
                        a: eval "-" [$, 1]
                        b: eval "fib" a
                        c: eval "-" [$, 2]
                        d: eval "fib" c
                        eval "+" [b, d]
                    end
            end
        end

        eval "fib" 10
    """)
    assert isinstance(val, Int)
    assert val.int_val == 55
Esempio n. 24
0
def test_builtin_eval_value(engine):
    val = eval_source_code(engine, """
        eval "eval" "value 1"
    """)
    assert val.int_val == 1
Esempio n. 25
0
 def run_macro_code(self, source_code):
     return eval_source_code(self, source_code)
Esempio n. 26
0
def test_empty_begin_end_statement(engine):
    val = eval_source_code(engine, """
        begin
        end
    """)
    assert isinstance(val, Null)
Esempio n. 27
0
def test_value_object_with_kv(engine):
    val = eval_source_code(engine, 'value {"key": "value"}')
    assert isinstance(val, Object)
    items = val.object_val.items()
    assert items[0][0] == "key"
    assert items[0][1].str_val == "value"
Esempio n. 28
0
def test_div_float(engine):
    val = eval_source_code(engine, """
        eval "/" [3, 2.0]
    """)
    assert val.float_val == 1.5
Esempio n. 29
0
def test_value_str_with_value_inside(engine):
    val = eval_source_code(engine, r"""
        value "\"hello, world\""
    """)
    assert val.str_val == r'\"hello, world\"'
Esempio n. 30
0
def test_value_object(engine):
    val = eval_source_code(engine, 'value {}')
    assert isinstance(val, Object)
    assert val.object_val == {}