6
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
"""计时锚点:附件1 表2 / 附件2 第10节示例必须逐步复现 105/111/194/199。"""
|
||||
|
||||
from referee import CostBreakdown, LocalSimulator, Source, clear_cost, measure_cost
|
||||
from referee.timing import move_time
|
||||
|
||||
|
||||
def payload(id="e", **extra):
|
||||
return dict(arena_id="default", robot_id="2026001", request_id=id, **extra)
|
||||
|
||||
|
||||
def measure(id="m", x=0, y=0, channel=1):
|
||||
return payload(id, position=dict(x=x, y=y), channel=channel)
|
||||
|
||||
|
||||
def test_attachment_timing_example():
|
||||
"""附件2 第10节:(0,0)→(300,400) 检测ch1 → 原地检测ch2 → (300,0)清除ch3(未发现)
|
||||
→ 原地检测ch2 → /exit,虚拟时刻 105/111/194/199。"""
|
||||
sim = LocalSimulator([Source(3, 10_000, 10_000, 1500)]) # 远源,保证"未发现"
|
||||
sim.handle("/enter", payload())
|
||||
assert sim.handle("/measure", measure("m1", 300, 400))[1]["virtual_time_s"] == 105
|
||||
assert sim.handle("/measure", measure("m2", 300, 400, channel=2))[1]["virtual_time_s"] == 111
|
||||
clear = payload("c1", position=dict(x=300, y=0), channel=3)
|
||||
assert sim.handle("/clear", clear)[1]["virtual_time_s"] == 194
|
||||
assert sim.handle("/measure", measure("m3", 300, 0, channel=2))[1]["virtual_time_s"] == 199
|
||||
exit_info = sim.handle("/exit", payload("x"))[1]
|
||||
assert exit_info["virtual_time_s"] == 199
|
||||
assert exit_info["exit_reason"] == "user_exit"
|
||||
|
||||
|
||||
def test_cost_breakdown_components():
|
||||
breakdown = measure_cost((0, 0), (300, 400), 1, 1)
|
||||
assert (breakdown.move_s, breakdown.switch_s, breakdown.action_s) == (100.0, 0.0, 5.0)
|
||||
breakdown = measure_cost((300, 400), (300, 400), 1, 2)
|
||||
assert (breakdown.move_s, breakdown.switch_s, breakdown.action_s) == (0.0, 1.0, 5.0)
|
||||
assert clear_cost((300, 400), (300, 0), success=False).action_s == 3.0
|
||||
assert clear_cost((300, 0), (300, 0), success=True).action_s == 5.0
|
||||
assert move_time((0, 0), (0, 50)) == 10.0
|
||||
|
||||
|
||||
def test_microsecond_quantization_is_per_segment():
|
||||
"""逐段按整数微秒量化后累计 [题面 附件2 4.1],而非先加和再量化。"""
|
||||
parts = CostBreakdown(move_s=0.0000004, switch_s=0.0000004, action_s=0.0000004)
|
||||
assert parts.total_us == 0 + 0 + 0
|
||||
parts = CostBreakdown(move_s=0.0000006, switch_s=0.0000006, action_s=0.0000006)
|
||||
assert parts.total_us == 3
|
||||
Reference in New Issue
Block a user