CamHack25/engine_test.py
2025-11-02 15:47:47 +00:00

80 lines
2.3 KiB
Python
Executable file

#!/usr/bin/env python
from engine import encode_greggs, decode_greggs, encode, decode, format_location, parse_location, spherical_dist, fetch_data, format_dist, parse_dist
from tqdm import tqdm
import numpy as np
import time
DIST_THRESH = 0.1
def gen_locations() -> list[tuple[float, float]]:
"""Generate a list of locations for testing."""
# return [(52.210796, 0.091659)]
return fetch_data("tesco")
def test_encode_decode():
locations = gen_locations()
passed = 0
fails = 0
dists = []
with open("fails.txt", "w") as f:
f.write("lat, lon, guesslat, guesslon\n")
with open("success.txt", "w") as f:
f.write("lat, lon, guesslat, guesslon\n")
try:
for loc in tqdm(locations):
encoded = format_location(encode(loc))
decoded = decode(parse_location(encoded))
dist = spherical_dist(np.array(loc), np.array(decoded))
if dist > DIST_THRESH:
tqdm.write(f"FAIL:\n\tloc: {loc}\n\tdecoded: {decoded}\n\tdist: {dist}")
fails += 1
dists.append(dist)
with open("fails.txt", "a") as f:
f.write(f"{loc[0]}, {loc[1]}, {decoded[0]}, {decoded[1]}\n")
else:
passed += 1
with open("success.txt", "a") as f:
f.write(f"{loc[0]}, {loc[1]}, {decoded[0]}, {decoded[1]}\n")
except KeyboardInterrupt:
print("KeyboardInterrupt - halting...")
avg_dist = sum(dists) / len(dists)
print(f"\nDONE. Passed: {passed}. Failed: {fails}. Average error: {avg_dist:.3f}m")
def test_encode_decode_greggs():
num_greggs = len(fetch_data("greggs"))
fails = 0
for i in tqdm(range(num_greggs)):
# t = time.monotonic()
encoded = encode_greggs(i)
# tqdm.write(f"Encoding took {time.monotonic() - t:.3f}s")
stringified = ",".join(map(format_dist, encoded))
parsed = [parse_dist(s.strip()) for s in stringified.split(",")]
# t = time.monotonic()
decoded = decode_greggs(parsed)
# tqdm.write(f"Decoding took {time.monotonic() - t:.3f}s")
if i != decoded:
tqdm.write(f"FAIL: {i} != {decoded}")
fails += 1
print(f"Encode/Decode Greggs: {fails} failures.")
if __name__ == "__main__":
test_encode_decode()