示例#1
0
def test_str_repr():
    ll = list(range(100))
    shuffle(ll)
    v = vec(ll)
    assert "vec(%s)" % str(ll) == str(v)
    assert str(v) == repr(v)
    assert str(v[:]) == str(v)
    assert str(vec()) == "vec()"
示例#2
0
def test_hash2():
    v0 = vec()
    assert isinstance(hash(v0), int)
    v1 = vec()
    assert hash(v0) == hash(v1)
    vals = list(range(10))
    shuffle(vals)
    v0 = vec(vals)
    v1 = vec(vals)
    assert hash(v0) == hash(v1)
示例#3
0
def test_hash():
    assert isinstance(hash(vec()), int)
    assert hash(vec()) == hash(())
    # TODO: FIXME: why don't these hash equally?  We implemented vec's __hash__
    # to be the same as tuple's __hash__...
    # assert hash(vec(range(10))) == hash(tuple(range(10)))

    assert hash(vec([()])) # vec of hashable type.

    v = vec([[1]]) # vec of unhashable type.
    with pytest.raises(TypeError):
        hash(v)
示例#4
0
def test_iteration():
    N = 32**3
    a = vec(range(N))
    b = 0
    for i in a:
        b += i
    assert b == N * (N - 1) / 2
示例#5
0
def test_transient_persistent_etc():
    pv = vec()
    tv = pv.transient()
    pv2 = tv.persistent()
    with pytest.raises(RuntimeError):
        len(tv)
    tv2 = pv2.transient()
示例#6
0
def test_transient_conj():
    N = 32**3
    t = vec().transient()
    for i in xrange(N):
        assert len(t) == i
        t = t.conj(i)
    p = t.persistent()
    assert len(p) == N
示例#7
0
def test_cons():
    # Like list.append, except returns new vector w/ structural sharing.
    v0 = vec()
    assert len(v0) == 0
    v1 = v0.cons(1)
    assert len(v0) == 0
    assert len(v1) == 1
    assert v1[0] == 1
示例#8
0
def test_cons_128():
    N = 128
    v = vec()
    for i in xrange(N):
        v = v.cons(i)
    assert len(v) == N
    for i in xrange(N):
        assert v[i] == i
示例#9
0
def test_index():
    ll = list(range(32**2))
    shuffle(ll)
    v = vec(ll)
    for i in ll:
        assert ll.index(i) == v.index(i)
    with pytest.raises(ValueError):
        v.index(len(ll))
示例#10
0
def test_count():
    ll = [1, 2, 2, 3, 3, 3]
    shuffle(ll)
    a = vec(ll)
    assert a.count(1) == ll.count(1)
    assert a.count(2) == ll.count(2)
    assert a.count(3) == ll.count(3)
    assert a.count('a') == ll.count('a')
示例#11
0
def test_cons_large():
    N = 32**3 + 1
    v = vec()
    for i in xrange(N):
        v = v.cons(i)
    assert len(v) == N
    for i in xrange(N):
        assert v[i] == i
示例#12
0
def test_transient():
    v = vec(range(100))
    trans = TransientVector.from_persistent(v)
    assert len(trans) == len(v)
    v2 = trans.persistent()
    assert v == v2
    with pytest.raises(RuntimeError):
        len(trans)
示例#13
0
def test_conj_large():
    N = 1048576 + 32
    tv = vec().transient()
    for i in xrange(N):
        tv = tv.conj(i)
    v = tv.persistent()
    assert len(v) == N
    for i in xrange(N):
        assert v[i] == i
示例#14
0
def test_slice():
    ll = list(range(100))
    l2 = ll[5:10]
    v = vec(ll)
    v2 = v[5:10]
    assert len(l2) == len(v2)
    for a, b in zip(l2, v2):
        assert a == b
    with pytest.raises(NotImplementedError):
        v[::2]
示例#15
0
def test_assoc():
    # TODO: FIXME: test with a big vector, bigger than 32, 32**2, 32**3, etc...
    N = 32**3
    a = vec(range(N))
    b = a.assoc(0, 10)
    assert a[0] == 0
    assert b[0] == 10
    assert a[1] == b[1]
    assert a[2] == b[2]
    c = b.assoc(1, 5)
    assert c[1] == 5
示例#16
0
def test_containment():
    N = 32**2
    a = vec(range(N))
    for i in xrange(N):
        assert i in a
    assert N not in a
示例#17
0
def test_creation_from_generator():
    N = 100
    v = vec(i for i in xrange(N))
    assert len(v) == N
示例#18
0
def test_equality():
    assert vec() == vec()
    assert vec(range(100)) == vec(range(100))
    assert vec(range(100)) != range(100)
    assert vec([1, 2, 4]) != vec([1, 2, 3])
示例#19
0
def test_boolean():
    assert bool(vec()) == False
    assert bool(vec([])) == False
    assert bool(vec([0])) == True
示例#20
0
def test_creation_large():
    N = 32**3 + 1
    v_range = vec(range(N))
    v_tuple = vec(tuple(xrange(N)))
    v_gen = vec(i for i in xrange(N))
    assert v_range == v_gen == v_tuple
示例#21
0
def test_creation_non_empty():
    v = vec([1, 2, 3])
    assert len(v) == 3
示例#22
0
def test_listify_and_tupleify():
    N = 100
    assert list(vec(range(N))) == list(range(N))
    assert list(vec()) == []
    assert tuple(vec(range(N))) == tuple(range(N))
    assert tuple(vec()) == ()
示例#23
0
def test_transient_assoc():
    N = 32**3
    t = vec(range(N)).transient()
    for i in xrange(0, N, N//100):
        t = t.assoc(i, None)
        assert t[i] == None
示例#24
0
def test_indexing_pos():
    v = vec([1, 2, 3])
    assert v[0] == 1
    assert v[1] == 2
    assert v[2] == 3
示例#25
0
def test_creation_empty():
    v = vec()
    assert len(v) == 0
    w = vec([])
    assert len(w) == 0
示例#26
0
def test_iteration_empty():
    a = vec()
    for i in a:
        assert False