77 lines
2.5 KiB
Python
77 lines
2.5 KiB
Python
from random import random
|
|
|
|
WORDS = ["foo ", "bar ", "baz ", "qux ", "quux ", "corge ", "grault ", "garply ", "waldo ", "fred ",
|
|
"plugh ", "xyzzy ", "thud "]
|
|
|
|
def rand_int(val):
|
|
return int(random() * val)
|
|
|
|
def rand_double(val):
|
|
return random() * val
|
|
|
|
def rand_bool():
|
|
return random() < .5
|
|
|
|
def from_bytes_helper(klass):
|
|
def helper(text):
|
|
obj = klass()
|
|
obj.ParseFromString(text)
|
|
return obj
|
|
return helper
|
|
|
|
def pass_by_object(reuse, iters, benchmark):
|
|
for _ in range(iters):
|
|
request = benchmark.Request()
|
|
expected = benchmark.setup(request)
|
|
|
|
response = benchmark.Response()
|
|
benchmark.handle(request, response)
|
|
|
|
if not benchmark.check(response, expected):
|
|
raise ValueError('Expected {}'.format(expected))
|
|
|
|
def pass_by_bytes(reuse, iters, benchmark):
|
|
for _ in range(iters):
|
|
request = benchmark.Request()
|
|
expected = benchmark.setup(request)
|
|
req_bytes = benchmark.to_bytes(request)
|
|
|
|
request2 = benchmark.from_bytes_request(req_bytes)
|
|
response = benchmark.Response()
|
|
benchmark.handle(request2, response)
|
|
resp_bytes = benchmark.to_bytes(response)
|
|
|
|
response2 = benchmark.from_bytes_response(resp_bytes)
|
|
if not benchmark.check(response2, expected):
|
|
raise ValueError('Expected {}'.format(expected))
|
|
|
|
def do_benchmark(mode, *args, **kwargs):
|
|
if mode == "client":
|
|
pass
|
|
elif mode == "object":
|
|
return pass_by_object(*args, **kwargs)
|
|
elif mode == "bytes":
|
|
return pass_by_bytes(*args, **kwargs)
|
|
else:
|
|
raise ValueError("Unknown mode: " + str(mode))
|
|
# typedef typename BenchmarkTypes::template BenchmarkMethods<TestCase, Reuse, Compression>
|
|
# BenchmarkMethods;
|
|
# if (mode == "client") {
|
|
# return BenchmarkMethods::syncClient(STDIN_FILENO, STDOUT_FILENO, iters);
|
|
# } else if (mode == "server") {
|
|
# return BenchmarkMethods::server(STDIN_FILENO, STDOUT_FILENO, iters);
|
|
# } else if (mode == "object") {
|
|
# return BenchmarkMethods::passByObject(iters, false);
|
|
# } else if (mode == "object-size") {
|
|
# return BenchmarkMethods::passByObject(iters, true);
|
|
# } else if (mode == "bytes") {
|
|
# return BenchmarkMethods::passByBytes(iters);
|
|
# } else if (mode == "pipe") {
|
|
# return passByPipe<BenchmarkMethods>(BenchmarkMethods::syncClient, iters);
|
|
# } else if (mode == "pipe-async") {
|
|
# return passByPipe<BenchmarkMethods>(BenchmarkMethods::asyncClient, iters);
|
|
# } else {
|
|
# fprintf(stderr, "Unknown mode: %s\n", mode.c_str());
|
|
# exit(1);
|
|
# }
|
|
# } |