update test for more buttons!

master
Bel LaPointe 2022-04-11 19:53:01 -06:00
parent 1c41c2a717
commit bdb874cd5e
2 changed files with 20 additions and 52 deletions

View File

@ -25,13 +25,18 @@ def with_(P, D, M):
window = Window(D, M) window = Window(D, M)
previous = {}
while True: while True:
got = readline() got = readline()
if got: if got:
window.push(got) window.push(got)
else: report = window.report()
window.pop() #print(report)
print(window.report()) for k in [k for k in report if not k in previous]:
cb.cb(k)(State(True, report[k]))
for k in [k for k in previous if not k in report]:
cb.cb(k)(State(False, 0))
previous = report
def readline(): def readline():
def __input(*args): def __input(*args):
@ -61,6 +66,7 @@ class Window():
self.n = 1024 self.n = 1024
def report(self): def report(self):
self.__pop()
scaled_rates = self.report_scaled_rates() scaled_rates = self.report_scaled_rates()
ttl = sum([scaled_rates[k] for k in scaled_rates]) ttl = sum([scaled_rates[k] for k in scaled_rates])
results = {} results = {}
@ -69,7 +75,6 @@ class Window():
return {k:results[k] for k in results if results[k] > self.M} return {k:results[k] for k in results if results[k] > self.M}
def report_scaled_rates(self): def report_scaled_rates(self):
self.__pop()
cnt = len(self.w) cnt = len(self.w)
keys = list(set([i[0] for i in self.w])) keys = list(set([i[0] for i in self.w]))
scaled_rates = {} scaled_rates = {}
@ -101,27 +106,7 @@ class Window():
def __now(self): def __now(self):
return time.time()*1000 return time.time()*1000
class Bucket(): '''
def __init__(self, N, M, R, T, CB):
self.q = 0.0
self.N = N
self.M = M
self.R = R
self.T = T
self.CB = CB
self.__last_pop = 0
self.__last_state = False
def push(self):
result = self.__push_c(1)
self.__cb()
return result
def pop(self):
result = self.__pop()
self.__cb()
return result
def __cb(self): def __cb(self):
new_state = self.q > self.T new_state = self.q > self.T
if new_state == self.__last_state: if new_state == self.__last_state:
@ -139,27 +124,7 @@ class Bucket():
if filledness > 1.0: if filledness > 1.0:
filledness = 1.0 filledness = 1.0
self.CB(State(new_state, filledness)) self.CB(State(new_state, filledness))
'''
def state(self):
return self.__last_state
def __push_c(self, c):
self.__pop()
if self.q+c > self.N:
return False
self.q += c
return True
def __pop(self):
now = self.__now()
remove_up_to = (now - self.__last_pop) / self.R
if remove_up_to > self.q:
remove_up_to = self.q
self.q -= remove_up_to
self.__last_pop = now
def __now(self):
return time.time()
class CBAppend(): class CBAppend():
def __init__(self, path): def __init__(self, path):

View File

@ -6,7 +6,7 @@ set -o pipefail
peek() { peek() {
while read -r line; do while read -r line; do
echo $line echo $line
echo $line >&2 #echo $line >&2
done done
} }
cleanup() { cleanup() {
@ -16,16 +16,19 @@ trap cleanup EXIT
python3 ./state_to_buttons.py & python3 ./state_to_buttons.py &
python3 ./testdata/rand_0_n_stream.py \ python3 ./testdata/rand_0_n_weighted_stream.py \
-n 6 \ -n 6 \
-b-min 1 \ -b-min 1 \
-b-max 10 \ -b-max 10 \
-d-min 100 \ -d-min 100 \
-d-max 3000 \ -d-max 3000 \
-between 100 \ -between 100 \
-b-min 10 \
-b-max 100 \
-d-min 100 \
-d-max 3000 \
-between 10 \
| peek \ | peek \
| python3 ./stream_to_state.py \ | python3 ./stream_to_state.py \
-n 20 \ -d 10000 \
-m 15 \ -m .2
-r 15 \
-t 15