1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149
|
"""Stress test diskcache.persistent.Deque."""
import collections as co
import functools as ft
import random
import diskcache as dc
OPERATIONS = 1000
SEED = 0
SIZE = 10
functions = []
def register(function):
functions.append(function)
return function
def lencheck(function):
@ft.wraps(function)
def wrapper(sequence, deque):
assert len(sequence) == len(deque)
if not deque:
return
function(sequence, deque)
return wrapper
@register
@lencheck
def stress_get(sequence, deque):
index = random.randrange(len(sequence))
assert sequence[index] == deque[index]
@register
@lencheck
def stress_set(sequence, deque):
index = random.randrange(len(sequence))
value = random.random()
sequence[index] = value
deque[index] = value
@register
@lencheck
def stress_del(sequence, deque):
index = random.randrange(len(sequence))
del sequence[index]
del deque[index]
@register
def stress_iadd(sequence, deque):
values = [random.random() for _ in range(5)]
sequence += values
deque += values
@register
def stress_iter(sequence, deque):
assert all(alpha == beta for alpha, beta in zip(sequence, deque))
@register
def stress_reversed(sequence, deque):
reversed_sequence = reversed(sequence)
reversed_deque = reversed(deque)
pairs = zip(reversed_sequence, reversed_deque)
assert all(alpha == beta for alpha, beta in pairs)
@register
def stress_append(sequence, deque):
value = random.random()
sequence.append(value)
deque.append(value)
@register
def stress_appendleft(sequence, deque):
value = random.random()
sequence.appendleft(value)
deque.appendleft(value)
@register
@lencheck
def stress_pop(sequence, deque):
assert sequence.pop() == deque.pop()
register(stress_pop)
register(stress_pop)
@register
@lencheck
def stress_popleft(sequence, deque):
assert sequence.popleft() == deque.popleft()
register(stress_popleft)
register(stress_popleft)
@register
def stress_reverse(sequence, deque):
sequence.reverse()
deque.reverse()
assert all(alpha == beta for alpha, beta in zip(sequence, deque))
@register
@lencheck
def stress_rotate(sequence, deque):
assert len(sequence) == len(deque)
steps = random.randrange(len(deque))
sequence.rotate(steps)
deque.rotate(steps)
assert all(alpha == beta for alpha, beta in zip(sequence, deque))
def stress(sequence, deque):
for count in range(OPERATIONS):
function = random.choice(functions)
function(sequence, deque)
if count % 100 == 0:
print('\r', len(sequence), ' ' * 7, end='')
print()
def test():
random.seed(SEED)
sequence = co.deque(range(SIZE))
deque = dc.Deque(range(SIZE))
stress(sequence, deque)
assert all(alpha == beta for alpha, beta in zip(sequence, deque))
if __name__ == '__main__':
test()
|