Пример #1
0
def test_without_many():
    HashTable = make_persistent_hash_type()
    acc = HashTable.EMPTY

    for i in range(256):
        acc = acc.assoc(i, i)

    acc = acc.without_many(range(256))
    assert len(acc) == 0
Пример #2
0
def test_without_many():
    HashTable = make_persistent_hash_type()
    acc = HashTable.EMPTY

    for i in range(256):
        acc = acc.assoc(i, i)

    acc = acc.without_many(range(256))
    assert len(acc) == 0
Пример #3
0
def test_persistent_hash_collisions2():
    HashTable = make_persistent_hash_type(hashfun=lambda x: r_uint(hash(x)) % 8)
    acc = HashTable.EMPTY

    for i in range(2048):
        validate_persistent_hash(acc)
        acc = acc.assoc(i % 128, i)

    assert len(acc) == 128
    assert len(list(acc.iteritems())) == 128
    for k, v in acc.iteritems():
        assert acc.val_at(k, None) is v
Пример #4
0
def test_persistent_hash_collisions2():
    HashTable = make_persistent_hash_type(hashfun=lambda x: r_uint(hash(x)) % 8)
    acc = HashTable.EMPTY

    for i in range(2048):
        validate_persistent_hash(acc)
        acc = acc.assoc(i % 128, i)

    assert len(acc) == 128
    assert len(list(acc.iteritems())) == 128
    for k, v in acc.iteritems():
        assert acc.val_at(k, None) is v
Пример #5
0
def test_persistent_hash_collisions():
    HashTable = make_persistent_hash_type(hashfun=lambda x: r_uint(42))
    acc = HashTable.EMPTY

    for i in range(1000):
        validate_persistent_hash(acc)
        acc = acc.assoc(i % 10, i)

    assert len(acc) == 10
    assert len(list(acc.iteritems())) == 10
    for k, v in acc.iteritems():
        assert k <= 10
        assert v >= 990
        assert v % 10 == k
        assert acc.val_at(k, None) is v
Пример #6
0
def test_persistent_hash_collisions():
    HashTable = make_persistent_hash_type(hashfun=lambda x: r_uint(42))
    acc = HashTable.EMPTY

    for i in range(1000):
        validate_persistent_hash(acc)
        acc = acc.assoc(i % 10, i)

    assert len(acc) == 10
    assert len(list(acc.iteritems())) == 10
    for k, v in acc.iteritems():
        assert k <= 10
        assert v >= 990
        assert v % 10 == k
        assert acc.val_at(k, None) is v
Пример #7
0
def test_persistent_hash_union():
    HashTable = make_persistent_hash_type()
    acc1 = HashTable.EMPTY
    acc2 = HashTable.EMPTY

    for i in range(128):
        acc1 = acc1.assoc(i, i)

    for i in range(128, 256):
        acc2 = acc2.assoc(i, i)

    assert len(acc1) == 128
    assert len(acc2) == 128

    acc3 = acc1 + acc2
    assert len(acc3) == 256
    for i in range(256):
        assert i in acc3
Пример #8
0
def test_persistent_hash_union():
    HashTable = make_persistent_hash_type()
    acc1 = HashTable.EMPTY
    acc2 = HashTable.EMPTY

    for i in range(128):
        acc1 = acc1.assoc(i, i)

    for i in range(128, 256):
        acc2 = acc2.assoc(i, i)

    assert len(acc1) == 128
    assert len(acc2) == 128

    acc3 = acc1 + acc2
    assert len(acc3) == 256
    for i in range(256):
        assert i in acc3
Пример #9
0
def test_persistent_hash2():
    HashTable = make_persistent_hash_type()
    acc = HashTable.EMPTY()

    for i in range(1000):
        validate_persistent_hash(acc)
        acc = acc.assoc(i % 10, i)

    for i in range(1000):
        validate_persistent_hash(acc)
        acc = acc.assoc(i % 10, i)

    assert len(acc) == 10
    assert len(list(acc.iteritems())) == 10
    for k, v in acc.iteritems():
        assert k <= 10
        assert v >= 990
        assert v % 10 == k
        assert acc.val_at(k, None) is v
Пример #10
0
def test_persistent_hash2():
    HashTable = make_persistent_hash_type()
    acc = HashTable.EMPTY()

    for i in range(1000):
        validate_persistent_hash(acc)
        acc = acc.assoc(i % 10, i)

    for i in range(1000):
        validate_persistent_hash(acc)
        acc = acc.assoc(i % 10, i)

    assert len(acc) == 10
    assert len(list(acc.iteritems())) == 10
    for k, v in acc.iteritems():
        assert k <= 10
        assert v >= 990
        assert v % 10 == k
        assert acc.val_at(k, None) is v
Пример #11
0
def test_persistent_hash__collisions_removal2():
    HashTable = make_persistent_hash_type(hashfun=lambda x: r_uint(hash(x) % 8))
    acc = HashTable.EMPTY()

    for i in range(1000):
        validate_persistent_hash(acc)
        acc = acc.assoc(i % 10, i).without(i % 10)

    assert len(acc) == 0
    assert list(acc.iteritems()) == []

    for i in range(1000):
        validate_persistent_hash(acc)
        acc = acc.assoc(i % 10, i).without(i % 10 + 1)

    assert len(acc) == 10
    assert len(list(acc.iteritems())) == 10
    for k, v in acc.iteritems():
        assert k <= 10
        assert v >= 990
        assert v % 10 == k
        assert acc.val_at(k, None) is v
Пример #12
0
def test_persistent_hash__collisions_removal2():
    HashTable = make_persistent_hash_type(
        hashfun=lambda x: r_uint(hash(x) % 8))
    acc = HashTable.EMPTY()

    for i in range(1000):
        validate_persistent_hash(acc)
        acc = acc.assoc(i % 10, i).without(i % 10)

    assert len(acc) == 0
    assert list(acc.iteritems()) == []

    for i in range(1000):
        validate_persistent_hash(acc)
        acc = acc.assoc(i % 10, i).without(i % 10 + 1)

    assert len(acc) == 10
    assert len(list(acc.iteritems())) == 10
    for k, v in acc.iteritems():
        assert k <= 10
        assert v >= 990
        assert v % 10 == k
        assert acc.val_at(k, None) is v
Пример #13
0
@objectmodel.always_inline
def compute_hash(x):
    assert objectmodel.we_are_translated() or type(x) is ParamKey
    return r_uint(objectmodel.compute_hash(x))


@objectmodel.always_inline
def equal(a, b):
    assert objectmodel.we_are_translated() or type(a) is ParamKey
    assert objectmodel.we_are_translated() or type(b) is ParamKey
    return a is b


ParameterizationHashTable = make_persistent_hash_type(
    super=W_Object,
    name="ParameterizationHashTable",
    hashfun=compute_hash,
    equal=equal)


# This is a Scheme_Parameterization in Racket
class RootParameterization(object):
    _attrs_ = ["table"]

    def __init__(self):
        # This table maps ParamKey -> W_ThreadCell
        self.table = {}


@continuation
def extend_cont(paramz, i, eventual_vals, vals, params, env, cont, _vals):
Пример #14
0
from rpython.rlib.rarithmetic        import r_uint

@objectmodel.always_inline
def compute_hash(x):
    assert objectmodel.we_are_translated() or type(x) is ParamKey
    return r_uint(objectmodel.compute_hash(x))

@objectmodel.always_inline
def equal(a, b):
    assert objectmodel.we_are_translated() or type(a) is ParamKey
    assert objectmodel.we_are_translated() or type(b) is ParamKey
    return a is b

ParameterizationHashTable = make_persistent_hash_type(
    super   = W_Object,
    name    = "ParameterizationHashTable",
    hashfun = compute_hash,
    equal   = equal)

# This is a Scheme_Parameterization in Racket
class RootParameterization(object):
    def __init__(self):
        # This table maps ParamKey -> W_ThreadCell
        self.table = {}

# This is a Scheme_Config in Racket
# Except that Scheme_Config uses a functional hash table and this uses a list that we copy
class W_Parameterization(W_Object):
    _immutable_fields_ = ["root", "map"]
    errorname = "parameterization"
    def __init__(self, root, map):
Пример #15
0
            return compute_hash(k.value)
        if isinstance(k, values.W_Character):
            return ord(k.value)
        return compute_hash(k)

    @staticmethod
    def cmp_value(a, b):
        from pycket.prims.equal import eqp_logic
        return eqp_logic(a, b)

    def get_item(self, i):
        return get_dict_item(self.data, i)

W_EqvImmutableHashTable = make_persistent_hash_type(
        super=W_ImmutableHashTable,
        name="W_EqvImmutableHashTable",
        hashfun=lambda x: r_uint(W_EqvMutableHashTable.hash_value(x)),
        equal=W_EqvMutableHashTable.cmp_value)

W_EqImmutableHashTable = make_persistent_hash_type(
        super=W_ImmutableHashTable,
        name="W_EqImmutableHashTable",
        hashfun=lambda x: r_uint(W_EqMutableHashTable.hash_value(x)),
        equal=W_EqMutableHashTable.cmp_value)

class __extend__(W_EqvImmutableHashTable):

    def length(self):
        return len(self)

    def make_copy(self):