def test_GPSTime_from_datetime():
    dt = datetime.datetime(2020, 4, 24)
    t = GPSTime.from_datetime(dt)
    assert t.to_datetime() == dt
    assert hasattr(t, "seconds"), "from_datetime() did not instantiate seconds"
    assert hasattr(
        t, "femtoseconds"), "from_datetime() did not instantiate femtoseconds"
def test_GPSTime_add_datetime():
    gps_time = GPSTime(0, 0)
    dt = GPSTime(1920, 415000).to_datetime()
    gps_time_adding = GPSTime.from_datetime(dt)
    gps_time2 = gps_time + dt
    assert gps_time2.week_number == gps_time_adding.week_number
    assert gps_time2.time_of_week == gps_time_adding.time_of_week
def test_get_next_leap_seconds(year, leap_second_date, leap_second):
    date = datetime.datetime(year, 1, 1, 0, 0, 0)
    out = LeapSeconds.get_next_leap_second(GPSTime.from_datetime(date))
    if leap_second_date is not None:
        date, calculated_ls = out
        assert leap_second_date == date
        assert leap_second == calculated_ls
    else:
        assert out is None
def test_get_leap_seconds(year, leap_seconds):
    date = datetime.datetime(year, 1, 1, 0, 0, 0)
    calculated_ls = LeapSeconds.get_leap_seconds(GPSTime.from_datetime(date))
    assert leap_seconds == calculated_ls
                                               (2020, 18), (2021, 18)])
def test_get_leap_seconds(year, leap_seconds):
    date = datetime.datetime(year, 1, 1, 0, 0, 0)
    calculated_ls = LeapSeconds.get_leap_seconds(GPSTime.from_datetime(date))
    assert leap_seconds == calculated_ls


@pytest.mark.parametrize("year,leap_second_date,leap_second",
                         [(1980, GPSTime(77, 259200), 1), (2021, None, None),
                          (2000, GPSTime(1356, 0.0), 14)])
def test_get_next_leap_seconds(year, leap_second_date, leap_second):
    date = datetime.datetime(year, 1, 1, 0, 0, 0)
    out = LeapSeconds.get_next_leap_second(GPSTime.from_datetime(date))
    if leap_second_date is not None:
        date, calculated_ls = out
        assert leap_second_date == date
        assert leap_second == calculated_ls
    else:
        assert out is None


if __name__ == "__main__":
    gps_time = GPSTime.from_datetime(datetime.datetime(2000, 1, 1))
    # gps_time2 = gps_time + datetime.datetime(1990, 1, 6)
    # GPSTime(0, 0) - 1
    #print(time.tow2zcount(0, 0, 1980))
    # print(LeapSeconds.get_leap_seconds(gps_time))
    date = datetime.datetime(1980, 1, 1, 0, 0, 0)
    calculated_ls = LeapSeconds.get_next_leap_second(gps_time)
    print(calculated_ls)
def test_GPSTime_from_datetime_invalid_type(invalid_type):
    with pytest.raises(TypeError):
        GPSTime.from_datetime(invalid_type)