function test_getAverageValue()
 {
     $tr = new tx_caretaker_TestResultRange(500, 1000);
     $tr->addResult(new tx_caretaker_TestResult(500, tx_caretaker_Constants::state_ok, 10, ''));
     $tr->addResult(new tx_caretaker_TestResult(750, tx_caretaker_Constants::state_ok, 20, ''));
     $tr->addResult(new tx_caretaker_TestResult(1000, tx_caretaker_Constants::state_ok, 20, ''));
     $this->assertEquals($tr->getAverageValue(500, 1000), 15, 'average value fails');
     $tr = new tx_caretaker_TestResultRange(500, 1000);
     $tr->addResult(new tx_caretaker_TestResult(500, tx_caretaker_Constants::state_ok, 10, ''));
     $tr->addResult(new tx_caretaker_TestResult(750, tx_caretaker_Constants::state_ok, 20, ''));
     $this->assertEquals($tr->getAverageValue(), 10, 'average value fails');
     $tr = new tx_caretaker_TestResultRange(500, 1000);
     $tr->addResult(new tx_caretaker_TestResult(800, tx_caretaker_Constants::state_ok, 10, ''));
     $tr->addResult(new tx_caretaker_TestResult(900, tx_caretaker_Constants::state_ok, 20, ''));
     $tr->addResult(new tx_caretaker_TestResult(1000, tx_caretaker_Constants::state_ok, 20, ''));
     $this->assertEquals($tr->getAverageValue(), 15, 'average value fails');
     $tr = new tx_caretaker_TestResultRange(500, 1000);
     $tr->addResult(new tx_caretaker_TestResult(500, tx_caretaker_Constants::state_ok, 10, ''));
     $tr->addResult(new tx_caretaker_TestResult(900, tx_caretaker_Constants::state_ok, 20, ''));
     $tr->addResult(new tx_caretaker_TestResult(1000, tx_caretaker_Constants::state_ok, 20, ''));
     $this->assertEquals($tr->getAverageValue(), 12, 'average value fails');
     $tr = new tx_caretaker_TestResultRange(500, 1000);
     $tr->addResult(new tx_caretaker_TestResult(750, tx_caretaker_Constants::state_ok, 10, ''));
     $this->assertEquals($tr->getAverageValue(), 0, 'average value fails');
 }
 /**
  * Get the ResultRange for the given Instance Test and the timerange
  *
  * @param tx_caretaker_TestNode $testNode
  * @param integer $start_timestamp
  * @param integer $stop_timestamp
  * @param boolean $graph By default the result range is created for the graph, so the last result is added again at the end
  * @return tx_caretaker_TestResultRange
  */
 public function getRangeByNode(tx_caretaker_TestNode $testNode, $start_timestamp, $stop_timestamp, $graph = true)
 {
     $testUID = $testNode->getUid();
     $instanceUID = $testNode->getInstance()->getUid();
     $result_range = new tx_caretaker_TestResultRange($start_timestamp, $stop_timestamp);
     $base_condition = 'test_uid=' . $testUID . ' AND instance_uid=' . $instanceUID . ' ';
     $GLOBALS['TYPO3_DB']->store_lastBuiltQuery = TRUE;
     $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('*', 'tx_caretaker_testresult', $base_condition . 'AND tstamp >=' . $start_timestamp . ' AND tstamp <=' . $stop_timestamp, '', 'tstamp ASC');
     $last = 0;
     while ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
         $result = $this->dbrow2instance($row);
         $result_range->addResult($result);
     }
     // add first value if needed
     $first = $result_range->getFirst();
     if (!$first || $first && $first->getTstamp() > $start_timestamp) {
         $GLOBALS['TYPO3_DB']->store_lastBuiltQuery = TRUE;
         $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('*', 'tx_caretaker_testresult', $base_condition . ' AND tstamp <' . $start_timestamp, '', 'tstamp DESC', 1);
         if ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
             $row['tstamp'] = $start_timestamp;
             $result = $this->dbrow2instance($row);
             $result_range->addResult($result, 'first');
         }
     }
     // add last value if needed
     $last = $result_range->getLast();
     if ($last && $last->getTstamp() < $stop_timestamp) {
         if ($graph) {
             $real_last = new tx_caretaker_TestResult($stop_timestamp, $last->getState(), $last->getValue(), $last->getMessage()->getText(), $last->getSubMessages());
             $result_range->addResult($real_last);
         }
     }
     return $result_range;
 }