static function calcularComRegrasMaxVMOutIn($scenario, $maxVM) { $unwanted = 0; $all = array_product($scenario['rvm']); foreach ($scenario['rpm'] as $pmName => $numOfVMsInPM) { $unwantedLocal = 0; if ($numOfVMsInPM > $maxVM) { list($out, $in) = Approximation::getOutsidersInsiders($pmName, $scenario); for ($i = $maxVM + 1; $i <= $numOfVMsInPM; $i++) { $inConsolidated = Approximation::getInsidersCombinations($in, $numOfVMsInPM - $i); $unwantedLocal += $out * $inConsolidated; } } $unwanted += $unwantedLocal; } return $all - $unwanted; }
/** * @depends testgetOutsidersInsiders */ public function testgetInsidersCombinations() { $insiders = array(2, 1, 0, 2, 3); $this->assertEquals(1, Approximation::getInsidersCombinations($insiders, 0)); $this->assertEquals(8, Approximation::getInsidersCombinations($insiders, 1)); $this->assertEquals(23, Approximation::getInsidersCombinations($insiders, 2)); $this->assertEquals(28, Approximation::getInsidersCombinations($insiders, 3)); $insiders = array(2, 1, 2, 1, 1, 1); $this->assertEquals(44, Approximation::getInsidersCombinations($insiders, 3)); //$this->assertEquals(array(),Approximation::_getInsidersCombinations($insiders,2)); }