Example #1
0
def test_not_equal():
    src = """
    func main() {
        var a = 1;
        println(a != 1);
    }
    """
    assert run_capture_stdout(src) == "False\n"
Example #2
0
def test_rand_range():
    src = """
    func main() {
        var a: number = rand(1,4);
        println(a);
    }
    """
    assert run_capture_stdout(src) in ["1\n", "2\n", "3\n", "4\n"]
Example #3
0
def test_str_index():
    src = """
    func main() {
        var a: string = "Hello World";
        println(a[4]);
    }
    """
    assert run_capture_stdout(src) == "o\n"
Example #4
0
def test_str_index_negative():
    src = """
    func main() {
        var a: string = "Hello World";
        println(a[-1]);
    }
    """
    assert run_capture_stdout(src) == "d\n"
Example #5
0
def test_access_zeroed_array():
    src = """
    func main() {
        var a: array[100];
        println(a[40]);
    }
    """
    assert run_capture_stdout(src) == "0\n"
Example #6
0
def test_rand_max():
    src = """
    func main() {
        var a: number = rand(2);
        println(a);
    }
    """
    assert run_capture_stdout(src) in ["2\n", "1\n", "0\n"]
Example #7
0
def test_smaller_or_equal():
    src = """
    func main() {
        var a = 1;
        println(a <= 2);
        println(a <= 0);
    }
    """
    assert run_capture_stdout(src) == "True\nFalse\n"
Example #8
0
def test_arithmetic_assignment_sub():
    src = """
    func main() {
        var a = 5;
        a -= 10;
        println(a);
    }
    """
    assert run_capture_stdout(src) == "-5\n"
Example #9
0
def test_arithmetic_sub_negative():
    src = """
    func main() {
        var a = 5;
        a = a--1;
        println(a);
    }
    """
    assert run_capture_stdout(src) == "6\n"
Example #10
0
def test_arithmetic_add_negative_no_space():
    src = """
    func main() {
        var a = 5;
        a = a + -1;
        println(a);
    }
    """
    assert run_capture_stdout(src) == "4\n"
Example #11
0
def test_arithmetic_mult():
    src = """
    func main() {
        var a = 5;
        a = a * 5;
        println(a);
    }
    """
    assert run_capture_stdout(src) == "25\n"
Example #12
0
def test_str_dynamic_index():
    src = """
    func main() {
        var a: string = "Hello World";
        var i: number = 3
        println(a[i]);
    }
    """
    assert run_capture_stdout(src) == "l\n"
Example #13
0
def test_string_concat_multi():
    src = """
    func main() {
        var a = "Hello";
        a = a + " " + "World";
        println(a);
    }
    """
    assert run_capture_stdout(src) == "Hello World\n"
Example #14
0
def test_func_call_2_params():
    src = """
    func hello(a: string, b: string): string {
        return "Sup";
    }

    func main() {
        println(hello("Hello", "World"));
    }
    """
    assert run_capture_stdout(src) == "Sup\n"
Example #15
0
def test_implicit_number_return():
    src = """
    func add(a: number, b: number) {
        a + b;
    }

    func main() {
        println(add(5, 6));
    }
    """
    assert run_capture_stdout(src) == "11\n"
Example #16
0
def test_implicit_string_return():
    src = """
    func hello(): string {
        "Hello";
    }

    func main() {
        println(hello());
    }
    """
    assert run_capture_stdout(src) == "Hello\n"
Example #17
0
def test_cursed_arrays():
    src = """
    func get_item(i: number) {
        if (i == 0) {
            return a;
        }

        if (i == 1) {
            return b;
        }

        if (i == 2) {
            return c;
        }
    }

    func set_item(i: number, value: number) {
        if (i == 0) {
            a = value;
        }

        if (i == 1) {
            b = value;
        }

        if (i == 2) {
            c = value;
        }
    }

    func main() 
    {
        var max: number = 3;
        var a: number = 0;
        var b: number = 0;
        var c: number = 0;
        var i: number = 0;

        // Set array
        while (i < max) {
            set_item(i, i + 42);
            i = i + 1;
        }

        // Print array
        i = 0;
        while (i < max) {
            println(get_item(i));
            i = i + 1;
        }
    }
    """
    assert run_capture_stdout(src) == "42\n43\n44\n"
Example #18
0
def test_nested_call_hell():
    src = """
    func a(n: number) { return b(n + 1); }
    func b(n: number) { return c(n + 1); }
    func c(n: number) { return d(n + 1); }
    func d(n: number) { return n + 1; }

    func main() {
        print(a(4));
    }
    """
    assert run_capture_stdout(src) == "8"
Example #19
0
def test_init_array_with_value():
    src = """
    func main() {
        var a: array[100] = "[->+<]";
        print(a[0]);
        print(a[1]);
        print(a[2]);
        print(a[3]);
        print(a[4]);
        print(a[5]);
    }
    """
    assert run_capture_stdout(src) == "[->+<]"
Example #20
0
def test_increment_in_parent_scope():
    src = """
    func main() {
        var a = 0;
        incr_a();
        // This will print '10'.
        println(a);
    }

    func incr_a() {
        a = a + 1;
        a = a + 9;
    }
    """
    assert run_capture_stdout(src) == "10\n"
Example #21
0
def test_string_concat_func():
    src = """
    func say_hello_to(name: string): string {
        return "Hello " + name;
    }

    func ask(question: string): string {
        return "The computer asks you: " + question;
    }

    func main() {
        println(say_hello_to("Kereltje") + "\\n" + ask("How is the weather?"));
    }
    """
    assert run_capture_stdout(src) == "15\n"
Example #22
0
def test_set_array():
    src = """
    func main() {
        var a: array[100];
        a[40] = "H";
        a[41] = "e";
        a[42] = "l";
        a[43] = "l";
        a[44] = "o";

        var i: number = 40;
        while (i <= 44) {
            print(a[i]);
            i = i + 1;
        }
    }
    """
    assert run_capture_stdout(src) == "Hello"
Example #23
0
def test_increment_in_scope():
    src = """
    func main() {
        var a = 0;
        incr_a();
        // This will print '0'.
        println("main:");
        println(a);
    }

    func incr_a() {
        var a = 0;
        a = a + 1;
        a = a + 9;
        println("incr_a:");
        println(a);
    }
    """
    assert run_capture_stdout(src) == "incr_a:\n10\nmain:\n0\n"
Example #24
0
def test_multi_scope():
    src = """
    func main() {
        var a = "Root";
        {
            var a = "First";
            println(a);
        }
        {
            var a = "Second";
            println(a);
        }
        {
            println(a);
        }
        println(a);
    }
    """
    assert run_capture_stdout(src) == "First\nSecond\nRoot\nRoot\n"
Example #25
0
def test_odd_even():
    src = """
    func odd(n:number):bool{
    if(n==0){return false;}
    return even(n - 1);}

    func even(n: number): bool {
        if (n == 0) { return true; }
        return odd(n - 1);
    }

    func main() {
        println(odd(4));
        println(odd(5));
        println(even(4));
        println(even(5));
    }
    """
    assert run_capture_stdout(src) == "false\ntrue\ntrue\nfalse\n"
Example #26
0
def test_array_len():
    src = """
    func array_length(a: array) {
        var len: number = 0;
        while (true) {
            # We can't inline the 'a[len]' line in the condition, because this language is shit.
            var c = a[len];
            if (c == 0) {
                return len;
            }
            len = len + 1;
        }
    }

    func main() {
        var arr: array[300] = "Hello world";
        println(array_length(arr));
    }
    """
    assert run_capture_stdout(src) == "11\n"
Example #27
0
def test_manual_division():
    src = """
    func division(a: number, b: number): number {
        var c: number = 0;
        a = a - b;
        while (a >= 0) {
            a = a - b;
            c = c + 1;
        }
        return c;
    }

    func main() {
        println(division(10,1));
        println(division(10,2));
        println(division(10,3));
        println(division(10,10));
        println(division(10,20));
    }
    """
    assert run_capture_stdout(src) == "10\n5\n3\n1\n0\n"
Example #28
0
def test_brainfuck():
    src = """
    func array_length(a: array) {
        var len: number = 0;
        while (true) {
            # We can't inline the 'a[len]' line in the condition.
            var c = a[len];
            if (c == 0) {
                return len;
            }
            len = len + 1;
        }
    }

    func main() {
        var program: array[300] = "++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.";
        var cells: array[30000];
        var op_ptr: number = 0;
        var cell_ptr : number = 0;

        var len = array_length(program);
        //print("Program length: ");
        //println(len);

        while (op_ptr < len) {
            var command = program[op_ptr];

            if (command == ">") {
                cell_ptr = cell_ptr + 1;
            }

            if (command == "<") {
                cell_ptr = cell_ptr - 1;
            }

            if (command == "+") {
                var t = cells[cell_ptr];
                t = t + 1;

                if (t > 255) {
                    t = 0;
                }

                cells[cell_ptr] = t;
            }

            if (command == "-") {
                var t = cells[cell_ptr];
                t = t - 1;

                if (t < 0) {
                    t = 255;
                }

                cells[cell_ptr] = t;
            }

            if (command == ".") {
                print(cells[cell_ptr]);
            }
            
            // command == "," is not supported, because we don't have a stdin

            if (command == "[") {
                var t = cells[cell_ptr];
                if (t == 0) {
                    # Not implemented
                    return 1;
                }
            }

            if (command == "]") {
                var t = cells[cell_ptr];
                if (t != 0) {
                    # Not implemented
                    return 1;
                }
            }

            op_ptr = op_ptr + 1;
        }
    }
    """
    assert run_capture_stdout(src) == "Hello World!"