test with true rand inf stream and up numbers a bit to find bug and fix

master
Bel LaPointe 2022-04-11 08:23:40 -06:00
parent 12d8b5ef83
commit 00403d03a2
3 changed files with 30 additions and 13 deletions

View File

@ -16,7 +16,7 @@ def main():
if not key in buckets: if not key in buckets:
buckets[key] = False buckets[key] = False
buckets[key] = False if line[0] == "/" else float(line.split()[-1]) buckets[key] = False if line[0] == "/" else float(line.split()[-1])
print(sorted([(int(i),buckets[i]) for i in buckets if buckets[i]])) print("[", " ".join(sorted([f"{int(i)}={buckets[i]}" for i in buckets if buckets[i]])), "]")
def get_args(): def get_args():
ap = argparse.ArgumentParser() ap = argparse.ArgumentParser()

View File

@ -7,6 +7,7 @@ def main():
args = get_args() args = get_args()
with_( with_(
N=args.n, N=args.n,
M=args.m,
R=args.r, R=args.r,
T=args.t, T=args.t,
p=args.p, p=args.p,
@ -15,12 +16,13 @@ def main():
def get_args(): def get_args():
ap = argparse.ArgumentParser() ap = argparse.ArgumentParser()
ap.add_argument("-n", type=int, help="queue capacity", default=3) ap.add_argument("-n", type=int, help="queue capacity", default=3)
ap.add_argument("-m", type=int, help="queue fill line", default=3)
ap.add_argument("-r", type=int, help="drain rate per second", default=2) ap.add_argument("-r", type=int, help="drain rate per second", default=2)
ap.add_argument("-t", type=int, help="threshold for state", default=2) ap.add_argument("-t", type=int, help="threshold for state", default=2)
ap.add_argument("-p", type=str, help="path to write out to", default="/tmp/cbappend.both.txt") ap.add_argument("-p", type=str, help="path to write out to", default="/tmp/cbappend.both.txt")
return ap.parse_args() return ap.parse_args()
def with_(N, R, T, p): def with_(N, M, R, T, p):
triggered = CBAppend(p) triggered = CBAppend(p)
released = CBAppend(p) released = CBAppend(p)
cb = CBFork(triggered, released) cb = CBFork(triggered, released)
@ -33,7 +35,7 @@ def with_(N, R, T, p):
[buckets[i].pop() for i in buckets] [buckets[i].pop() for i in buckets]
else: else:
if not got in buckets: if not got in buckets:
buckets[got] = Bucket(N, R, T, cb.cb(got)) buckets[got] = Bucket(N, M, R, T, cb.cb(got))
buckets[got].push() buckets[got].push()
def readline(): def readline():
@ -57,9 +59,10 @@ class State():
self.f = f self.f = f
class Bucket(): class Bucket():
def __init__(self, N, R, T, CB): def __init__(self, N, M, R, T, CB):
self.q = 0.0 self.q = 0.0
self.N = N self.N = N
self.M = M
self.R = R self.R = R
self.T = T self.T = T
self.CB = CB self.CB = CB
@ -81,7 +84,10 @@ class Bucket():
if new_state == self.__last_state: if new_state == self.__last_state:
return return
self.__last_state = new_state self.__last_state = new_state
self.CB(State(new_state, int(100*self.q/self.N)/100.0)) filledness = int(100*(self.q/self.M))/100.0
if filledness > 1.0:
filledness = 1.0
self.CB(State(new_state, filledness))
def state(self): def state(self):
return self.__last_state return self.__last_state

View File

@ -3,18 +3,29 @@
set -e set -e
set -o pipefail set -o pipefail
peek() {
while read -r line; do
echo $line
echo $line >&2
done
}
cleanup() { cleanup() {
kill -9 $(jobs -p) || true kill -9 $(jobs -p) || true
} }
trap cleanup EXIT trap cleanup EXIT
python3 ./state_to_buttons.py & python3 ./state_to_buttons.py &
python3 testdata/rand_0_13_stream.py \
| (
while read -r line; do
#echo $line >&2
echo $line
done
) \
| python3 ./stream_to_state.py
python3 ./testdata/rand_0_n_stream.py \
-n 6 \
-b-min 1 \
-b-max 10 \
-d-min 100 \
-d-max 2000 \
-between 100 \
| peek \
| python3 ./stream_to_state.py \
-n 20 \
-m 15 \
-r 15 \
-t 14