/**
  * A method to test the compensatedPriorities() method.
  *
  * Requirements - NO PAST AD INFO
  * Test 1: Test with a zone of zero available impressions, and no linked ads, and
  *         ensure the returned ads array is empty, and the initial blank impression
  *         is one.
  * Test 2: Test with a zone of > zero available impressions, and no linked ads, and
  *         ensure the returned ads array is empty, and the initial blank impression
  *         is one.
  * Test 3: Test with a zone of zero available impressions, and linked ads with zero
  *         required impressions, and ensure the returned ads array has zero for all
  *         ad priorities, and the initial blank impression is one.
  * Test 4: Test with a zone of > zero available impressions, and linked ads with zero
  *         required impressions, and ensure the returned ads array has zero for all
  *         ad priorities, and the initial blank impression is one.
  * Test 5: Test with a zone of zero available impressions, and linked ads with > zero
  *         required impressions, and ensure the returned ads array has zero for all
  *         ad priorities, and the initial blank impression is one.
  * Test 6: Test with a zone of > zero available impressions, and linked ads with > zero
  *         required impressions, and ensure the returned priorities are correctly
  *         calculcated and scaled.
  *
  * Requirements - WITH PAST AD INFO
  * Test 7: Test with a zone of zero available impressions, and linked ads with zero
  *         required impressions, and ensure the returned ads array has zero for all
  *         ad priorities, and the initial blank impression is one.
  * Test 8: Test with a zone of > zero available impressions, and linked ads with zero
  *         required impressions, and ensure the returned ads array has zero for all
  *         ad priorities, and the initial blank impression is one.
  * Test 9: Test with a zone of zero available impressions, and linked ads with > zero
  *         required impressions, and ensure the returned ads array has zero for all
  *         ad priorities, and the initial blank impression is one.
  * Test 10: Test with a zone of > zero available impressions, and linked ads with > zero
  *          required impressions, but no past zone information, and ensure the returned
  *          priorities are correctly calculcated and scaled.
  * Test 11: Test with a zone of > zero available impressions, and linked ads with > zero
  *          required impressions, with past zone information, and ensure the returned
  *          priorities are correctly calculcated and scaled.
  * Test 12: Test with a factor that will be limited.
  * Test 13: Test with a factor that would be limited, but with deliveryLimitationChanged
  *          set and ensure that the priority factor is reset
  */
 function testCompensatedPriorities()
 {
     // Mock the OA_Dal_Maintenance_Priority class used in the constructor method
     $oDal = new $this->mockDal($this);
     $oServiceLocator =& OA_ServiceLocator::instance();
     $oServiceLocator->register('OA_Dal_Maintenance_Priority', $oDal);
     // Partially mock the OA_Maintenance_Priority_AdServer_Task_PriorityCompensation class
     $oPriorityCompensation = new PartialMock_OA_Maintenance_Priority_AdServer_Task_PriorityCompensation($this);
     $oPriorityCompensation->setReturnReference('_getDal', $oDal);
     $oPriorityCompensation->setReturnReference('_getOperationIntUtils', $oOperationInterval);
     $oPriorityCompensation->__construct();
     // Test 1
     $oZone = new OX_Maintenance_Priority_Zone(array('zoneid' => 1));
     $oZone->availableImpressions = 0;
     $result = $oPriorityCompensation->compensatedPriorities($oZone);
     $this->assertEqual(count($result['ads']), 0);
     $this->assertEqual($result['blank'], 1);
     // Test 2
     $oZone = new OX_Maintenance_Priority_Zone(array('zoneid' => 1));
     $oZone->availableImpressions = 100;
     $result = $oPriorityCompensation->compensatedPriorities($oZone);
     $this->assertEqual(count($result['ads']), 0);
     $this->assertEqual($result['blank'], 1);
     // Test 3
     $oZone = new OX_Maintenance_Priority_Zone(array('zoneid' => 1));
     $oZone->availableImpressions = 0;
     $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 1));
     $oAd->requiredImpressions = 0;
     $oAd->requestedImpressions = 0;
     $oZone->addAdvert($oAd);
     $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 2));
     $oAd->requiredImpressions = 0;
     $oAd->requestedImpressions = 0;
     $oZone->addAdvert($oAd);
     $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 3));
     $oAd->requiredImpressions = 0;
     $oAd->requestedImpressions = 0;
     $oZone->addAdvert($oAd);
     $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 9));
     $oAd->requiredImpressions = 0;
     $oAd->requestedImpressions = 0;
     $oZone->addAdvert($oAd);
     $result = $oPriorityCompensation->compensatedPriorities($oZone);
     $this->assertEqual(count($result['ads']), 4);
     $this->assertEqual($result['ads'][1]['ad_id'], 1);
     $this->assertEqual($result['ads'][1]['zone_id'], 1);
     $this->assertEqual($result['ads'][1]['priority'], 0);
     $this->assertEqual($result['ads'][1]['required_impressions'], 0);
     $this->assertEqual($result['ads'][1]['requested_impressions'], 0);
     $this->assertEqual($result['ads'][1]['priority_factor'], 1);
     $this->assertFalse($result['ads'][1]['priority_factor_limited']);
     $this->assertNull($result['ads'][1]['past_zone_traffic_fraction']);
     $this->assertEqual($result['ads'][2]['ad_id'], 2);
     $this->assertEqual($result['ads'][2]['zone_id'], 1);
     $this->assertEqual($result['ads'][2]['priority'], 0);
     $this->assertEqual($result['ads'][2]['required_impressions'], 0);
     $this->assertEqual($result['ads'][2]['requested_impressions'], 0);
     $this->assertEqual($result['ads'][2]['priority_factor'], 1);
     $this->assertFalse($result['ads'][2]['priority_factor_limited']);
     $this->assertNull($result['ads'][2]['past_zone_traffic_fraction']);
     $this->assertEqual($result['ads'][3]['ad_id'], 3);
     $this->assertEqual($result['ads'][3]['zone_id'], 1);
     $this->assertEqual($result['ads'][3]['priority'], 0);
     $this->assertEqual($result['ads'][3]['required_impressions'], 0);
     $this->assertEqual($result['ads'][3]['requested_impressions'], 0);
     $this->assertEqual($result['ads'][3]['priority_factor'], 1);
     $this->assertFalse($result['ads'][3]['priority_factor_limited']);
     $this->assertNull($result['ads'][3]['past_zone_traffic_fraction']);
     $this->assertEqual($result['ads'][9]['ad_id'], 9);
     $this->assertEqual($result['ads'][9]['zone_id'], 1);
     $this->assertEqual($result['ads'][9]['priority'], 0);
     $this->assertEqual($result['ads'][9]['required_impressions'], 0);
     $this->assertEqual($result['ads'][9]['requested_impressions'], 0);
     $this->assertEqual($result['ads'][9]['priority_factor'], 1);
     $this->assertFalse($result['ads'][9]['priority_factor_limited']);
     $this->assertNull($result['ads'][9]['past_zone_traffic_fraction']);
     $this->assertEqual($result['blank'], 1);
     // Test 4
     $oZone = new OX_Maintenance_Priority_Zone(array('zoneid' => 1));
     $oZone->availableImpressions = 100;
     $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 1));
     $oAd->requiredImpressions = 0;
     $oAd->requestedImpressions = 0;
     $oZone->addAdvert($oAd);
     $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 2));
     $oAd->requiredImpressions = 0;
     $oAd->requestedImpressions = 0;
     $oZone->addAdvert($oAd);
     $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 3));
     $oAd->requiredImpressions = 0;
     $oAd->requestedImpressions = 0;
     $oZone->addAdvert($oAd);
     $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 9));
     $oAd->requiredImpressions = 0;
     $oAd->requestedImpressions = 0;
     $oZone->addAdvert($oAd);
     $result = $oPriorityCompensation->compensatedPriorities($oZone);
     $this->assertEqual(count($result['ads']), 4);
     $this->assertEqual($result['ads'][1]['ad_id'], 1);
     $this->assertEqual($result['ads'][1]['zone_id'], 1);
     $this->assertEqual($result['ads'][1]['priority'], 0);
     $this->assertEqual($result['ads'][1]['required_impressions'], 0);
     $this->assertEqual($result['ads'][1]['requested_impressions'], 0);
     $this->assertEqual($result['ads'][1]['priority_factor'], 1);
     $this->assertFalse($result['ads'][1]['priority_factor_limited']);
     $this->assertNull($result['ads'][1]['past_zone_traffic_fraction']);
     $this->assertEqual($result['ads'][2]['ad_id'], 2);
     $this->assertEqual($result['ads'][2]['zone_id'], 1);
     $this->assertEqual($result['ads'][2]['priority'], 0);
     $this->assertEqual($result['ads'][2]['required_impressions'], 0);
     $this->assertEqual($result['ads'][2]['requested_impressions'], 0);
     $this->assertEqual($result['ads'][2]['priority_factor'], 1);
     $this->assertFalse($result['ads'][2]['priority_factor_limited']);
     $this->assertNull($result['ads'][2]['past_zone_traffic_fraction']);
     $this->assertEqual($result['ads'][3]['ad_id'], 3);
     $this->assertEqual($result['ads'][3]['zone_id'], 1);
     $this->assertEqual($result['ads'][3]['priority'], 0);
     $this->assertEqual($result['ads'][3]['required_impressions'], 0);
     $this->assertEqual($result['ads'][3]['requested_impressions'], 0);
     $this->assertEqual($result['ads'][3]['priority_factor'], 1);
     $this->assertFalse($result['ads'][3]['priority_factor_limited']);
     $this->assertNull($result['ads'][3]['past_zone_traffic_fraction']);
     $this->assertEqual($result['ads'][9]['ad_id'], 9);
     $this->assertEqual($result['ads'][9]['zone_id'], 1);
     $this->assertEqual($result['ads'][9]['priority'], 0);
     $this->assertEqual($result['ads'][9]['required_impressions'], 0);
     $this->assertEqual($result['ads'][9]['requested_impressions'], 0);
     $this->assertEqual($result['ads'][9]['priority_factor'], 1);
     $this->assertFalse($result['ads'][9]['priority_factor_limited']);
     $this->assertNull($result['ads'][9]['past_zone_traffic_fraction']);
     $this->assertEqual($result['blank'], 1);
     $this->assertEqual($result['blank'], 1);
     // Test 5
     $oZone = new OX_Maintenance_Priority_Zone(array('zoneid' => 1));
     $oZone->availableImpressions = 0;
     $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 1));
     $oAd->requiredImpressions = 10;
     $oAd->requestedImpressions = 10;
     $oZone->addAdvert($oAd);
     $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 2));
     $oAd->requiredImpressions = 20;
     $oAd->requestedImpressions = 20;
     $oZone->addAdvert($oAd);
     $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 3));
     $oAd->requiredImpressions = 30;
     $oAd->requestedImpressions = 30;
     $oZone->addAdvert($oAd);
     $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 9));
     $oAd->requiredImpressions = 40;
     $oAd->requestedImpressions = 40;
     $oZone->addAdvert($oAd);
     $result = $oPriorityCompensation->compensatedPriorities($oZone);
     $this->assertEqual(count($result['ads']), 4);
     $this->assertEqual($result['ads'][1]['ad_id'], 1);
     $this->assertEqual($result['ads'][1]['zone_id'], 1);
     $this->assertEqual($result['ads'][1]['priority'], 0);
     $this->assertEqual($result['ads'][1]['required_impressions'], 10);
     $this->assertEqual($result['ads'][1]['requested_impressions'], 10);
     $this->assertEqual($result['ads'][1]['priority_factor'], 1);
     $this->assertFalse($result['ads'][1]['priority_factor_limited']);
     $this->assertNull($result['ads'][1]['past_zone_traffic_fraction']);
     $this->assertEqual($result['ads'][2]['ad_id'], 2);
     $this->assertEqual($result['ads'][2]['zone_id'], 1);
     $this->assertEqual($result['ads'][2]['priority'], 0);
     $this->assertEqual($result['ads'][2]['required_impressions'], 20);
     $this->assertEqual($result['ads'][2]['requested_impressions'], 20);
     $this->assertEqual($result['ads'][2]['priority_factor'], 1);
     $this->assertFalse($result['ads'][2]['priority_factor_limited']);
     $this->assertNull($result['ads'][2]['past_zone_traffic_fraction']);
     $this->assertEqual($result['ads'][3]['ad_id'], 3);
     $this->assertEqual($result['ads'][3]['zone_id'], 1);
     $this->assertEqual($result['ads'][3]['priority'], 0);
     $this->assertEqual($result['ads'][3]['required_impressions'], 30);
     $this->assertEqual($result['ads'][3]['requested_impressions'], 30);
     $this->assertEqual($result['ads'][3]['priority_factor'], 1);
     $this->assertFalse($result['ads'][3]['priority_factor_limited']);
     $this->assertNull($result['ads'][3]['past_zone_traffic_fraction']);
     $this->assertEqual($result['ads'][9]['ad_id'], 9);
     $this->assertEqual($result['ads'][9]['zone_id'], 1);
     $this->assertEqual($result['ads'][9]['priority'], 0);
     $this->assertEqual($result['ads'][9]['required_impressions'], 40);
     $this->assertEqual($result['ads'][9]['requested_impressions'], 40);
     $this->assertEqual($result['ads'][9]['priority_factor'], 1);
     $this->assertFalse($result['ads'][9]['priority_factor_limited']);
     $this->assertNull($result['ads'][9]['past_zone_traffic_fraction']);
     $this->assertEqual($result['blank'], 1);
     // Test 6
     $oZone = new OX_Maintenance_Priority_Zone(array('zoneid' => 1));
     $oZone->availableImpressions = 100;
     $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 1));
     $oAd->requiredImpressions = 10;
     $oAd->requestedImpressions = 10;
     $oZone->addAdvert($oAd);
     $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 2));
     $oAd->requiredImpressions = 20;
     $oAd->requestedImpressions = 20;
     $oZone->addAdvert($oAd);
     $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 3));
     $oAd->requiredImpressions = 30;
     $oAd->requestedImpressions = 30;
     $oZone->addAdvert($oAd);
     $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 9));
     $oAd->requiredImpressions = 40;
     $oAd->requestedImpressions = 40;
     $oZone->addAdvert($oAd);
     $result = $oPriorityCompensation->compensatedPriorities($oZone);
     $this->assertEqual(count($result['ads']), 4);
     $this->assertEqual($result['ads'][1]['ad_id'], 1);
     $this->assertEqual($result['ads'][1]['zone_id'], 1);
     $this->assertEqual($result['ads'][1]['priority'], 0.1);
     $this->assertEqual($result['ads'][1]['required_impressions'], 10);
     $this->assertEqual($result['ads'][1]['requested_impressions'], 10);
     $this->assertEqual($result['ads'][1]['priority_factor'], 1);
     $this->assertFalse($result['ads'][1]['priority_factor_limited']);
     $this->assertNull($result['ads'][1]['past_zone_traffic_fraction']);
     $this->assertEqual($result['ads'][2]['ad_id'], 2);
     $this->assertEqual($result['ads'][2]['zone_id'], 1);
     $this->assertEqual($result['ads'][2]['priority'], 0.2);
     $this->assertEqual($result['ads'][2]['required_impressions'], 20);
     $this->assertEqual($result['ads'][2]['requested_impressions'], 20);
     $this->assertEqual($result['ads'][2]['priority_factor'], 1);
     $this->assertFalse($result['ads'][2]['priority_factor_limited']);
     $this->assertNull($result['ads'][2]['past_zone_traffic_fraction']);
     $this->assertEqual($result['ads'][3]['ad_id'], 3);
     $this->assertEqual($result['ads'][3]['zone_id'], 1);
     $this->assertEqual($result['ads'][3]['priority'], 0.3);
     $this->assertEqual($result['ads'][3]['required_impressions'], 30);
     $this->assertEqual($result['ads'][3]['requested_impressions'], 30);
     $this->assertEqual($result['ads'][3]['priority_factor'], 1);
     $this->assertFalse($result['ads'][3]['priority_factor_limited']);
     $this->assertNull($result['ads'][3]['past_zone_traffic_fraction']);
     $this->assertEqual($result['ads'][9]['ad_id'], 9);
     $this->assertEqual($result['ads'][9]['zone_id'], 1);
     $this->assertEqual($result['ads'][9]['priority'], 0.4);
     $this->assertEqual($result['ads'][9]['required_impressions'], 40);
     $this->assertEqual($result['ads'][9]['requested_impressions'], 40);
     $this->assertEqual($result['ads'][9]['priority_factor'], 1);
     $this->assertFalse($result['ads'][9]['priority_factor_limited']);
     $this->assertNull($result['ads'][9]['past_zone_traffic_fraction']);
     $this->assertEqual($result['blank'], 0);
     $oZone = new OX_Maintenance_Priority_Zone(array('zoneid' => 1));
     $oZone->availableImpressions = 200;
     $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 1));
     $oAd->requiredImpressions = 10;
     $oAd->requestedImpressions = 10;
     $oZone->addAdvert($oAd);
     $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 2));
     $oAd->requiredImpressions = 20;
     $oAd->requestedImpressions = 20;
     $oZone->addAdvert($oAd);
     $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 3));
     $oAd->requiredImpressions = 30;
     $oAd->requestedImpressions = 30;
     $oZone->addAdvert($oAd);
     $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 9));
     $oAd->requiredImpressions = 40;
     $oAd->requestedImpressions = 40;
     $oZone->addAdvert($oAd);
     $result = $oPriorityCompensation->compensatedPriorities($oZone);
     $this->assertEqual(count($result['ads']), 4);
     $this->assertEqual($result['ads'][1]['ad_id'], 1);
     $this->assertEqual($result['ads'][1]['zone_id'], 1);
     $this->assertEqual($result['ads'][1]['priority'], 0.05);
     $this->assertEqual($result['ads'][1]['required_impressions'], 10);
     $this->assertEqual($result['ads'][1]['requested_impressions'], 10);
     $this->assertEqual($result['ads'][1]['priority_factor'], 1);
     $this->assertFalse($result['ads'][1]['priority_factor_limited']);
     $this->assertNull($result['ads'][1]['past_zone_traffic_fraction']);
     $this->assertEqual($result['ads'][2]['ad_id'], 2);
     $this->assertEqual($result['ads'][2]['zone_id'], 1);
     $this->assertEqual($result['ads'][2]['priority'], 0.1);
     $this->assertEqual($result['ads'][2]['required_impressions'], 20);
     $this->assertEqual($result['ads'][2]['requested_impressions'], 20);
     $this->assertEqual($result['ads'][2]['priority_factor'], 1);
     $this->assertFalse($result['ads'][2]['priority_factor_limited']);
     $this->assertNull($result['ads'][2]['past_zone_traffic_fraction']);
     $this->assertEqual($result['ads'][3]['ad_id'], 3);
     $this->assertEqual($result['ads'][3]['zone_id'], 1);
     $this->assertEqual($result['ads'][3]['priority'], 0.15);
     $this->assertEqual($result['ads'][3]['required_impressions'], 30);
     $this->assertEqual($result['ads'][3]['requested_impressions'], 30);
     $this->assertEqual($result['ads'][3]['priority_factor'], 1);
     $this->assertFalse($result['ads'][3]['priority_factor_limited']);
     $this->assertNull($result['ads'][3]['past_zone_traffic_fraction']);
     $this->assertEqual($result['ads'][9]['ad_id'], 9);
     $this->assertEqual($result['ads'][9]['zone_id'], 1);
     $this->assertEqual($result['ads'][9]['priority'], 0.2);
     $this->assertEqual($result['ads'][9]['required_impressions'], 40);
     $this->assertEqual($result['ads'][9]['requested_impressions'], 40);
     $this->assertEqual($result['ads'][9]['priority_factor'], 1);
     $this->assertFalse($result['ads'][9]['priority_factor_limited']);
     $this->assertNull($result['ads'][9]['past_zone_traffic_fraction']);
     $this->assertEqual($result['blank'], 0.5);
     // Test 7
     $oZone = new OX_Maintenance_Priority_Zone(array('zoneid' => 1));
     $oZone->availableImpressions = 0;
     $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 1));
     $oAd->requiredImpressions = 0;
     $oAd->requestedImpressions = 0;
     $oAd->pastRequiredImpressions = 0;
     $oAd->pastActualImpressions = 5;
     $oZone->addAdvert($oAd);
     $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 2));
     $oAd->requiredImpressions = 0;
     $oAd->requestedImpressions = 0;
     $oAd->pastRequiredImpressions = 0;
     $oAd->pastActualImpressions = 5;
     $oZone->addAdvert($oAd);
     $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 3));
     $oAd->requiredImpressions = 0;
     $oAd->requestedImpressions = 0;
     $oAd->pastRequiredImpressions = 0;
     $oAd->pastActualImpressions = 5;
     $oZone->addAdvert($oAd);
     $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 9));
     $oAd->requiredImpressions = 0;
     $oAd->requestedImpressions = 0;
     $oAd->pastRequiredImpressions = 0;
     $oAd->pastActualImpressions = 5;
     $oZone->addAdvert($oAd);
     $result = $oPriorityCompensation->compensatedPriorities($oZone);
     $this->assertEqual(count($result['ads']), 4);
     $this->assertEqual($result['ads'][1]['ad_id'], 1);
     $this->assertEqual($result['ads'][1]['zone_id'], 1);
     $this->assertEqual($result['ads'][1]['priority'], 0);
     $this->assertEqual($result['ads'][1]['required_impressions'], 0);
     $this->assertEqual($result['ads'][1]['requested_impressions'], 0);
     $this->assertEqual($result['ads'][1]['priority_factor'], 1);
     $this->assertFalse($result['ads'][1]['priority_factor_limited']);
     $this->assertNull($result['ads'][1]['past_zone_traffic_fraction']);
     $this->assertEqual($result['ads'][2]['ad_id'], 2);
     $this->assertEqual($result['ads'][2]['zone_id'], 1);
     $this->assertEqual($result['ads'][2]['priority'], 0);
     $this->assertEqual($result['ads'][2]['required_impressions'], 0);
     $this->assertEqual($result['ads'][2]['requested_impressions'], 0);
     $this->assertEqual($result['ads'][2]['priority_factor'], 1);
     $this->assertFalse($result['ads'][2]['priority_factor_limited']);
     $this->assertNull($result['ads'][2]['past_zone_traffic_fraction']);
     $this->assertEqual($result['ads'][3]['ad_id'], 3);
     $this->assertEqual($result['ads'][3]['zone_id'], 1);
     $this->assertEqual($result['ads'][3]['priority'], 0);
     $this->assertEqual($result['ads'][3]['required_impressions'], 0);
     $this->assertEqual($result['ads'][3]['requested_impressions'], 0);
     $this->assertEqual($result['ads'][3]['priority_factor'], 1);
     $this->assertFalse($result['ads'][3]['priority_factor_limited']);
     $this->assertNull($result['ads'][3]['past_zone_traffic_fraction']);
     $this->assertEqual($result['ads'][9]['ad_id'], 9);
     $this->assertEqual($result['ads'][9]['zone_id'], 1);
     $this->assertEqual($result['ads'][9]['priority'], 0);
     $this->assertEqual($result['ads'][9]['required_impressions'], 0);
     $this->assertEqual($result['ads'][9]['requested_impressions'], 0);
     $this->assertEqual($result['ads'][9]['priority_factor'], 1);
     $this->assertFalse($result['ads'][9]['priority_factor_limited']);
     $this->assertNull($result['ads'][9]['past_zone_traffic_fraction']);
     $this->assertEqual($result['blank'], 1);
     // Test 8
     $oZone = new OX_Maintenance_Priority_Zone(array('zoneid' => 1));
     $oZone->availableImpressions = 100;
     $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 1));
     $oAd->requiredImpressions = 0;
     $oAd->requestedImpressions = 0;
     $oAd->pastRequiredImpressions = 10;
     $oAd->pastActualImpressions = 0;
     $oZone->addAdvert($oAd);
     $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 2));
     $oAd->requiredImpressions = 0;
     $oAd->requestedImpressions = 0;
     $oAd->pastRequiredImpressions = 10;
     $oAd->pastActualImpressions = 0;
     $oZone->addAdvert($oAd);
     $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 3));
     $oAd->requiredImpressions = 0;
     $oAd->requestedImpressions = 0;
     $oAd->pastRequiredImpressions = 10;
     $oAd->pastActualImpressions = 0;
     $oZone->addAdvert($oAd);
     $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 9));
     $oAd->requiredImpressions = 0;
     $oAd->requestedImpressions = 0;
     $oAd->pastRequiredImpressions = 10;
     $oAd->pastActualImpressions = 0;
     $oZone->addAdvert($oAd);
     $result = $oPriorityCompensation->compensatedPriorities($oZone);
     $this->assertEqual(count($result['ads']), 4);
     $this->assertEqual($result['ads'][1]['ad_id'], 1);
     $this->assertEqual($result['ads'][1]['zone_id'], 1);
     $this->assertEqual($result['ads'][1]['priority'], 0);
     $this->assertEqual($result['ads'][1]['required_impressions'], 0);
     $this->assertEqual($result['ads'][1]['requested_impressions'], 0);
     $this->assertEqual($result['ads'][1]['priority_factor'], 1);
     $this->assertFalse($result['ads'][1]['priority_factor_limited']);
     $this->assertNull($result['ads'][1]['past_zone_traffic_fraction']);
     $this->assertEqual($result['ads'][2]['ad_id'], 2);
     $this->assertEqual($result['ads'][2]['zone_id'], 1);
     $this->assertEqual($result['ads'][2]['priority'], 0);
     $this->assertEqual($result['ads'][2]['required_impressions'], 0);
     $this->assertEqual($result['ads'][2]['requested_impressions'], 0);
     $this->assertEqual($result['ads'][2]['priority_factor'], 1);
     $this->assertFalse($result['ads'][2]['priority_factor_limited']);
     $this->assertNull($result['ads'][2]['past_zone_traffic_fraction']);
     $this->assertEqual($result['ads'][3]['ad_id'], 3);
     $this->assertEqual($result['ads'][3]['zone_id'], 1);
     $this->assertEqual($result['ads'][3]['priority'], 0);
     $this->assertEqual($result['ads'][3]['required_impressions'], 0);
     $this->assertEqual($result['ads'][3]['requested_impressions'], 0);
     $this->assertEqual($result['ads'][3]['priority_factor'], 1);
     $this->assertFalse($result['ads'][3]['priority_factor_limited']);
     $this->assertNull($result['ads'][3]['past_zone_traffic_fraction']);
     $this->assertEqual($result['ads'][9]['ad_id'], 9);
     $this->assertEqual($result['ads'][9]['zone_id'], 1);
     $this->assertEqual($result['ads'][9]['priority'], 0);
     $this->assertEqual($result['ads'][9]['required_impressions'], 0);
     $this->assertEqual($result['ads'][9]['requested_impressions'], 0);
     $this->assertEqual($result['ads'][9]['priority_factor'], 1);
     $this->assertFalse($result['ads'][9]['priority_factor_limited']);
     $this->assertNull($result['ads'][9]['past_zone_traffic_fraction']);
     $this->assertEqual($result['blank'], 1);
     // Test 9
     $oZone = new OX_Maintenance_Priority_Zone(array('zoneid' => 1));
     $oZone->availableImpressions = 0;
     $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 1));
     $oAd->requiredImpressions = 10;
     $oAd->requestedImpressions = 10;
     $oAd->pastRequiredImpressions = 10;
     $oAd->pastActualImpressions = 0;
     $oZone->addAdvert($oAd);
     $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 2));
     $oAd->requiredImpressions = 20;
     $oAd->requestedImpressions = 20;
     $oAd->pastRequiredImpressions = 10;
     $oAd->pastActualImpressions = 0;
     $oZone->addAdvert($oAd);
     $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 3));
     $oAd->requiredImpressions = 30;
     $oAd->requestedImpressions = 30;
     $oAd->pastRequiredImpressions = 10;
     $oAd->pastActualImpressions = 0;
     $oZone->addAdvert($oAd);
     $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 9));
     $oAd->requiredImpressions = 40;
     $oAd->requestedImpressions = 40;
     $oAd->pastRequiredImpressions = 10;
     $oAd->pastActualImpressions = 0;
     $oZone->addAdvert($oAd);
     $result = $oPriorityCompensation->compensatedPriorities($oZone);
     $this->assertEqual(count($result['ads']), 4);
     $this->assertEqual($result['ads'][1]['ad_id'], 1);
     $this->assertEqual($result['ads'][1]['zone_id'], 1);
     $this->assertEqual($result['ads'][1]['priority'], 0);
     $this->assertEqual($result['ads'][1]['required_impressions'], 10);
     $this->assertEqual($result['ads'][1]['requested_impressions'], 10);
     $this->assertEqual($result['ads'][1]['priority_factor'], 1);
     $this->assertFalse($result['ads'][1]['priority_factor_limited']);
     $this->assertNull($result['ads'][1]['past_zone_traffic_fraction']);
     $this->assertEqual($result['ads'][2]['ad_id'], 2);
     $this->assertEqual($result['ads'][2]['zone_id'], 1);
     $this->assertEqual($result['ads'][2]['priority'], 0);
     $this->assertEqual($result['ads'][2]['required_impressions'], 20);
     $this->assertEqual($result['ads'][2]['requested_impressions'], 20);
     $this->assertEqual($result['ads'][2]['priority_factor'], 1);
     $this->assertFalse($result['ads'][2]['priority_factor_limited']);
     $this->assertNull($result['ads'][2]['past_zone_traffic_fraction']);
     $this->assertEqual($result['ads'][3]['ad_id'], 3);
     $this->assertEqual($result['ads'][3]['zone_id'], 1);
     $this->assertEqual($result['ads'][3]['priority'], 0);
     $this->assertEqual($result['ads'][3]['required_impressions'], 30);
     $this->assertEqual($result['ads'][3]['requested_impressions'], 30);
     $this->assertEqual($result['ads'][3]['priority_factor'], 1);
     $this->assertFalse($result['ads'][3]['priority_factor_limited']);
     $this->assertNull($result['ads'][3]['past_zone_traffic_fraction']);
     $this->assertEqual($result['ads'][9]['ad_id'], 9);
     $this->assertEqual($result['ads'][9]['zone_id'], 1);
     $this->assertEqual($result['ads'][9]['priority'], 0);
     $this->assertEqual($result['ads'][9]['required_impressions'], 40);
     $this->assertEqual($result['ads'][9]['requested_impressions'], 40);
     $this->assertEqual($result['ads'][9]['priority_factor'], 1);
     $this->assertFalse($result['ads'][9]['priority_factor_limited']);
     $this->assertNull($result['ads'][9]['past_zone_traffic_fraction']);
     $this->assertEqual($result['blank'], 1);
     // Test 10
     $oZone = new OX_Maintenance_Priority_Zone(array('zoneid' => 1));
     $oZone->availableImpressions = 100;
     $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 1));
     $oAd->requiredImpressions = 10;
     $oAd->requestedImpressions = 10;
     $oAd->pastRequiredImpressions = 10;
     $oAd->pastRequestedImpressions = 10;
     $oAd->pastActualImpressions = 5;
     $oZone->addAdvert($oAd);
     $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 2));
     $oAd->requiredImpressions = 20;
     $oAd->requestedImpressions = 20;
     $oAd->pastRequiredImpressions = 10;
     $oAd->pastRequestedImpressions = 10;
     $oAd->pastActualImpressions = 5;
     $oZone->addAdvert($oAd);
     $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 3));
     $oAd->requiredImpressions = 30;
     $oAd->requestedImpressions = 30;
     $oAd->pastRequiredImpressions = 10;
     $oAd->pastRequestedImpressions = 10;
     $oAd->pastActualImpressions = 5;
     $oZone->addAdvert($oAd);
     $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 9));
     $oAd->requiredImpressions = 40;
     $oAd->requestedImpressions = 40;
     $oAd->pastRequiredImpressions = 10;
     $oAd->pastRequestedImpressions = 10;
     $oAd->pastActualImpressions = 5;
     $oZone->addAdvert($oAd);
     $result = $oPriorityCompensation->compensatedPriorities($oZone);
     $this->assertEqual(count($result['ads']), 4);
     $this->assertEqual($result['ads'][1]['ad_id'], 1);
     $this->assertEqual($result['ads'][1]['zone_id'], 1);
     $this->assertEqual($result['ads'][1]['priority'], 0.1);
     $this->assertEqual($result['ads'][1]['required_impressions'], 10);
     $this->assertEqual($result['ads'][1]['requested_impressions'], 10);
     $this->assertEqual($result['ads'][1]['priority_factor'], 2);
     $this->assertFalse($result['ads'][1]['priority_factor_limited']);
     $this->assertEqual($result['ads'][2]['ad_id'], 2);
     $this->assertEqual($result['ads'][2]['zone_id'], 1);
     $this->assertEqual($result['ads'][2]['priority'], 0.2);
     $this->assertEqual($result['ads'][2]['required_impressions'], 20);
     $this->assertEqual($result['ads'][2]['requested_impressions'], 20);
     $this->assertEqual($result['ads'][2]['priority_factor'], 2);
     $this->assertFalse($result['ads'][2]['priority_factor_limited']);
     $this->assertEqual($result['ads'][3]['ad_id'], 3);
     $this->assertEqual($result['ads'][3]['zone_id'], 1);
     $this->assertEqual($result['ads'][3]['priority'], 0.3);
     $this->assertEqual($result['ads'][3]['required_impressions'], 30);
     $this->assertEqual($result['ads'][3]['requested_impressions'], 30);
     $this->assertEqual($result['ads'][3]['priority_factor'], 2);
     $this->assertFalse($result['ads'][3]['priority_factor_limited']);
     $this->assertEqual($result['ads'][9]['ad_id'], 9);
     $this->assertEqual($result['ads'][9]['zone_id'], 1);
     $this->assertEqual($result['ads'][9]['priority'], 0.4);
     $this->assertEqual($result['ads'][9]['required_impressions'], 40);
     $this->assertEqual($result['ads'][9]['requested_impressions'], 40);
     $this->assertEqual($result['ads'][9]['priority_factor'], 2);
     $this->assertFalse($result['ads'][9]['priority_factor_limited']);
     $this->assertEqual($result['blank'], 0);
     $oZone = new OX_Maintenance_Priority_Zone(array('zoneid' => 1));
     $oZone->availableImpressions = 400;
     $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 1));
     $oAd->requiredImpressions = 10;
     $oAd->requestedImpressions = 10;
     $oAd->pastRequiredImpressions = 10;
     $oAd->pastRequestedImpressions = 10;
     $oAd->pastActualImpressions = 5;
     $oZone->addAdvert($oAd);
     $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 2));
     $oAd->requiredImpressions = 20;
     $oAd->requestedImpressions = 20;
     $oAd->pastRequiredImpressions = 10;
     $oAd->pastRequestedImpressions = 10;
     $oAd->pastActualImpressions = 5;
     $oZone->addAdvert($oAd);
     $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 3));
     $oAd->requiredImpressions = 30;
     $oAd->requestedImpressions = 30;
     $oAd->pastRequiredImpressions = 10;
     $oAd->pastRequestedImpressions = 10;
     $oAd->pastActualImpressions = 5;
     $oZone->addAdvert($oAd);
     $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 9));
     $oAd->requiredImpressions = 40;
     $oAd->requestedImpressions = 40;
     $oAd->pastRequiredImpressions = 10;
     $oAd->pastRequestedImpressions = 10;
     $oAd->pastActualImpressions = 5;
     $oZone->addAdvert($oAd);
     $result = $oPriorityCompensation->compensatedPriorities($oZone);
     $this->assertEqual(count($result['ads']), 4);
     $this->assertEqual($result['ads'][1]['ad_id'], 1);
     $this->assertEqual($result['ads'][1]['zone_id'], 1);
     $this->assertEqual($result['ads'][1]['priority'], 0.025);
     $this->assertEqual($result['ads'][1]['required_impressions'], 10);
     $this->assertEqual($result['ads'][1]['requested_impressions'], 10);
     $this->assertEqual($result['ads'][1]['priority_factor'], 2);
     $this->assertFalse($result['ads'][1]['priority_factor_limited']);
     $this->assertEqual($result['ads'][2]['ad_id'], 2);
     $this->assertEqual($result['ads'][2]['zone_id'], 1);
     $this->assertEqual($result['ads'][2]['priority'], 0.05);
     $this->assertEqual($result['ads'][2]['required_impressions'], 20);
     $this->assertEqual($result['ads'][2]['requested_impressions'], 20);
     $this->assertEqual($result['ads'][2]['priority_factor'], 2);
     $this->assertFalse($result['ads'][2]['priority_factor_limited']);
     $this->assertEqual($result['ads'][3]['ad_id'], 3);
     $this->assertEqual($result['ads'][3]['zone_id'], 1);
     $this->assertEqual($result['ads'][3]['priority'], 0.075);
     $this->assertEqual($result['ads'][3]['required_impressions'], 30);
     $this->assertEqual($result['ads'][3]['requested_impressions'], 30);
     $this->assertEqual($result['ads'][3]['priority_factor'], 2);
     $this->assertFalse($result['ads'][3]['priority_factor_limited']);
     $this->assertEqual($result['ads'][9]['ad_id'], 9);
     $this->assertEqual($result['ads'][9]['zone_id'], 1);
     $this->assertEqual($result['ads'][9]['priority'], 0.1);
     $this->assertEqual($result['ads'][9]['required_impressions'], 40);
     $this->assertEqual($result['ads'][9]['requested_impressions'], 40);
     $this->assertEqual($result['ads'][9]['priority_factor'], 2);
     $this->assertFalse($result['ads'][9]['priority_factor_limited']);
     $this->assertEqual($result['blank'], 0.75);
     // Test 11
     $oZone = new OX_Maintenance_Priority_Zone(array('zoneid' => 1));
     $oZone->availableImpressions = 100;
     $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 1));
     $oAd->requiredImpressions = 10;
     $oAd->requestedImpressions = 10;
     $oAd->pastRequiredImpressions = 10;
     $oAd->pastRequestedImpressions = 10;
     $oAd->pastActualImpressions = 5;
     $oZone->addAdvert($oAd);
     $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 2));
     $oAd->requiredImpressions = 20;
     $oAd->requestedImpressions = 20;
     $oAd->pastRequiredImpressions = 20;
     $oAd->pastRequestedImpressions = 20;
     $oAd->pastActualImpressions = 10;
     $oZone->addAdvert($oAd);
     $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 3));
     $oAd->requiredImpressions = 30;
     $oAd->requestedImpressions = 30;
     $oAd->pastRequiredImpressions = 30;
     $oAd->pastRequestedImpressions = 30;
     $oAd->pastActualImpressions = 15;
     $oZone->addAdvert($oAd);
     $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 9));
     $oAd->requiredImpressions = 40;
     $oAd->requestedImpressions = 40;
     $oAd->pastRequiredImpressions = 40;
     $oAd->pastRequestedImpressions = 40;
     $oAd->pastActualImpressions = 20;
     $oZone->addAdvert($oAd);
     $result = $oPriorityCompensation->compensatedPriorities($oZone);
     $this->assertEqual(count($result['ads']), 4);
     $this->assertEqual($result['ads'][1]['ad_id'], 1);
     $this->assertEqual($result['ads'][1]['zone_id'], 1);
     $this->assertEqual($result['ads'][1]['priority'], 0.1);
     $this->assertEqual($result['ads'][1]['required_impressions'], 10);
     $this->assertEqual($result['ads'][1]['requested_impressions'], 10);
     $this->assertEqual($result['ads'][1]['priority_factor'], 2);
     $this->assertFalse($result['ads'][1]['priority_factor_limited']);
     $this->assertEqual($result['ads'][1]['past_zone_traffic_fraction'], 0.05);
     $this->assertEqual($result['ads'][2]['ad_id'], 2);
     $this->assertEqual($result['ads'][2]['zone_id'], 1);
     $this->assertEqual($result['ads'][2]['priority'], 0.2);
     $this->assertEqual($result['ads'][2]['required_impressions'], 20);
     $this->assertEqual($result['ads'][2]['requested_impressions'], 20);
     $this->assertEqual($result['ads'][2]['priority_factor'], 2);
     $this->assertFalse($result['ads'][2]['priority_factor_limited']);
     $this->assertEqual($result['ads'][2]['past_zone_traffic_fraction'], 0.1);
     $this->assertEqual($result['ads'][3]['ad_id'], 3);
     $this->assertEqual($result['ads'][3]['zone_id'], 1);
     $this->assertEqual($result['ads'][3]['priority'], 0.3);
     $this->assertEqual($result['ads'][3]['required_impressions'], 30);
     $this->assertEqual($result['ads'][3]['requested_impressions'], 30);
     $this->assertEqual($result['ads'][3]['priority_factor'], 2);
     $this->assertFalse($result['ads'][3]['priority_factor_limited']);
     $this->assertEqual($result['ads'][3]['past_zone_traffic_fraction'], 0.15);
     $this->assertEqual($result['ads'][9]['ad_id'], 9);
     $this->assertEqual($result['ads'][9]['zone_id'], 1);
     $this->assertEqual($result['ads'][9]['priority'], 0.4);
     $this->assertEqual($result['ads'][9]['required_impressions'], 40);
     $this->assertEqual($result['ads'][9]['requested_impressions'], 40);
     $this->assertEqual($result['ads'][9]['priority_factor'], 2);
     $this->assertFalse($result['ads'][9]['priority_factor_limited']);
     $this->assertEqual($result['ads'][9]['past_zone_traffic_fraction'], 0.2);
     $this->assertEqual($result['blank'], 0);
     $oZone = new OX_Maintenance_Priority_Zone(array('zoneid' => 1));
     $oZone->availableImpressions = 400;
     $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 1));
     $oAd->requiredImpressions = 10;
     $oAd->requestedImpressions = 10;
     $oAd->pastRequiredImpressions = 10;
     $oAd->pastRequestedImpressions = 10;
     $oAd->pastActualImpressions = 5;
     $oZone->addAdvert($oAd);
     $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 2));
     $oAd->requiredImpressions = 20;
     $oAd->requestedImpressions = 20;
     $oAd->pastRequiredImpressions = 10;
     $oAd->pastRequestedImpressions = 10;
     $oAd->pastActualImpressions = 5;
     $oZone->addAdvert($oAd);
     $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 3));
     $oAd->requiredImpressions = 30;
     $oAd->requestedImpressions = 30;
     $oAd->pastRequiredImpressions = 10;
     $oAd->pastRequestedImpressions = 10;
     $oAd->pastActualImpressions = 5;
     $oZone->addAdvert($oAd);
     $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 9));
     $oAd->requiredImpressions = 40;
     $oAd->requestedImpressions = 40;
     $oAd->pastRequiredImpressions = 10;
     $oAd->pastRequestedImpressions = 10;
     $oAd->pastActualImpressions = 5;
     $oZone->addAdvert($oAd);
     $result = $oPriorityCompensation->compensatedPriorities($oZone);
     $this->assertEqual(count($result['ads']), 4);
     $this->assertEqual($result['ads'][1]['ad_id'], 1);
     $this->assertEqual($result['ads'][1]['zone_id'], 1);
     $this->assertEqual($result['ads'][1]['priority'], 0.025);
     $this->assertEqual($result['ads'][1]['required_impressions'], 10);
     $this->assertEqual($result['ads'][1]['requested_impressions'], 10);
     $this->assertEqual($result['ads'][1]['priority_factor'], 2);
     $this->assertFalse($result['ads'][1]['priority_factor_limited']);
     $this->assertEqual($result['ads'][2]['ad_id'], 2);
     $this->assertEqual($result['ads'][2]['zone_id'], 1);
     $this->assertEqual($result['ads'][2]['priority'], 0.05);
     $this->assertEqual($result['ads'][2]['required_impressions'], 20);
     $this->assertEqual($result['ads'][2]['requested_impressions'], 20);
     $this->assertEqual($result['ads'][2]['priority_factor'], 2);
     $this->assertFalse($result['ads'][2]['priority_factor_limited']);
     $this->assertEqual($result['ads'][3]['ad_id'], 3);
     $this->assertEqual($result['ads'][3]['zone_id'], 1);
     $this->assertEqual($result['ads'][3]['priority'], 0.075);
     $this->assertEqual($result['ads'][3]['required_impressions'], 30);
     $this->assertEqual($result['ads'][3]['requested_impressions'], 30);
     $this->assertEqual($result['ads'][3]['priority_factor'], 2);
     $this->assertFalse($result['ads'][3]['priority_factor_limited']);
     $this->assertEqual($result['ads'][9]['ad_id'], 9);
     $this->assertEqual($result['ads'][9]['zone_id'], 1);
     $this->assertEqual($result['ads'][9]['priority'], 0.1);
     $this->assertEqual($result['ads'][9]['required_impressions'], 40);
     $this->assertEqual($result['ads'][9]['requested_impressions'], 40);
     $this->assertEqual($result['ads'][9]['priority_factor'], 2);
     $this->assertFalse($result['ads'][9]['priority_factor_limited']);
     $this->assertEqual($result['blank'], 0.75);
     // Test 12
     $value = 1.2 * mt_getrandmax();
     $oZone = new OX_Maintenance_Priority_Zone(array('zoneid' => 1));
     $oZone->availableImpressions = $value;
     $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 1));
     $oAd->requiredImpressions = $value;
     $oAd->requestedImpressions = $value;
     $oAd->pastRequiredImpressions = $value;
     $oAd->pastRequestedImpressions = $value;
     $oAd->pastActualImpressions = 1;
     $oAd->pastZoneTrafficFraction = 0;
     $oAd->pastAdZonePriorityFactor = 1;
     $oZone->addAdvert($oAd);
     $result = $oPriorityCompensation->compensatedPriorities($oZone);
     $this->assertEqual(count($result['ads']), 1);
     $this->assertEqual($result['ads'][1]['ad_id'], 1);
     $this->assertEqual($result['ads'][1]['zone_id'], 1);
     $this->assertEqual($result['ads'][1]['priority'], 1);
     $this->assertEqual($result['ads'][1]['required_impressions'], $value);
     $this->assertEqual($result['ads'][1]['requested_impressions'], $value);
     $this->assertEqual($result['ads'][1]['priority_factor'], 1 + (mt_getrandmax() - 1) / 2);
     $this->assertTrue($result['ads'][1]['priority_factor_limited']);
     $this->assertEqual($result['ads'][1]['past_zone_traffic_fraction'], 1 / $value);
     $this->assertEqual($result['blank'], 0);
     // Test 13
     $value = 1.2 * mt_getrandmax();
     $oZone = new OX_Maintenance_Priority_Zone(array('zoneid' => 1));
     $oZone->availableImpressions = $value;
     $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 1));
     $oAd->deliveryLimitationChanged = true;
     $oAd->requiredImpressions = $value;
     $oAd->requestedImpressions = $value;
     $oAd->pastRequiredImpressions = $value;
     $oAd->pastRequestedImpressions = $value;
     $oAd->pastActualImpressions = 1;
     $oAd->pastZoneTrafficFraction = 0;
     $oAd->pastAdZonePriorityFactor = 1;
     $oZone->addAdvert($oAd);
     $result = $oPriorityCompensation->compensatedPriorities($oZone);
     $this->assertEqual(count($result['ads']), 1);
     $this->assertEqual($result['ads'][1]['ad_id'], 1);
     $this->assertEqual($result['ads'][1]['zone_id'], 1);
     $this->assertEqual($result['ads'][1]['priority'], 1);
     $this->assertEqual($result['ads'][1]['required_impressions'], $value);
     $this->assertEqual($result['ads'][1]['requested_impressions'], $value);
     $this->assertEqual($result['ads'][1]['priority_factor'], 1);
     $this->assertFalse($result['ads'][1]['priority_factor_limited']);
     $this->assertNull($result['ads'][1]['past_zone_traffic_fraction']);
     $this->assertEqual($result['blank'], 0);
 }