dcs_liberation/tests/test_tacan.py
2021-08-18 00:06:34 +02:00

127 lines
4.4 KiB
Python

from gen.tacan import (
OutOfTacanChannelsError,
TacanBand,
TacanChannel,
TacanChannelForbiddenError,
TacanChannelInUseError,
TacanRegistry,
TacanUsage,
)
import pytest
ALL_VALID_X_TR = [1, *range(31, 46 + 1), *range(64, 126 + 1)]
ALL_VALID_X_A2A = [*range(37, 63 + 1), *range(100, 126 + 1)]
def test_allocate_first_few_channels() -> None:
registry = TacanRegistry()
chan1 = registry.alloc_for_band(TacanBand.X, TacanUsage.TransmitReceive)
chan2 = registry.alloc_for_band(TacanBand.X, TacanUsage.TransmitReceive)
chan3 = registry.alloc_for_band(TacanBand.X, TacanUsage.TransmitReceive)
assert chan1 == TacanChannel(1, TacanBand.X)
assert chan2 == TacanChannel(31, TacanBand.X)
assert chan3 == TacanChannel(32, TacanBand.X)
def test_reserve_ignoring_rules() -> None:
registry = TacanRegistry()
with pytest.raises(TacanChannelForbiddenError):
registry.reserve(TacanChannel(16, TacanBand.X), TacanUsage.TransmitReceive)
registry.reserve(
TacanChannel(16, TacanBand.X), TacanUsage.TransmitReceive, ignore_rules=True
)
def test_allocate_different_usages() -> None:
"""Make sure unallocated channels for one use don't make channels unavailable for other usage"""
registry = TacanRegistry()
chanA2AX = registry.alloc_for_band(TacanBand.X, TacanUsage.AirToAir)
chanA2AY = registry.alloc_for_band(TacanBand.Y, TacanUsage.AirToAir)
assert chanA2AX == TacanChannel(37, TacanBand.X)
assert chanA2AY == TacanChannel(37, TacanBand.Y)
chanTRX = registry.alloc_for_band(TacanBand.X, TacanUsage.TransmitReceive)
chanTRY = registry.alloc_for_band(TacanBand.Y, TacanUsage.TransmitReceive)
assert chanTRX == TacanChannel(1, TacanBand.X)
assert chanTRY == TacanChannel(1, TacanBand.Y)
def test_reserve_all_valid_transmit_receive() -> None:
registry = TacanRegistry()
print("All valid x", ALL_VALID_X_TR)
for num in ALL_VALID_X_TR:
registry.reserve(TacanChannel(num, TacanBand.X), TacanUsage.TransmitReceive)
with pytest.raises(OutOfTacanChannelsError):
registry.alloc_for_band(TacanBand.X, TacanUsage.TransmitReceive)
# Check that we still can allocate an a2a channel even
# though the T/R channels are used up
chanA2A = registry.alloc_for_band(TacanBand.X, TacanUsage.AirToAir)
assert chanA2A == TacanChannel(47, TacanBand.X)
def test_reserve_all_valid_a2a() -> None:
registry = TacanRegistry()
print("All valid x", ALL_VALID_X_A2A)
for num in ALL_VALID_X_A2A:
registry.reserve(TacanChannel(num, TacanBand.X), TacanUsage.AirToAir)
with pytest.raises(OutOfTacanChannelsError):
registry.alloc_for_band(TacanBand.X, TacanUsage.AirToAir)
# Check that we still can allocate an a2a channel even
# though the T/R channels are used up
chanTR = registry.alloc_for_band(TacanBand.X, TacanUsage.TransmitReceive)
assert chanTR == TacanChannel(1, TacanBand.X)
@pytest.mark.skip(reason="TODO")
def test_allocate_all() -> None:
pass
def test_reserve_invalid_tr_channels() -> None:
registry = TacanRegistry()
some_invalid_channels = [
TacanChannel(2, TacanBand.X),
TacanChannel(30, TacanBand.X),
TacanChannel(47, TacanBand.X),
TacanChannel(63, TacanBand.X),
TacanChannel(2, TacanBand.Y),
TacanChannel(30, TacanBand.Y),
TacanChannel(64, TacanBand.Y),
TacanChannel(92, TacanBand.Y),
]
for chan in some_invalid_channels:
with pytest.raises(TacanChannelForbiddenError):
registry.reserve(chan, TacanUsage.TransmitReceive)
def test_reserve_invalid_a2a_channels() -> None:
registry = TacanRegistry()
some_invalid_channels = [
TacanChannel(1, TacanBand.X),
TacanChannel(36, TacanBand.X),
TacanChannel(64, TacanBand.X),
TacanChannel(99, TacanBand.X),
TacanChannel(1, TacanBand.Y),
TacanChannel(36, TacanBand.Y),
TacanChannel(64, TacanBand.Y),
TacanChannel(99, TacanBand.Y),
]
for chan in some_invalid_channels:
with pytest.raises(TacanChannelForbiddenError):
registry.reserve(chan, TacanUsage.AirToAir)
def test_reserve_again() -> None:
registry = TacanRegistry()
with pytest.raises(TacanChannelInUseError):
registry.reserve(TacanChannel(1, TacanBand.X), TacanUsage.TransmitReceive)
registry.reserve(TacanChannel(1, TacanBand.X), TacanUsage.TransmitReceive)