def test_creation():
    new_ref = s.GNSSSignal(sat=8, band=0, constellation=0)
    sids = [
        s.GNSSSignal(sat=2, band=0, constellation=0),
        s.GNSSSignal(sat=1, band=0, constellation=0),
        s.GNSSSignal(sat=3, band=0, constellation=0),
        s.GNSSSignal(sat=4, band=0, constellation=0)
    ]
    sm = sat.SatsManagement(sids=sids)
    assert sm.num_sats
    assert sm.sids[0]['sat'] == 2
    assert sm.sids[1]['sat'] == 1
    assert sm.sids[2]['sat'] == 3
    assert sm.sids[3]['sat'] == 4
    assert not sm._print()
    assert not sm._print_short()
    sdiffs = [
        o.SingleDiff(sid={
            'sat': 1,
            'band': 0,
            'constellation': 0
        },
                     pseudorange=0,
                     sat_pos=(0, 0, 0),
                     sat_vel=(0, 0, 0),
                     carrier_phase=0,
                     raw_doppler=0,
                     doppler=0,
                     snr=1),
        o.SingleDiff(sid={
            'sat': 2,
            'band': 0,
            'constellation': 0
        },
                     pseudorange=0,
                     sat_pos=(0, 0, 0),
                     sat_vel=(0, 0, 0),
                     carrier_phase=0,
                     raw_doppler=0,
                     doppler=0,
                     snr=5),
        o.SingleDiff(sid={
            'sat': 3,
            'band': 0,
            'constellation': 0
        },
                     pseudorange=0,
                     sat_pos=(0, 0, 0),
                     sat_vel=(0, 0, 0),
                     carrier_phase=0,
                     raw_doppler=0,
                     doppler=0,
                     snr=10)
    ]
    # TODO (Buro): Check outputs!
    assert sm.rebase(sdiffs)
    assert not sm.update(sdiffs)
def test_bad_measurements():
    sids = [
        s.GNSSSignal(sat=1, band=0, constellation=0),
        s.GNSSSignal(sat=2, band=0, constellation=0),
        s.GNSSSignal(sat=3, band=0, constellation=0),
        s.GNSSSignal(sat=5, band=0, constellation=0),
        s.GNSSSignal(sat=6, band=0, constellation=0)
    ]
    float_sats = sat.SatsManagement(sids=sids)
    sids = [
        s.GNSSSignal(sat=3, band=0, constellation=0),
        s.GNSSSignal(sat=1, band=0, constellation=0),
        s.GNSSSignal(sat=2, band=0, constellation=0),
        s.GNSSSignal(sat=5, band=0, constellation=0),
        s.GNSSSignal(sat=6, band=0, constellation=0)
    ]
    amb_sats_init = sat.SatsManagement(sids=sids)
    test = a.AmbiguityTest(sats=float_sats)
    sdiffs = [
        o.SingleDiff(sid={
            'sat': 1,
            'band': 0,
            'constellation': 0
        },
                     pseudorange=0,
                     sat_pos=(0, 0, 0),
                     sat_vel=(0, 0, 0),
                     carrier_phase=0,
                     raw_doppler=0,
                     doppler=0,
                     snr=0),
        o.SingleDiff(sid={
            'sat': 2,
            'band': 0,
            'constellation': 0
        },
                     pseudorange=0,
                     sat_pos=(0, 0, 0),
                     sat_vel=(0, 0, 0),
                     carrier_phase=0,
                     raw_doppler=0,
                     doppler=0,
                     snr=0),
        o.SingleDiff(sid={
            'sat': 3,
            'band': 0,
            'constellation': 0
        },
                     pseudorange=0,
                     sat_pos=(0, 0, 0),
                     sat_vel=(0, 0, 0),
                     carrier_phase=0,
                     raw_doppler=0,
                     doppler=0,
                     snr=0),
        o.SingleDiff(sid={
            'sat': 4,
            'band': 0,
            'constellation': 0
        },
                     pseudorange=0,
                     sat_pos=(0, 0, 0),
                     sat_vel=(0, 0, 0),
                     carrier_phase=0,
                     raw_doppler=0,
                     doppler=0,
                     snr=0),
        o.SingleDiff(sid={
            'sat': 5,
            'band': 0,
            'constellation': 0
        },
                     pseudorange=0,
                     sat_pos=(0, 0, 0),
                     sat_vel=(0, 0, 0),
                     carrier_phase=0,
                     raw_doppler=0,
                     doppler=0,
                     snr=0),
        o.SingleDiff(sid={
            'sat': 6,
            'band': 0,
            'constellation': 0
        },
                     pseudorange=0,
                     sat_pos=(0, 0, 0),
                     sat_vel=(0, 0, 0),
                     carrier_phase=0,
                     raw_doppler=0,
                     doppler=0,
                     snr=0)
    ]
def test_update_sats_same_sats():
    sids = [
        s.GNSSSignal(sat=3, band=0, constellation=0),
        s.GNSSSignal(sat=1, band=0, constellation=0),
        s.GNSSSignal(sat=2, band=0, constellation=0),
        s.GNSSSignal(sat=4, band=0, constellation=0)
    ]
    sm = sat.SatsManagement(sids=sids)
    test = a.AmbiguityTest(sats=sm)
    sdiffs = [
        o.SingleDiff(sid={
            'sat': 1,
            'band': 0,
            'constellation': 0
        },
                     pseudorange=0,
                     sat_pos=(0, 0, 0),
                     sat_vel=(0, 0, 0),
                     carrier_phase=0,
                     raw_doppler=0,
                     doppler=0,
                     snr=0),
        o.SingleDiff(sid={
            'sat': 2,
            'band': 0,
            'constellation': 0
        },
                     pseudorange=0,
                     sat_pos=(0, 0, 0),
                     sat_vel=(0, 0, 0),
                     carrier_phase=0,
                     raw_doppler=0,
                     doppler=0,
                     snr=0),
        o.SingleDiff(sid={
            'sat': 3,
            'band': 0,
            'constellation': 0
        },
                     pseudorange=0,
                     sat_pos=(0, 0, 0),
                     sat_vel=(0, 0, 0),
                     carrier_phase=0,
                     raw_doppler=0,
                     doppler=0,
                     snr=0),
        o.SingleDiff(sid={
            'sat': 4,
            'band': 0,
            'constellation': 0
        },
                     pseudorange=0,
                     sat_pos=(0, 0, 0),
                     sat_vel=(0, 0, 0),
                     carrier_phase=0,
                     raw_doppler=0,
                     doppler=0,
                     snr=0)
    ]
    assert not test.ambiguity_update_sats(sdiffs, None, None, None, None,
                                          False)
    assert test.sats['sids'][0]['sat'] == 3
    assert test.sats['sids'][1]['sat'] == 1
    assert test.sats['sids'][2]['sat'] == 2
    assert test.sats['sids'][3]['sat'] == 4
def test_choose_ref_sat():
    sdiffs = [
        o.SingleDiff(sid={
            'sat': 1,
            'band': 0,
            'constellation': 0
        },
                     pseudorange=0,
                     sat_pos=(0, 0, 0),
                     sat_vel=(0, 0, 0),
                     carrier_phase=0,
                     raw_doppler=0,
                     doppler=0,
                     snr=0),
        o.SingleDiff(sid={
            'sat': 2,
            'band': 0,
            'constellation': 0
        },
                     pseudorange=0,
                     sat_pos=(0, 0, 0),
                     sat_vel=(0, 0, 0),
                     carrier_phase=0,
                     raw_doppler=0,
                     doppler=0,
                     snr=0),
        o.SingleDiff(sid={
            'sat': 3,
            'band': 0,
            'constellation': 0
        },
                     pseudorange=0,
                     sat_pos=(0, 0, 0),
                     sat_vel=(0, 0, 0),
                     carrier_phase=0,
                     raw_doppler=0,
                     doppler=0,
                     snr=0)
    ]
    assert isinstance(sat.choose_reference_sat_(sdiffs), s.GNSSSignal)
    assert sat.choose_reference_sat_(sdiffs).sat == 1
    sdiffs = [
        o.SingleDiff(sid={
            'sat': 1,
            'band': 0,
            'constellation': 0
        },
                     pseudorange=0,
                     sat_pos=(0, 0, 0),
                     sat_vel=(0, 0, 0),
                     carrier_phase=0,
                     raw_doppler=0,
                     doppler=0,
                     snr=1),
        o.SingleDiff(sid={
            'sat': 2,
            'band': 0,
            'constellation': 0
        },
                     pseudorange=0,
                     sat_pos=(0, 0, 0),
                     sat_vel=(0, 0, 0),
                     carrier_phase=0,
                     raw_doppler=0,
                     doppler=0,
                     snr=5),
        o.SingleDiff(sid={
            'sat': 3,
            'band': 0,
            'constellation': 0
        },
                     pseudorange=0,
                     sat_pos=(0, 0, 0),
                     sat_vel=(0, 0, 0),
                     carrier_phase=0,
                     raw_doppler=0,
                     doppler=0,
                     snr=10)
    ]
    assert isinstance(sat.choose_reference_sat_(sdiffs), s.GNSSSignal)
    assert sat.choose_reference_sat_(sdiffs).sat == 3