Exemple #1
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]
Exemple #2
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
Exemple #3
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())
Exemple #4
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
Exemple #5
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()
Exemple #6
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))
Exemple #7
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