def test_WaitingTime_combined_window_strategy_short(metocean_synth):

    test = WaitingTime(metocean_synth)

    olc = {'maxHs': 0.5, 'maxTp': 0.5, 'maxWs': 0.5, 'maxCs': 0.5}

    windows = test.get_weather_windows(olc)
    start_date = dt.datetime(2000, 1, 1)

    _, waiting_time = test._combined_window_strategy(windows, start_date, 24)

    assert waiting_time == 0
def test_WaitingTime_combined_window_strategy_multi(metocean_synth):

    test = WaitingTime(metocean_synth)

    olc = {'maxHs': 0.5, 'maxTp': 0.5, 'maxWs': 0.5, 'maxCs': 0.5}

    windows = test.get_weather_windows(olc)
    start_date = dt.datetime(2000, 1, 1)
    start_delay, waiting_time = test._combined_window_strategy(
        windows, start_date, 36)

    assert np.isclose(start_delay, 750.)  # Less waiting with 24 hour window
    assert np.isclose(waiting_time, 656.0)  # (27 + 27 + 28) * 24 / 3
def test_WaitingTime_combined_window_strategy_single(metocean_synth):

    test = WaitingTime(metocean_synth)

    olc = {'maxHs': 0.5, 'maxTp': 0.5, 'maxWs': 0.5, 'maxCs': 0.5}

    windows = test.get_weather_windows(olc)
    start_date = dt.datetime(2000, 1, 1)
    start_delay, waiting_time = test._combined_window_strategy(
        windows, start_date, 24)

    assert np.isclose(start_delay, 750.)
    assert np.isclose(waiting_time, 0)
def test_WaitingTime_combined_window_strategy_max_start_delay(metocean_synth):

    test = WaitingTime(metocean_synth, max_start_delay=4)

    olc = {'maxHs': 0.5, 'maxTp': 0.5, 'maxWs': 0.5, 'maxCs': 0.5}

    windows = test.get_weather_windows(olc)
    start_date = dt.datetime(2000, 1, 1)
    start_delay, waiting_time = test._combined_window_strategy(
        windows, start_date, 24)

    assert start_delay is None
    assert waiting_time is None
def test_WaitingTime_combined_window_strategy_leap(metocean_synth):

    test = WaitingTime(metocean_synth)

    olc = {'maxHs': 0.5, 'maxTp': 0.5, 'maxWs': 0.5, 'maxCs': 0.5}

    windows = test.get_weather_windows(olc)
    start_date = dt.datetime(2000, 2, 29)

    start_delay, waiting_time = test._combined_window_strategy(
        windows, start_date, 12)

    assert np.isclose(start_delay, 14.0)  # (30 + 6 + 6) / 3
    assert waiting_time == 0
def test_WaitingTime_combined_window_strategy_optimise(metocean_synth):

    test = WaitingTime(metocean_synth)
    test.set_optimise_delay(True)

    olc = {'maxHs': 0.5, 'maxTp': 0.5, 'maxWs': 0.5, 'maxCs': 0.5}

    windows = test.get_weather_windows(olc)
    start_date = dt.datetime(2000, 1, 1)

    start_delay, waiting_time = test._combined_window_strategy(
        windows, start_date, 24)

    assert np.isclose(start_delay, 6.)
    assert np.isclose(waiting_time, 732.0)  # 30 days, 12 hours
def test_WaitingTime_combined_window_strategy_max_start_none(
        metocean_synth_long):

    test = WaitingTime(metocean_synth_long, max_start_delay=None)

    olc = {'maxHs': 0.5, 'maxTp': 0.5, 'maxWs': 0.5, 'maxCs': 0.5}

    windows = test.get_weather_windows(olc)
    start_date = dt.datetime(2000, 1, 1)

    start_delay, waiting_time = test._combined_window_strategy(
        windows, start_date, 12)

    assert np.isclose(start_delay, 17534)
    assert waiting_time == 0.