6
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
"""场景生成:源数量、频道、位置与接收半径满足题面范围。"""
|
||||
|
||||
import math
|
||||
|
||||
from referee import DEFAULT_SPEC, mixed_scene, random_omni_scene
|
||||
|
||||
|
||||
def test_random_omni_scene_within_spec():
|
||||
for seed in range(5):
|
||||
sources = random_omni_scene(seed=seed)
|
||||
assert 10 <= len(sources) <= 16 # 源总数范围 [题面]
|
||||
channels = [s.channel for s in sources]
|
||||
assert len(set(channels)) == len(channels) # 每频道至多一个源
|
||||
assert all(1 <= c <= 20 for c in channels)
|
||||
for s in sources:
|
||||
assert math.hypot(s.x, s.y) <= DEFAULT_SPEC.field.omega_radius_m
|
||||
assert 1000 <= s.r_eff_m <= 1500
|
||||
assert not s.directional
|
||||
|
||||
|
||||
def test_scene_is_reproducible_by_seed():
|
||||
a = random_omni_scene(seed=123, count=12)
|
||||
b = random_omni_scene(seed=123, count=12)
|
||||
assert a == b
|
||||
|
||||
|
||||
def test_mixed_scene_directional_count():
|
||||
sources = mixed_scene(seed=7, count=12, directional=4)
|
||||
assert sum(1 for s in sources if s.directional) == 4
|
||||
assert all(0 <= s.heading_deg < 360 for s in sources if s.directional)
|
||||
|
||||
|
||||
def test_count_is_validated():
|
||||
import pytest
|
||||
with pytest.raises(ValueError):
|
||||
random_omni_scene(seed=1, count=0)
|
||||
Reference in New Issue
Block a user