@Test
public void testMultipleTimeWindowsPredicate() {

    TimeWindow timeWindow1 = TimeWindow.newBuilder()
            .withDays(Day.Monday, Day.Tuesday, Day.Wednesday, Day.Thursday)
            .withwithHourlyTimeWindows(8, 11, 13, 16)
            .build();
    TimeWindow timeWindow2 = TimeWindow.newBuilder()
            .withDays(Day.Friday)
            .withwithHourlyTimeWindows(8, 13)
            .build();
    Supplier<Boolean> predicate = TimeWindowFunctions.isInTimeWindowPredicate(titusRuntime, asList(timeWindow1, timeWindow2));
    // Wednesday
    clock.jumpForwardTo(DayOfWeek.WEDNESDAY).resetTime(7, 0, 0);
    assertThat(predicate.get()).isFalse();
    clock.jumpForwardTo(DayOfWeek.WEDNESDAY).resetTime(10, 0, 0);
    assertThat(predicate.get()).isTrue();
    clock.jumpForwardTo(DayOfWeek.WEDNESDAY).resetTime(12, 0, 0);
    assertThat(predicate.get()).isFalse();
    clock.jumpForwardTo(DayOfWeek.WEDNESDAY).resetTime(15, 0, 0);
    assertThat(predicate.get()).isTrue();
    clock.jumpForwardTo(DayOfWeek.WEDNESDAY).resetTime(18, 0, 0);
    assertThat(predicate.get()).isFalse();
    // Friday
    clock.jumpForwardTo(DayOfWeek.FRIDAY).resetTime(7, 0, 0);
    assertThat(predicate.get()).isFalse();
    clock.jumpForwardTo(DayOfWeek.FRIDAY).resetTime(12, 0, 0);
    assertThat(predicate.get()).isTrue();
    clock.jumpForwardTo(DayOfWeek.FRIDAY).resetTime(15, 0, 0);
    assertThat(predicate.get()).isFalse();
}