from pytest import approx
import rs1090
def test_icao24() -> None:
assert rs1090.decode("8D406B902015A678D4D220AA4BDA")["icao24"] == "406b90"
def test_wake_vortex() -> None:
msg = rs1090.decode("8D406B902015A678D4D220AA4BDA")
assert rs1090.is_df17(msg)
assert rs1090.is_bds08(msg)
assert msg["wake_vortex"] == "n/a"
def test_adsb_callsign() -> None:
msg = rs1090.decode("8D406B902015A678D4D220AA4BDA")
assert rs1090.is_df17(msg)
assert rs1090.is_bds08(msg)
assert msg["callsign"] == "EZY85MH"
def test_adsb_alt() -> None:
msg = rs1090.decode("8D40058B58C901375147EFD09357")
assert rs1090.is_df17(msg)
assert rs1090.is_bds05(msg)
assert msg["altitude"] == 39000
def test_adsb_velocity() -> None:
msg = rs1090.decode("8D485020994409940838175B284F")
assert rs1090.is_df17(msg)
assert rs1090.is_bds09(msg)
assert msg["groundspeed"] == approx(159.2, rel=1e-3)
assert msg["vertical_rate"] == -832
assert msg["track"] == approx(182.88, rel=1e-3)
assert msg["geo_minus_baro"] == 550
msg = rs1090.decode("8DA05F219B06B6AF189400CBC33F")
assert rs1090.is_df17(msg)
assert rs1090.is_bds09(msg)
assert msg["TAS"] == 375
assert msg["vertical_rate"] == -2304
assert msg["heading"] == approx(243.98, rel=1e-3)
def test_adsb_emergency() -> None:
msg = rs1090.decode("8DA2C1B6E112B600000000760759")
assert rs1090.is_df17(msg)
assert rs1090.is_bds61(msg)
assert msg["emergency_state"] == "none"
assert msg["squawk"] == "6513"
def test_adsb_target_state_status() -> None:
msg = rs1090.decode("8DA05629EA21485CBF3F8CADAEEB")
assert rs1090.is_df17(msg)
assert rs1090.is_bds62(msg)
assert msg["selected_altitude"] == 17000
assert msg["source"] == "MCP/FCU"
assert msg["barometric_setting"] == approx(1012.8)
assert msg["selected_heading"] == approx(66.8, 0.1)
assert msg["autopilot"]
assert msg["vnav_mode"]
assert not msg["alt_hold"]
assert not msg["approach_mode"]
assert msg["lnav_mode"]
assert msg["tcas_operational"]
def test_adsb_with_position() -> None:
msg = rs1090.decode(
"90343652300003eeda6de84f1ad2", reference=(40.48, -3.56)
)
assert rs1090.is_df18(msg)
assert rs1090.is_bds06(msg)
assert msg["latitude"] == approx(40.4749)
assert msg["longitude"] == approx(-3.57068)