Example #1
0
def test_product_name():
    r = hd.Range(10)
    p = hd.Product((r, r), name="TestProduct")
    assert p.name == "TestProduct"

    r = hd.Range(10)
    p = hd.Product((r, r), name="TestUProduct", unordered=True)
    assert p.name == "TestUProduct"

    p = hd.NamedProduct([("a", r), ("b", r * r)], name="TestNamedProduct")
    assert p.name == "TestNamedProduct"
Example #2
0
def test_uproduct_steps():

    items = (1, 2, 7, 8)
    a = hd.Range(10).filter(lambda x: x in items)
    p = hd.Product((a, a), unordered=True)

    assert p.size == 45

    for i in xrange(9):
        assert list(p.iterate_steps(0, i)) == []
    assert list(p.iterate_steps(0, 10)) == [(2, 1)]
    assert list(p.iterate_steps(0, 14)) == [(2, 1)]
    assert list(p.iterate_steps(0, 15)) == [(2, 1), (7, 1)]
    assert list(p.iterate_steps(0, 16)) == [(2, 1), (7, 1), (8, 1)]
    assert list(p.iterate_steps(0, 21)) == [(2, 1), (7, 1), (8, 1)]
    assert list(p.iterate_steps(0, 22)) == [(2, 1), (7, 1), (8, 1), (7, 2)]
    assert list(p.iterate_steps(0, 23)) == [(2, 1), (7, 1), (8, 1), (7, 2),
                                            (8, 2)]
    assert list(p.iterate_steps(0, 42)) == [(2, 1), (7, 1), (8, 1), (7, 2),
                                            (8, 2)]
    assert list(p.iterate_steps(0, 43)) == [(2, 1), (7, 1), (8, 1), (7, 2),
                                            (8, 2), (8, 7)]
    assert list(p.iterate_steps(0, 45)) == [(2, 1), (7, 1), (8, 1), (7, 2),
                                            (8, 2), (8, 7)]

    assert list(p.iterate_steps(6, 16)) == [(2, 1), (7, 1), (8, 1)]
    assert list(p.iterate_steps(9, 16)) == [(2, 1), (7, 1), (8, 1)]
    assert list(p.iterate_steps(10, 16)) == [(7, 1), (8, 1)]
    assert list(p.iterate_steps(14, 16)) == [(7, 1), (8, 1)]
    assert list(p.iterate_steps(15, 16)) == [(8, 1)]
Example #3
0
def test_uproduct_iterate():
    r1 = hd.Range(4)
    p = hd.Product((r1, r1), unordered=True)

    result = list(p)
    assert set(result) == {(1, 0), (2, 0), (3, 0), (2, 1), (3, 1), (3, 2)}
    assert len(result) == p.size

    p = hd.Product((r1, r1, r1), unordered=True)
    result = list(p)
    assert set(result) == {(2, 1, 0), (3, 1, 0), (3, 2, 0), (3, 2, 1)}
    assert len(result) == p.size

    p = hd.Product((r1, r1, r1, r1), unordered=True)
    result = list(p)
    assert set(result) == {(3, 2, 1, 0)}
    assert len(result) == p.size
Example #4
0
def test_product_iterate():
    r1 = hd.Range(4)
    r2 = hd.Range(2)
    p = hd.Product((r1, r1, r2))
    expected = list(itertools.product(range(4), range(4), range(2)))

    assert set(p) == set(expected)
    assert len(list(p)) == len(expected)
    assert p.size == len(expected)
Example #5
0
def test_product_generate():
    r1 = hd.Range(4)
    r2 = hd.Range(2)
    p = hd.Product((r1, r1, r2))

    result = list(p.generate(200))
    for r in result:
        assert len(r) == 3
        assert 0 <= r[0] < 4
        assert 0 <= r[1] < 4
        assert 0 <= r[2] < 2
Example #6
0
 def test_for_size(cache_size):
     r = hd.Range(10000)
     p = hd.Product((r, r), unordered=True, cache_size=cache_size)
     result = list(p.generate(size))
     cache_pairs = (cache_size * (cache_size - 1)) / 2
     for i in xrange(size / cache_pairs):
         values = set()
         for a, b in result[i * cache_pairs:(i + 1) * cache_pairs]:
             values.add(a)
             values.add(b)
         assert len(values) <= cache_pairs
Example #7
0
def test_uproduct_iter_set():
    r = hd.Range(10)
    p = hd.Product((r, r), unordered=True)

    a = list(p)
    for i in xrange(p.size):
        it = p.create_iter(i)
        result = list(it)
        assert a[i:] == result

    r = hd.Range(899)
    p = hd.Product((r, r), unordered=True)

    a = list(p)
    x = 43211
    it = p.create_iter(x)
    assert list(it) == a[x:]

    x = 403388
    it = p.create_iter(x)
    assert list(it) == a[x:]
Example #8
0
    def test_for_size(cache_size):
        r = hd.Range(10000)
        p = hd.Product((r, r), cache_size=cache_size)
        result = list(p.generate(size))

        cache_pairs = cache_size * cache_size
        for i in xrange(size / cache_pairs):
            values1 = set()
            values2 = set()
            for a, b in result[i * cache_pairs:(i + 1) * cache_pairs]:
                values1.add(a)
                values2.add(b)
            assert len(values1) <= cache_size and len(values2) <= cache_size
Example #9
0
def test_domain_filter():
    def fn(x):
        return x > 2 and x < 5

    r = hd.Range(6)
    d = r.filter(fn)
    result = list(d)
    assert result == [3, 4]

    result = list(d.generate(5))
    assert len(result) == 5
    for x in result:
        assert x in [3, 4]

    assert d.filtered
    assert not r.filtered
    assert d.size == 6

    p = d * d
    result = list(p)
    assert set(result) == {(3, 3), (4, 3), (3, 4), (4, 4)}

    assert p.filtered
    assert not (r * r).filtered

    assert hd.Sequences(d, 2).filtered
    assert not hd.Sequences(r, 2).filtered

    assert not hd.Mappings(d, r).filtered
    assert hd.Mappings(r, d).filtered
    assert not hd.Mappings(r, r).filtered

    assert hd.Product((d, d), unordered=True).filtered
    assert not hd.Product((r, r), unordered=True).filtered

    result = list(hd.Product((d, d), unordered=True))
    assert set(result) == {(4, 3)}
Example #10
0
def test_domain_map():
    def fn(x):
        return (x + 1) * 10

    d = hd.Range(5).map(fn)
    result = list(d)
    assert result == [10, 20, 30, 40, 50]

    result = list(d.generate(10))
    for x in result:
        assert x in [10, 20, 30, 40, 50]

    result = list(hd.Product((d, d), unordered=True))
    assert set(result) == {(20, 10), (30, 10), (40, 10), (50, 10), (30, 20),
                           (40, 20), (50, 20), (40, 30), (50, 30), (50, 40)}
    assert d.size == 5
    assert not d.filtered
    assert d.step_jumps
Example #11
0
def test_uproduct_steps2():
    a = hd.Range(3).filter(lambda x: x != 2)
    b = (a * a).filter(lambda x: x[0] + x[1] > 0)
    c = hd.Product((b, b), unordered=True)

    assert list(b) == [(0, 1), (1, 0), (1, 1)]
    assert list(c.iterate_steps(0, 9)) == []
    assert list(c.iterate_steps(0, 10)) == [((1, 0), (0, 1))]
    assert list(c.iterate_steps(0, 11)) == [((1, 0), (0, 1)), ((1, 1), (0, 1))]
    assert set(c.iterate_steps(0, 36)) == \
        set((((1, 0), (0, 1)), ((1, 1), (1, 0)), ((1, 1), (0, 1))))

    assert list(c.iterate_steps(8, 9)) == []
    assert list(c.iterate_steps(9, 10)) == [((1, 0), (0, 1))]
    assert list(c.iterate_steps(0, 11)) == [((1, 0), (0, 1)), ((1, 1), (0, 1))]
    assert list(c.iterate_steps(14, 20)) == []
    assert list(c.iterate_steps(14, 26)) == [((1, 1), (1, 0))]
    assert set(c.iterate_steps(8, 36)) == \
        set((((1, 0), (0, 1)), ((1, 1), (1, 0)), ((1, 1), (0, 1))))
Example #12
0
def test_canonical_product():
    ax = USet(3, "a")
    a0, a1, a2 = ax.all()

    bx = USet(2, "b")
    b0, b1 = bx.all()

    result = list(hd.Product((ax, )).create_cn_iter())
    assert result == [(a0, )]

    result = list((ax * ax).create_cn_iter())
    assert result == [(a0, a0), (a0, a1)]

    result = list((ax * ax * ax).create_cn_iter())
    assert result == [(a0, a0, a0), (a0, a0, a1), (a0, a1, a0), (a0, a1, a1),
                      (a0, a1, a2)]

    result = list((bx * bx * bx).create_cn_iter())
    assert result == [(b0, b0, b0), (b0, b0, b1), (b0, b1, b0), (b0, b1, b1)]

    result = list((ax * bx * bx).create_cn_iter())
    assert result == [(a0, b0, b0), (a0, b0, b1)]
Example #13
0
def test_product_empty():
    p = hd.Product(())
    assert list(p) == [()]