Add benchmarks
This commit is contained in:
77
benchmark/common.py
Normal file
77
benchmark/common.py
Normal file
@@ -0,0 +1,77 @@
|
||||
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 == "passByBytes":
|
||||
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);
|
||||
# }
|
||||
# }
|
||||
Reference in New Issue
Block a user