from random import random
import pyximport
importers = pyximport.install()
from common_fast import rand_int, rand_double, rand_bool
pyximport.uninstall(*importers)
WORDS = [
"foo ",
"bar ",
"baz ",
"qux ",
"quux ",
"corge ",
"grault ",
"garply ",
"waldo ",
"fred ",
"plugh ",
"xyzzy ",
"thud ",
]
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))