Skip to content

Commit

Permalink
GH-91 Write tests for calculateValuePrioritizedResourcesPillage()
Browse files Browse the repository at this point in the history
  • Loading branch information
mdziekon committed Mar 25, 2020
1 parent fec73ca commit 2fac790
Showing 1 changed file with 251 additions and 0 deletions.
251 changes: 251 additions & 0 deletions modules/flights/utils/missions.utils.UETest.php
Original file line number Diff line number Diff line change
Expand Up @@ -256,3 +256,254 @@ public function itShouldProperlyPillageMixedResourceAmountsWhenTheresNotEnoughSt
);
}
}



/**
* @group UniEngineTest
*/
class CalculateValuePrioritizedResourcesPillageTestCase extends TestCase {
/**
* @test
* @testWith [ 0.5, 500000 ]
* [ 0.7, 700000 ]
*/
public function itShouldPillageLimitedAmountOfResources($maxPillagePercentage, $maxPillagePerResource) {
$params = [
'planet' => [
'metal' => 1000000,
'crystal' => 1000000,
'deuterium' => 1000000,
],
'maxPillagePercentage' => $maxPillagePercentage,
'fleetTotalStorage' => 100000000,
];

$result = Missions\calculateValuePrioritizedResourcesPillage($params);

$this->assertEquals(
[
'metal' => $maxPillagePerResource,
'crystal' => $maxPillagePerResource,
'deuterium' => $maxPillagePerResource,
],
$result
);
}

/**
* @test
*/
public function itShouldEvenlyDistributePillageResourcesWhenStorageIsLimited() {
$params = [
'planet' => [
'metal' => 1000000,
'crystal' => 1000000,
'deuterium' => 1000000,
],
'maxPillagePercentage' => 0.5,
'fleetTotalStorage' => 1000000,
];

$result = Missions\calculateValuePrioritizedResourcesPillage($params);

$this->assertEquals(
[
'metal' => 333333,
'crystal' => 333333,
'deuterium' => 333333,
],
$result
);
}

/**
* @test
* @testWith ["metal"]
* ["crystal"]
* ["deuterium"]
*/
public function itShouldUseEntireStorageWhenOnlyOneResourceCanBePillaged($resourceKey) {
$planet = [
'metal' => 0,
'crystal' => 0,
'deuterium' => 0,
];
$planet[$resourceKey] = 1000000;

$params = [
'planet' => $planet,
'maxPillagePercentage' => 0.5,
'fleetTotalStorage' => 500000,
];

$result = Missions\calculateValuePrioritizedResourcesPillage($params);

$expectedPillage = [
'metal' => 0,
'crystal' => 0,
'deuterium' => 0,
];
$expectedPillage[$resourceKey] = 500000;

$this->assertEquals(
$expectedPillage,
$result
);
}

/**
* @test
* @testWith ["metal"]
* ["crystal"]
* ["deuterium"]
*/
public function itShouldEvenlyUseAvailableStorageWhenOneOfResourcesCannotBePillaged($resourceKey) {
$planet = [
'metal' => 1000000,
'crystal' => 1000000,
'deuterium' => 1000000,
];
$planet[$resourceKey] = 0;

$params = [
'planet' => $planet,
'maxPillagePercentage' => 0.5,
'fleetTotalStorage' => 1000000,
];

$result = Missions\calculateValuePrioritizedResourcesPillage($params);

$expectedPillage = [
'metal' => 500000,
'crystal' => 500000,
'deuterium' => 500000,
];
$expectedPillage[$resourceKey] = 0;

$this->assertEquals(
$expectedPillage,
$result
);
}

/**
* @test
*/
public function itShouldProperlyPillageMixedResourceAmountsWhenTheresEnoughStorage() {
$planet = [
'metal' => 1500000,
'crystal' => 2000000,
'deuterium' => 700000,
];

$params = [
'planet' => $planet,
'maxPillagePercentage' => 0.5,
'fleetTotalStorage' => 10000000,
];

$result = Missions\calculateValuePrioritizedResourcesPillage($params);

$expectedPillage = [
'metal' => 750000,
'crystal' => 1000000,
'deuterium' => 350000,
];

$this->assertEquals(
$expectedPillage,
$result
);
}

/**
* @test
* @testWith [ [ "metal", "crystal", "deuterium" ], [ 999999, 700000, 50000 ] ]
* [ [ "metal", "deuterium", "crystal" ], [ 999999, 700000, 50000 ] ]
* [ [ "crystal", "metal", "deuterium" ], [ 999999, 700000, 50000 ] ]
* [ [ "crystal", "deuterium", "metal" ], [ 1000000, 700000, 50000 ] ]
* [ [ "deuterium", "metal", "crystal" ], [ 1000000, 699999, 50000 ] ]
* [ [ "deuterium", "crystal", "metal" ], [ 1000000, 700000, 50000 ] ]
*/
public function itShouldProperlyPillageMixedResourceAmountsWhenTheresExactlyEnoughStorage(
$orderedResourceKeys,
$expectedPillagePerKey
) {
$planet = [
'metal' => 0,
'crystal' => 0,
'deuterium' => 0,
];
$planet[$orderedResourceKeys[0]] = 2000000;
$planet[$orderedResourceKeys[1]] = 1400000;
$planet[$orderedResourceKeys[2]] = 100000;

$params = [
'planet' => $planet,
'maxPillagePercentage' => 0.5,
'fleetTotalStorage' => 1750000,
];

$result = Missions\calculateValuePrioritizedResourcesPillage($params);

$expectedPillage = [
'metal' => 0,
'crystal' => 0,
'deuterium' => 0,
];
$expectedPillage[$orderedResourceKeys[0]] = $expectedPillagePerKey[0];
$expectedPillage[$orderedResourceKeys[1]] = $expectedPillagePerKey[1];
$expectedPillage[$orderedResourceKeys[2]] = $expectedPillagePerKey[2];

$this->assertEquals(
$expectedPillage,
$result
);
}

/**
* @test
* @testWith [ [ "metal", "crystal", "deuterium" ], [ 482500, 482500, 35000 ] ]
* [ [ "metal", "deuterium", "crystal" ], [ 333333, 631666, 35000 ] ]
* [ [ "crystal", "metal", "deuterium" ], [ 482500, 482500, 35000 ] ]
* [ [ "crystal", "deuterium", "metal" ], [ 482500, 482500, 35000 ] ]
* [ [ "deuterium", "metal", "crystal" ], [ 631666, 333333, 35000 ] ]
* [ [ "deuterium", "crystal", "metal" ], [ 482500, 482500, 35000 ] ]
*/
public function itShouldProperlyPillageMixedResourceAmountsWhenTheresNotEnoughStorage(
$orderedResourceKeys,
$expectedPillagePerKey
) {
$planet = [
'metal' => 0,
'crystal' => 0,
'deuterium' => 0,
];
$planet[$orderedResourceKeys[0]] = 2000000;
$planet[$orderedResourceKeys[1]] = 1500000;
$planet[$orderedResourceKeys[2]] = 70000;

$params = [
'planet' => $planet,
'maxPillagePercentage' => 0.5,
'fleetTotalStorage' => 1000000,
];

$result = Missions\calculateValuePrioritizedResourcesPillage($params);

$expectedPillage = [
'metal' => 0,
'crystal' => 0,
'deuterium' => 0,
];
$expectedPillage[$orderedResourceKeys[0]] = $expectedPillagePerKey[0];
$expectedPillage[$orderedResourceKeys[1]] = $expectedPillagePerKey[1];
$expectedPillage[$orderedResourceKeys[2]] = $expectedPillagePerKey[2];

$this->assertEquals(
$expectedPillage,
$result
);
}
}

0 comments on commit 2fac790

Please sign in to comment.