Beispiel #1
0
def test_filter_empty():
    r = Range(5)
    q = Qit()

    f = Function("filter").returns(Bool()).takes(r.type, "r").code("return false;")

    assert len(q.run(r.iterate().filter(f))) == 0
Beispiel #2
0
def test_filter_even():
    r = Range(5)
    q = Qit()

    f = Function("filter").returns(Bool()).takes(r.type, "r").code("return r % 2 == 0;")

    assert q.run(r.iterate().filter(f)) == [0, 2, 4]
Beispiel #3
0
def test_range_function_iterate():
    c = Qit()

    x = Variable(Int(), "x")
    r = Range(x).iterate().to_vector()
    f = r.make_function()
    assert [[], [0], [0,1], [0,1,2]] == c.run(Range(4).iterate().map(f))
Beispiel #4
0
def test_product_variables():
    x = Variable(Int(), "x")
    y = Variable(Int(), "x")

    t = Range(x) * Range(y)
    assert set() == set(t.get_variables())
    assert {x, y} == set(t.iterate().get_variables())
    assert {x, y} == set(t.generate().get_variables())
Beispiel #5
0
def test_filter_map():
    r = Range(5)
    q = Qit()

    f = Function("f").returns(Int()).takes(Int(), "r").code("return r * 2;")
    g = Function("g").returns(Bool()).takes(Int(), "x").code("return x == 4;")
    h = Function("h").returns(Int()).takes(Int(), "r").code("return r + 1;")

    q.run(r.iterate().map(f).filter(g).map(h)) == 5
Beispiel #6
0
def test_build_range():
    r = Range(10)
    builder = CppBuilder()
    i = r.iterate()

    v = i.make_iterator(builder)
    t = i.get_iterator_type(builder)

    assert "{} {}(10);\n".format(t, v) == builder.writer.get_string()
Beispiel #7
0
def test_product_values():
    ctx = Qit()
    p = Range(4) * Range(10)
    v = p.values((0, 0), (1, 7), (3, 2))

    result = ctx.run(v.iterate())
    assert [(0, 0), (1, 7), (3, 2)] == result

    result = ctx.run(v.generate().take(100))
    assert all(i in ((0, 0), (1, 7), (3, 2)) for i in result)
Beispiel #8
0
def test_function_in_function():
    c = Qit()
    x = Variable(Int(), "x")
    r = Range(x).iterate()
    f = r.make_function()

    r2 = Range(x).iterate().map(f)
    f = r2.make_function((x,))

    r3 = Range(x).iterate().map(f)
    assert [[], [[]], [[], [0]], [[], [0], [0,1]]] == c.run(r3, args={ x: 4 })
Beispiel #9
0
def test_range_indexer():
    ctx = Qit()
    r = Range(10)
    ctx.run(r.indexer(5)) == 5

    start = Variable(Int(), "start")
    end = Variable(Int(), "end")
    step = Variable(Int(), "step")
    r = Range(start, end, step)
    result = ctx.run(r.iterate().map(r.indexer), args={"start" : 5, "end": 21, "step" : 3})
    assert result == list(range(6))
Beispiel #10
0
def test_outer_variables_in_fn_iterator():
    c = Qit()
    x = Variable(Int(), "x")
    y = Variable(Int(), "y")

    plus_1 = Function().takes(Int(), "x").returns(Int()).code("return x + 1;")
    P = Range(plus_1(x)) * Range(y)
    f = P.iterate().to_vector().make_function((x,))

    result = c.run(Range(3).iterate().map(f), args={ y: 2})
    assert [[(0, 0), (0, 1)],
            [(0, 0), (1, 0), (0, 1), (1, 1)],
            [(0, 0), (1, 0), (2, 0), (0, 1), (1, 1), (2, 1)]] == result
Beispiel #11
0
def test_range_function_generate():
    f = Function().takes(Int(), "a").returns(Int()).code("return a + 1;")
    c = Qit()

    x = Variable(Int(), "x")
    r = Range(f(x)).generate().take(2).to_vector()
    f = r.make_function()
    result = c.run(Range(10).iterate().map(f))

    assert len(result) == 10
    for i, r in enumerate(result):
        assert len(r) == 2
        assert 0 <= r[0] < i+1
Beispiel #12
0
def test_range_print_all():
    expr = Range(10).iterate()
    c = Qit()
    c.run(expr.print_all())
    assert list(range(10)) == c.run(expr.collect())