/** Tests the standard aggregation behavior */ @Test public void testAggregation() { AggregateSummaryStatistics aggregate = new AggregateSummaryStatistics(); SummaryStatistics setOneStats = aggregate.createContributingStatistics(); SummaryStatistics setTwoStats = aggregate.createContributingStatistics(); Assert.assertNotNull("The set one contributing stats are null", setOneStats); Assert.assertNotNull("The set two contributing stats are null", setTwoStats); Assert.assertNotSame("Contributing stats objects are the same", setOneStats, setTwoStats); setOneStats.addValue(2); setOneStats.addValue(3); setOneStats.addValue(5); setOneStats.addValue(7); setOneStats.addValue(11); Assert.assertEquals("Wrong number of set one values", 5, setOneStats.getN()); Assert.assertTrue( "Wrong sum of set one values", Precision.equals(28.0, setOneStats.getSum(), 1)); setTwoStats.addValue(2); setTwoStats.addValue(4); setTwoStats.addValue(8); Assert.assertEquals("Wrong number of set two values", 3, setTwoStats.getN()); Assert.assertTrue( "Wrong sum of set two values", Precision.equals(14.0, setTwoStats.getSum(), 1)); Assert.assertEquals("Wrong number of aggregate values", 8, aggregate.getN()); Assert.assertTrue("Wrong aggregate sum", Precision.equals(42.0, aggregate.getSum(), 1)); }
/** * Verify that aggregating over a partition gives the same results as direct computation. * * <p>1) Randomly generate a dataset of 10-100 values from [-100, 100] 2) Divide the dataset it * into 2-5 partitions 3) Create an AggregateSummaryStatistic and ContributingStatistics for each * partition 4) Compare results from the AggregateSummaryStatistic with values returned by a * single SummaryStatistics instance that is provided the full dataset */ @Test public void testAggregationConsistency() { // Generate a random sample and random partition double[] totalSample = generateSample(); double[][] subSamples = generatePartition(totalSample); int nSamples = subSamples.length; // Create aggregator and total stats for comparison AggregateSummaryStatistics aggregate = new AggregateSummaryStatistics(); SummaryStatistics totalStats = new SummaryStatistics(); // Create array of component stats SummaryStatistics componentStats[] = new SummaryStatistics[nSamples]; for (int i = 0; i < nSamples; i++) { // Make componentStats[i] a contributing statistic to aggregate componentStats[i] = aggregate.createContributingStatistics(); // Add values from subsample for (int j = 0; j < subSamples[i].length; j++) { componentStats[i].addValue(subSamples[i][j]); } } // Compute totalStats directly for (int i = 0; i < totalSample.length; i++) { totalStats.addValue(totalSample[i]); } /* * Compare statistics in totalStats with aggregate. * Note that guaranteed success of this comparison depends on the * fact that <aggregate> gets values in exactly the same order * as <totalStats>. * */ Assert.assertEquals(totalStats.getSummary(), aggregate.getSummary()); }
/** * Create new <tt>SummaryStatistics</tt> from the <tt>AggregateSummaryStatistics</tt> for all * the stream's stats that are watched. */ public void clear() { downloadJitterMs = aggregateDownloadJitterMs.createContributingStatistics(); downloadPercentLoss = aggregateDownloadPercentLoss.createContributingStatistics(); downloadRateKiloBitPerSec = aggregateDownloadRateKiloBitPerSec.createContributingStatistics(); jitterBufferDelayMs = aggregateJitterBufferDelayMs.createContributingStatistics(); jitterBufferDelayPackets = aggregateJitterBufferDelayPackets.createContributingStatistics(); nbDiscarded = aggregateNbDiscarded.createContributingStatistics(); nbDiscardedFull = aggregateNbDiscardedFull.createContributingStatistics(); nbDiscardedLate = aggregateNbDiscardedLate.createContributingStatistics(); nbDiscardedReset = aggregateNbDiscardedReset.createContributingStatistics(); nbDiscardedShrink = aggregateNbDiscardedShrink.createContributingStatistics(); nbFec = aggregateNbFec.createContributingStatistics(); nbPackets = aggregateNbPackets.createContributingStatistics(); nbPacketsLost = aggregateNbPacketsLost.createContributingStatistics(); nbReceivedBytes = aggregateNbReceivedBytes.createContributingStatistics(); nbSentBytes = aggregateNbSentBytes.createContributingStatistics(); packetQueueCountPackets = aggregatePacketQueueCountPackets.createContributingStatistics(); packetQueueSize = aggregatePacketQueueSize.createContributingStatistics(); percentDiscarded = aggregatePercentDiscarded.createContributingStatistics(); rttMs = aggregateRttMs.createContributingStatistics(); uploadJitterMs = aggregateUploadJitterMs.createContributingStatistics(); uploadPercentLoss = aggregateUploadPercentLoss.createContributingStatistics(); uploadRateKiloBitPerSec = aggregateUploadRateKiloBitPerSec.createContributingStatistics(); }