public OperatorStats add(OperatorStats operatorStats)
    {
        return add(ImmutableList.of(operatorStats));
    }
@Test
    public void testAdd()
    {
        OperatorStats actual = EXPECTED.add(ImmutableList.of(EXPECTED, EXPECTED));

        assertEquals(actual.getStageId(), 0);
        assertEquals(actual.getStageExecutionId(), 10);
        assertEquals(actual.getOperatorId(), 41);
        assertEquals(actual.getOperatorType(), "test");

        assertEquals(actual.getTotalDrivers(), 3 * 1);
        assertEquals(actual.getAddInputCalls(), 3 * 2);
        assertEquals(actual.getAddInputWall(), new Duration(3 * 3, NANOSECONDS));
        assertEquals(actual.getAddInputCpu(), new Duration(3 * 4, NANOSECONDS));
        assertEquals(actual.getAddInputAllocation(), new DataSize(3 * 123, BYTE));
        assertEquals(actual.getRawInputDataSize(), new DataSize(3 * 5, BYTE));
        assertEquals(actual.getInputDataSize(), new DataSize(3 * 6, BYTE));
        assertEquals(actual.getInputPositions(), 3 * 7);
        assertEquals(actual.getSumSquaredInputPositions(), 3 * 8.0);

        assertEquals(actual.getGetOutputCalls(), 3 * 9);
        assertEquals(actual.getGetOutputWall(), new Duration(3 * 10, NANOSECONDS));
        assertEquals(actual.getGetOutputCpu(), new Duration(3 * 11, NANOSECONDS));
        assertEquals(actual.getGetOutputAllocation(), new DataSize(3 * 234, BYTE));
        assertEquals(actual.getOutputDataSize(), new DataSize(3 * 12, BYTE));
        assertEquals(actual.getOutputPositions(), 3 * 13);

        assertEquals(actual.getPhysicalWrittenDataSize(), new DataSize(3 * 14, BYTE));
        assertEquals(actual.getAdditionalCpu(), new Duration(3 * 100, NANOSECONDS));
        assertEquals(actual.getBlockedWall(), new Duration(3 * 15, NANOSECONDS));

        assertEquals(actual.getFinishCalls(), 3 * 16);
        assertEquals(actual.getFinishWall(), new Duration(3 * 17, NANOSECONDS));
        assertEquals(actual.getFinishCpu(), new Duration(3 * 18, NANOSECONDS));
        assertEquals(actual.getFinishAllocation(), new DataSize(3 * 345, BYTE));

        assertEquals(actual.getUserMemoryReservation().toBytes(), Long.MAX_VALUE);
        assertEquals(actual.getRevocableMemoryReservation(), new DataSize(3 * 20, BYTE));
        assertEquals(actual.getSystemMemoryReservation(), new DataSize(3 * 21, BYTE));
        assertEquals(actual.getPeakUserMemoryReservation(), new DataSize(22, BYTE));
        assertEquals(actual.getPeakSystemMemoryReservation(), new DataSize(23, BYTE));
        assertEquals(actual.getPeakTotalMemoryReservation(), new DataSize(24, BYTE));
        assertEquals(actual.getSpilledDataSize(), new DataSize(3 * 25, BYTE));
        assertNull(actual.getInfo());
        RuntimeMetric expectedMetric = RuntimeMetric.merge(TEST_RUNTIME_METRIC_1, TEST_RUNTIME_METRIC_1);
        expectedMetric.mergeWith(TEST_RUNTIME_METRIC_1);
        assertRuntimeMetricEquals(actual.getRuntimeStats().getMetric(TEST_METRIC_NAME), expectedMetric);
        assertEquals(actual.getDynamicFilterStats().getProducerNodeIds(), TEST_DYNAMIC_FILTER_STATS_1.getProducerNodeIds());
    }