コード例 #1
0
  @Test
  public void testAggregateSpecialValues() {
    double[] totalSample = {Double.POSITIVE_INFINITY, 2, 3, Double.NaN, 5};
    double[][] subSamples = {{Double.POSITIVE_INFINITY, 2}, {3}, {Double.NaN}, {5}};

    // Compute combined stats directly
    SummaryStatistics totalStats = new SummaryStatistics();
    for (int i = 0; i < totalSample.length; i++) {
      totalStats.addValue(totalSample[i]);
    }

    // Now compute subsample stats individually and aggregate
    SummaryStatistics[] subSampleStats = new SummaryStatistics[5];
    for (int i = 0; i < 4; i++) {
      subSampleStats[i] = new SummaryStatistics();
    }
    Collection<SummaryStatistics> aggregate = new ArrayList<SummaryStatistics>();
    for (int i = 0; i < 4; i++) {
      for (int j = 0; j < subSamples[i].length; j++) {
        subSampleStats[i].addValue(subSamples[i][j]);
      }
      aggregate.add(subSampleStats[i]);
    }

    // Compare values
    StatisticalSummaryValues aggregatedStats = AggregateSummaryStatistics.aggregate(aggregate);
    assertEquals(totalStats.getSummary(), aggregatedStats, 10E-12);
  }
コード例 #2
0
  /** Similar to {@link #testAggregate()} but operating on {@link StatisticalSummary} instead. */
  @Test
  public void testAggregateStatisticalSummary() {

    // Generate a random sample and random partition
    double[] totalSample = generateSample();
    double[][] subSamples = generatePartition(totalSample);
    int nSamples = subSamples.length;

    // Compute combined stats directly
    SummaryStatistics totalStats = new SummaryStatistics();
    for (int i = 0; i < totalSample.length; i++) {
      totalStats.addValue(totalSample[i]);
    }

    // Now compute subsample stats individually and aggregate
    SummaryStatistics[] subSampleStats = new SummaryStatistics[nSamples];
    for (int i = 0; i < nSamples; i++) {
      subSampleStats[i] = new SummaryStatistics();
    }
    Collection<StatisticalSummary> aggregate = new ArrayList<StatisticalSummary>();
    for (int i = 0; i < nSamples; i++) {
      for (int j = 0; j < subSamples[i].length; j++) {
        subSampleStats[i].addValue(subSamples[i][j]);
      }
      aggregate.add(subSampleStats[i].getSummary());
    }

    // Compare values
    StatisticalSummary aggregatedStats = AggregateSummaryStatistics.aggregate(aggregate);
    assertEquals(totalStats.getSummary(), aggregatedStats, 10E-12);
  }
コード例 #3
0
  /**
   * 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());
  }
コード例 #4
0
 /**
  * Get the Variance of all the stats that are watched, for all the stats added with add() since
  * the last call to clear() (in JSON).
  *
  * @return The Variance of all the stats since last clear() in JSON.
  */
 public String getVarianceJSON() {
   String str =
       String.format(
           FakeUserStats.jsonMediaStreamStatsTemplate,
           -1, // ssrc not needed here
           downloadJitterMs.getVariance(),
           downloadPercentLoss.getVariance(),
           downloadRateKiloBitPerSec.getVariance(),
           jitterBufferDelayMs.getVariance(),
           jitterBufferDelayPackets.getVariance(),
           nbDiscarded.getVariance(),
           nbDiscardedFull.getVariance(),
           nbDiscardedLate.getVariance(),
           nbDiscardedReset.getVariance(),
           nbDiscardedShrink.getVariance(),
           nbFec.getVariance(),
           nbPackets.getVariance(),
           nbPacketsLost.getVariance(),
           nbReceivedBytes.getVariance(),
           nbSentBytes.getVariance(),
           packetQueueCountPackets.getVariance(),
           packetQueueSize.getVariance(),
           percentDiscarded.getVariance(),
           rttMs.getVariance(),
           uploadJitterMs.getVariance(),
           uploadPercentLoss.getVariance(),
           uploadRateKiloBitPerSec.getVariance());
   return str;
 }
コード例 #5
0
 /**
  * Add the stats contained by <tt>stats<tt> to their corresponding <tt>SummaryStats</tt>
  * objects.
  *
  * @param stats the stats of a stream that will be added.
  */
 public void add(MediaStreamStats stats) {
   downloadJitterMs.addValue(stats.getDownloadJitterMs());
   downloadPercentLoss.addValue(stats.getDownloadPercentLoss());
   downloadRateKiloBitPerSec.addValue(stats.getDownloadRateKiloBitPerSec());
   jitterBufferDelayMs.addValue(stats.getJitterBufferDelayMs());
   jitterBufferDelayPackets.addValue(stats.getJitterBufferDelayPackets());
   nbDiscarded.addValue(stats.getNbDiscarded());
   nbDiscardedFull.addValue(stats.getNbDiscardedFull());
   nbDiscardedLate.addValue(stats.getNbDiscardedLate());
   nbDiscardedReset.addValue(stats.getNbDiscardedReset());
   nbDiscardedShrink.addValue(stats.getNbDiscardedShrink());
   nbFec.addValue(stats.getNbFec());
   nbPackets.addValue(stats.getNbPackets());
   nbPacketsLost.addValue(stats.getNbPacketsLost());
   nbReceivedBytes.addValue(stats.getNbReceivedBytes());
   nbSentBytes.addValue(stats.getNbSentBytes());
   packetQueueCountPackets.addValue(stats.getPacketQueueCountPackets());
   packetQueueSize.addValue(stats.getPacketQueueSize());
   percentDiscarded.addValue(stats.getPercentDiscarded());
   rttMs.addValue(stats.getRttMs());
   uploadJitterMs.addValue(stats.getUploadJitterMs());
   uploadPercentLoss.addValue(stats.getUploadPercentLoss());
   uploadRateKiloBitPerSec.addValue(stats.getUploadRateKiloBitPerSec());
 }
コード例 #6
0
  /** 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));
  }