holy fuking shit

This commit is contained in:
Horldsence
2026-09-12 01:56:34 +08:00
parent 36f354736c
commit d975309a81
83 changed files with 2748 additions and 896 deletions
+23 -14
View File
@@ -1,7 +1,6 @@
"""评测引擎一致性:时限、状态机、观测判定、幂等与量化(移植自参赛队仓库并扩展)。"""
from concurrent.futures import ThreadPoolExecutor
from dataclasses import replace
from threading import Event
import pytest
@@ -9,12 +8,12 @@ import pytest
from referee import FieldSpec, LocalSimulator, SimulatorClosed, Source, Spec
def payload(id="e", **extra):
return dict(arena_id="default", robot_id="2026001", request_id=id, **extra)
def payload(request_id="e", **extra):
return dict(arena_id="default", robot_id="2026001", request_id=request_id, **extra)
def measure(id="m", x=0, y=0, channel=1):
return payload(id, position=dict(x=x, y=y), channel=channel)
def measure(request_id="m", x=0, y=0, channel=1):
return payload(request_id, position=dict(x=x, y=y), channel=channel)
# ---------------------------------------------------------------- 时限 [题面 附件1 2.5]
@@ -92,7 +91,7 @@ def test_error_rejection_does_not_consume_id():
sim = LocalSimulator([])
for bad in ["e\n", "e\u200b", "e\u0085", "e\ud800"]:
assert sim.handle("/enter", payload(bad))[0] == 400
assert sim._idempotency == {}
assert not sim._idempotency
assert sim.handle("/enter", payload())[1]["accepted"]
@@ -181,6 +180,8 @@ def test_huge_numeric_fields_return_bad_request():
(dict(arena_id="other", robot_id="2026001", request_id="e"), False),
(dict(arena_id="default", robot_id="someone-else", request_id="e"), False),
])
# pytest 参数化保留 expect 列(用例矩阵可读性),当前断言恒为 False,故不参与断言
# pylint: disable-next=unused-argument
def test_unknown_fields_and_mismatch_are_business_rejected(body, expect):
sim = LocalSimulator([])
status, response = sim.handle("/enter", body)
@@ -204,12 +205,14 @@ def test_channel_and_position_validation():
]
for extra in cases:
assert sim.handle("/measure", payload("m", **extra))[0] == 400
assert sim.handle("/measure", payload("ok", position=dict(x=0, y=0), channel=1.0))[1]["accepted"]
assert sim.handle("/measure",
payload("ok", position=dict(x=0, y=0), channel=1.0))[1]["accepted"]
def test_actions_before_enter_are_business_rejected():
sim = LocalSimulator([])
for path, body in [("/measure", measure()), ("/clear", payload("c", position=dict(x=0, y=0), channel=1)),
for path, body in [("/measure", measure()),
("/clear", payload("c", position=dict(x=0, y=0), channel=1)),
("/exit", payload("x"))]:
status, response = sim.handle(path, body)
assert status == 200 and response["accepted"] is False
@@ -224,7 +227,8 @@ def test_clear_rules():
assert ok["clear_result"] == "success"
again = sim.handle("/clear", payload("c5b", position=dict(x=10, y=0), channel=5))[1]
assert again["clear_result"] == "no_target_in_range" # 同一源只能清除一次
assert sim.handle("/clear", payload("c6", position=dict(x=15, y=0), channel=6))[1]["clear_result"] == "success"
cleared = sim.handle("/clear", payload("c6", position=dict(x=15, y=0), channel=6))[1]
assert cleared["clear_result"] == "success"
miss = sim.handle("/clear", payload("c9", position=dict(x=0, y=0), channel=9))[1]
assert miss["clear_result"] == "no_target_in_range"
assert sim.channel == 1 # /clear 不切换测向机频道 [题面 附件1 2.3]
@@ -238,15 +242,20 @@ def test_measure_observation_matrix():
sim = LocalSimulator(sources, error_half_deg=0.0)
sim.handle("/enter", payload("enter"))
# 超出有效接收半径
assert sim.handle("/measure", measure("a", -600, 0, channel=1))[1]["measure_result"] == "no_signal"
assert sim.handle("/measure",
measure("a", -600, 0, channel=1))[1]["measure_result"] == "no_signal"
# 接收半径边界:distance == r_eff 仍有信号 [题面 附件2 2.1 "超过"]
assert sim.handle("/measure", measure("b", -500, 0, channel=1))[1]["measure_result"] == "direction"
assert sim.handle("/measure",
measure("b", -500, 0, channel=1))[1]["measure_result"] == "direction"
# 覆盖角边界:源2 朝东,正东方向(bearing=0°)恰在 ±90° 覆盖内
assert sim.handle("/measure", measure("c", 200, 0, channel=2))[1]["measure_result"] == "direction"
assert sim.handle("/measure",
measure("c", 200, 0, channel=2))[1]["measure_result"] == "direction"
# 覆盖角边界:bearing=90°(正北)仍在覆盖内(含边界)[题面 附件2 2.2]
assert sim.handle("/measure", measure("c2", 100, 100, channel=2))[1]["measure_result"] == "direction"
assert sim.handle("/measure",
measure("c2", 100, 100, channel=2))[1]["measure_result"] == "direction"
# 覆盖角外(bearing≈135° > 90°):无信号
assert sim.handle("/measure", measure("d", 90, 10, channel=2))[1]["measure_result"] == "no_signal"
assert sim.handle("/measure",
measure("d", 90, 10, channel=2))[1]["measure_result"] == "no_signal"
# 距离过近:不返回 svd_deg [题面 附件2 2.4]
near = sim.handle("/measure", measure("near", 998, 0, channel=1))[1]
assert near["measure_result"] == "near" and "svd_deg" not in near