pycapnp/benchmark/catrank_proto.py
Jacob Alexander 6e7fffd7de
Applying black formatting
- Fixing flake8 configuration to agree with black
- Adding black validation check to github actions
2021-10-01 11:12:21 -07:00

74 lines
2 KiB
Python
Executable file

#!/usr/bin/env python
from common import rand_int, rand_double, rand_bool, WORDS, from_bytes_helper
from random import choice
from string import ascii_letters
try:
# Python 2
from itertools import izip
except ImportError:
izip = zip
import catrank_pb2
class Benchmark:
def __init__(self, compression):
self.Request = catrank_pb2.SearchResultList
self.Response = catrank_pb2.SearchResultList
self.from_bytes_request = from_bytes_helper(catrank_pb2.SearchResultList)
self.from_bytes_response = from_bytes_helper(catrank_pb2.SearchResultList)
self.to_bytes = lambda x: x.SerializeToString()
def setup(self, request):
goodCount = 0
count = rand_int(1000)
for i in range(count):
result = request.result.add()
result.score = 1000 - i
url_size = rand_int(100)
result.url = "http://example.com/" + "".join(
[choice(ascii_letters) for _ in range(url_size)]
)
isCat = rand_bool()
isDog = rand_bool()
if isCat and not isDog:
goodCount += 1
snippet = [choice(WORDS) for i in range(rand_int(20))]
if isCat:
snippet.append(" cat ")
if isDog:
snippet.append(" dog ")
snippet += [choice(WORDS) for i in range(rand_int(20))]
result.snippet = "".join(snippet)
return goodCount
def handle(self, request, response):
for req in request.result:
resp = response.result.add()
score = req.score
if " cat " in req.snippet:
score *= 10000
if " dog " in req.snippet:
score /= 10000
resp.score = score
resp.url = req.url
resp.snippet = req.snippet
def check(self, response, expected):
goodCount = 0
for result in response.result:
if result.score > 1001:
goodCount += 1
return goodCount == expected