@Test
  public void testWindowTriggerTimeAlignment() {
    try {
      @SuppressWarnings("unchecked")
      final Output<StreamRecord<String>> mockOut = mock(Output.class);
      final StreamTask<?, ?> mockTask = createMockTask();

      AggregatingProcessingTimeWindowOperator<String, String> op;

      op =
          new AggregatingProcessingTimeWindowOperator<>(
              mockFunction,
              mockKeySelector,
              StringSerializer.INSTANCE,
              StringSerializer.INSTANCE,
              5000,
              1000);
      op.setup(mockTask, new StreamConfig(new Configuration()), mockOut);
      op.open();
      assertTrue(op.getNextSlideTime() % 1000 == 0);
      assertTrue(op.getNextEvaluationTime() % 1000 == 0);
      op.dispose();

      op =
          new AggregatingProcessingTimeWindowOperator<>(
              mockFunction,
              mockKeySelector,
              StringSerializer.INSTANCE,
              StringSerializer.INSTANCE,
              1000,
              1000);
      op.setup(mockTask, new StreamConfig(new Configuration()), mockOut);
      op.open();
      assertTrue(op.getNextSlideTime() % 1000 == 0);
      assertTrue(op.getNextEvaluationTime() % 1000 == 0);
      op.dispose();

      op =
          new AggregatingProcessingTimeWindowOperator<>(
              mockFunction,
              mockKeySelector,
              StringSerializer.INSTANCE,
              StringSerializer.INSTANCE,
              1500,
              1000);
      op.setup(mockTask, new StreamConfig(new Configuration()), mockOut);
      op.open();
      assertTrue(op.getNextSlideTime() % 500 == 0);
      assertTrue(op.getNextEvaluationTime() % 1000 == 0);
      op.dispose();

      op =
          new AggregatingProcessingTimeWindowOperator<>(
              mockFunction,
              mockKeySelector,
              StringSerializer.INSTANCE,
              StringSerializer.INSTANCE,
              1200,
              1100);
      op.setup(mockTask, new StreamConfig(new Configuration()), mockOut);
      op.open();
      assertTrue(op.getNextSlideTime() % 100 == 0);
      assertTrue(op.getNextEvaluationTime() % 1100 == 0);
      op.dispose();
    } catch (Exception e) {
      e.printStackTrace();
      fail(e.getMessage());
    }
  }
  @Test
  public void testWindowSizeAndSlide() {
    try {
      AggregatingProcessingTimeWindowOperator<String, String> op;

      op =
          new AggregatingProcessingTimeWindowOperator<>(
              mockFunction,
              mockKeySelector,
              StringSerializer.INSTANCE,
              StringSerializer.INSTANCE,
              5000,
              1000);
      assertEquals(5000, op.getWindowSize());
      assertEquals(1000, op.getWindowSlide());
      assertEquals(1000, op.getPaneSize());
      assertEquals(5, op.getNumPanesPerWindow());

      op =
          new AggregatingProcessingTimeWindowOperator<>(
              mockFunction,
              mockKeySelector,
              StringSerializer.INSTANCE,
              StringSerializer.INSTANCE,
              1000,
              1000);
      assertEquals(1000, op.getWindowSize());
      assertEquals(1000, op.getWindowSlide());
      assertEquals(1000, op.getPaneSize());
      assertEquals(1, op.getNumPanesPerWindow());

      op =
          new AggregatingProcessingTimeWindowOperator<>(
              mockFunction,
              mockKeySelector,
              StringSerializer.INSTANCE,
              StringSerializer.INSTANCE,
              1500,
              1000);
      assertEquals(1500, op.getWindowSize());
      assertEquals(1000, op.getWindowSlide());
      assertEquals(500, op.getPaneSize());
      assertEquals(3, op.getNumPanesPerWindow());

      op =
          new AggregatingProcessingTimeWindowOperator<>(
              mockFunction,
              mockKeySelector,
              StringSerializer.INSTANCE,
              StringSerializer.INSTANCE,
              1200,
              1100);
      assertEquals(1200, op.getWindowSize());
      assertEquals(1100, op.getWindowSlide());
      assertEquals(100, op.getPaneSize());
      assertEquals(12, op.getNumPanesPerWindow());
    } catch (Exception e) {
      e.printStackTrace();
      fail(e.getMessage());
    }
  }