Refactor: Significant speed-up for ManaOptions (#9233)

This commit is contained in:
Alex Vasile 2022-10-04 00:08:20 -04:00 committed by GitHub
parent 23a4d2640b
commit 55a6acba22
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
32 changed files with 782 additions and 408 deletions

View file

@ -496,7 +496,7 @@ public class BestowTest extends CardTestPlayerBase {
assertPermanentCount(playerB, "Song of the Dryads", 1);
ManaOptions options = playerA.getAvailableManaTest(currentGame);
Assert.assertEquals("Player should be able to create 1 green mana", "{G}", options.get(0).toString());
Assert.assertEquals("Player should be able to create 1 green mana", "{G}", options.getAtIndex(0).toString());
assertPermanentCount(playerA, "Nighthowler", 1);
assertPowerToughness(playerA, "Nighthowler", 2, 2);

View file

@ -8,7 +8,6 @@ import org.junit.Assert;
import org.junit.Test;
import org.mage.test.serverside.base.CardTestPlayerBase;
import static org.mage.test.utils.ManaOptionsTestUtils.assertDuplicatedManaOptions;
import static org.mage.test.utils.ManaOptionsTestUtils.assertManaOptions;
/**
@ -45,7 +44,6 @@ public class SasayaOrochiAscendantTest extends CardTestPlayerBase {
assertManaPool(playerA, ManaType.GREEN, 2);
ManaOptions manaOptions = playerA.getAvailableManaTest(currentGame);
assertDuplicatedManaOptions(manaOptions);
Assert.assertEquals("mana variations don't fit", 1, manaOptions.size());
assertManaOptions("{G}{G}{G}{G}{G}", manaOptions);
@ -81,7 +79,6 @@ public class SasayaOrochiAscendantTest extends CardTestPlayerBase {
assertLife(playerA, 18);
ManaOptions manaOptions = playerA.getAvailableManaTest(currentGame);
assertDuplicatedManaOptions(manaOptions);
Assert.assertEquals("mana variations don't fit", 3, manaOptions.size());
assertManaOptions("{C}{C}{C}{G}{G}", manaOptions);
@ -121,7 +118,6 @@ public class SasayaOrochiAscendantTest extends CardTestPlayerBase {
assertLife(playerA, 20);
ManaOptions manaOptions = playerA.getAvailableManaTest(currentGame);
assertDuplicatedManaOptions(manaOptions);
Assert.assertEquals("mana variations don't fit", 4, manaOptions.size());
assertManaOptions("{R}{R}{R}{R}{G}{G}{G}{G}{G}", manaOptions);

View file

@ -7,7 +7,6 @@ import org.junit.Assert;
import org.junit.Test;
import org.mage.test.serverside.base.CardTestPlayerBase;
import static org.mage.test.utils.ManaOptionsTestUtils.assertDuplicatedManaOptions;
import static org.mage.test.utils.ManaOptionsTestUtils.assertManaOptions;
/**
@ -27,7 +26,6 @@ public class HarvesterDruidTest extends CardTestPlayerBase {
execute();
ManaOptions options = playerA.getAvailableManaTest(currentGame);
assertDuplicatedManaOptions(options);
Assert.assertEquals(2, options.size());
assertManaOptions("{U}{R}{R}", options);
assertManaOptions("{U}{U}{R}", options);
@ -45,7 +43,6 @@ public class HarvesterDruidTest extends CardTestPlayerBase {
execute();
ManaOptions options = playerA.getAvailableManaTest(currentGame);
assertDuplicatedManaOptions(options);
Assert.assertEquals(3, options.size());
assertManaOptions("{U}{R}{R}{R}", options);
assertManaOptions("{U}{U}{R}{R}", options);

View file

@ -8,7 +8,6 @@ import org.junit.Assert;
import org.junit.Test;
import org.mage.test.serverside.base.CardTestPlayerBase;
import static org.mage.test.utils.ManaOptionsTestUtils.assertDuplicatedManaOptions;
import static org.mage.test.utils.ManaOptionsTestUtils.assertManaOptions;
/**
@ -50,9 +49,7 @@ public class NagaVitalistTest extends CardTestPlayerBase {
execute();
ManaOptions manaOptions = playerA.getAvailableManaTest(currentGame);
assertDuplicatedManaOptions(manaOptions);
Assert.assertEquals("mana variations don't fit", 2, manaOptions.size());
assertManaOptions("{B}", manaOptions);
Assert.assertEquals("mana variations don't fit", 1, manaOptions.size());
assertManaOptions("{Any}{Any}", manaOptions);
}

View file

@ -63,7 +63,7 @@ public class ReflectingPoolTest extends CardTestPlayerBase {
execute();
ManaOptions options = playerA.getAvailableManaTest(currentGame);
Assert.assertEquals("Player should be able to create 2 red mana", "{R}{R}", options.get(0).toString());
Assert.assertEquals("Player should be able to create 2 red mana", "{R}{R}", options.getAtIndex(0).toString());
}
@ -83,7 +83,7 @@ public class ReflectingPoolTest extends CardTestPlayerBase {
execute();
ManaOptions options = playerA.getAvailableManaTest(currentGame);
Assert.assertEquals("Player should be able to create 3 red mana", "{R}{R}{R}", options.get(0).toString());
Assert.assertEquals("Player should be able to create 3 red mana", "{R}{R}{R}", options.getAtIndex(0).toString());
}
@ -103,7 +103,7 @@ public class ReflectingPoolTest extends CardTestPlayerBase {
execute();
ManaOptions options = playerA.getAvailableManaTest(currentGame);
Assert.assertEquals("Player should be able to create 3 red mana", "{R}{R}{R}", options.get(0).toString());
Assert.assertEquals("Player should be able to create 3 red mana", "{R}{R}{R}", options.getAtIndex(0).toString());
}
@ -124,7 +124,7 @@ public class ReflectingPoolTest extends CardTestPlayerBase {
execute();
ManaOptions options = playerA.getAvailableManaTest(currentGame);
Assert.assertEquals("Player should be able to create 2 red mana", "{G}{G}", options.get(0).toString());
Assert.assertEquals("Player should be able to create 2 green mana", "{G}{G}", options.getAtIndex(0).toString());
}

View file

@ -26,8 +26,8 @@ public class SylvokExplorerTest extends CardTestPlayerBase {
execute();
ManaOptions options = playerA.getAvailableManaTest(currentGame);
Assert.assertEquals("Player should be able to create 1 red and 1 white mana", "{R}{W}", options.get(0).toString());
Assert.assertEquals("Player should be able to create 1 blue and 1 white mana", "{W}{U}", options.get(1).toString());
Assert.assertEquals("Player should be able to create 1 red and 1 white mana", "{R}{W}", options.getAtIndex(0).toString());
Assert.assertEquals("Player should be able to create 1 blue and 1 white mana", "{W}{U}", options.getAtIndex(1).toString());
}
@Test
@ -45,6 +45,6 @@ public class SylvokExplorerTest extends CardTestPlayerBase {
execute();
ManaOptions options = playerA.getAvailableManaTest(currentGame);
Assert.assertEquals("Player should be able to create 3 white mana", "{W}{W}{W}", options.get(0).toString());
Assert.assertEquals("Player should be able to create 3 white mana", "{W}{W}{W}", options.getAtIndex(0).toString());
}
}

View file

@ -1,5 +1,8 @@
package org.mage.test.cards.mana.conditional;
import mage.ConditionalMana;
import mage.Mana;
import mage.abilities.condition.common.AdamantCondition;
import mage.abilities.keyword.FlyingAbility;
import mage.abilities.mana.ManaOptions;
import mage.constants.PhaseStep;
@ -9,7 +12,6 @@ import org.junit.Assert;
import org.junit.Test;
import org.mage.test.serverside.base.CardTestPlayerBase;
import static org.mage.test.utils.ManaOptionsTestUtils.assertDuplicatedManaOptions;
import static org.mage.test.utils.ManaOptionsTestUtils.assertManaOptions;
/**
@ -330,7 +332,6 @@ public class ConditionalManaTest extends CardTestPlayerBase {
execute();
ManaOptions manaOptions = playerA.getAvailableManaTest(currentGame);
assertDuplicatedManaOptions(manaOptions);
Assert.assertEquals("mana variations don't fit", 1, manaOptions.size());
assertManaOptions("{R}{R}", manaOptions);
}
@ -386,4 +387,34 @@ public class ConditionalManaTest extends CardTestPlayerBase {
assertManaOptions("{C}{C}{C}{C}{C}{C}{R}[{RosheenMeandererManaCondition}{TitansNestManaCondition}]", manaOptions);
}
@Test
public void testConditionalManaDeduplication() {
ManaOptions manaOptions = new ManaOptions();
ConditionalMana originalMana = new ConditionalMana(Mana.GreenMana(1));
ConditionalMana mana2 = originalMana.copy();
mana2.addCondition(AdamantCondition.WHITE);
ConditionalMana mana3 = originalMana.copy();
mana3.addCondition(AdamantCondition.BLUE);
ConditionalMana mana3Copy = originalMana.copy();
mana3Copy.addCondition(AdamantCondition.BLUE);
mana3Copy.add(Mana.GreenMana(1));
ConditionalMana mana4 = originalMana.copy();
mana4.addCondition(AdamantCondition.BLACK);
ConditionalMana mana4Copy = originalMana.copy();
mana4Copy.addCondition(AdamantCondition.BLACK);
manaOptions.add(originalMana);
manaOptions.add(mana2);
manaOptions.add(mana3);
manaOptions.add(mana3Copy); // Added, and should remain since different amount of Green mana
manaOptions.add(mana4);
manaOptions.add(mana4Copy); // Adding it to make sure it gets removed
Assert.assertEquals("Incorrect number of mana", 5, manaOptions.size());
}
}

View file

@ -9,7 +9,6 @@ import org.junit.Assert;
import org.junit.Test;
import org.mage.test.serverside.base.CardTestPlayerBase;
import static org.mage.test.utils.ManaOptionsTestUtils.assertDuplicatedManaOptions;
import static org.mage.test.utils.ManaOptionsTestUtils.assertManaOptions;
public class ManaReflectionTest extends CardTestPlayerBase {
@ -72,7 +71,6 @@ public class ManaReflectionTest extends CardTestPlayerBase {
execute();
ManaOptions manaOptions = playerA.getAvailableManaTest(currentGame);
assertDuplicatedManaOptions(manaOptions);
Assert.assertEquals("mana variations don't fit", 4, manaOptions.size());
assertManaOptions("{R}{R}{R}{R}{R}{R}{G}{G}", manaOptions);

View file

@ -7,8 +7,6 @@ import org.junit.Assert;
import org.junit.Test;
import org.mage.test.utils.ManaOptionsTestUtils;
import static org.mage.test.utils.ManaOptionsTestUtils.assertDuplicatedManaOptions;
/**
* @author TheElk801
*/
@ -44,7 +42,7 @@ public class ThePrismaticPiperTest2 extends ThePrismaticPiperBaseTest {
execute();
ManaOptions manaOptions = playerA.getAvailableManaTest(currentGame);
assertDuplicatedManaOptions(manaOptions);
Assert.assertEquals("mana variations don't fit", 2, manaOptions.size());
ManaOptionsTestUtils.assertManaOptions("{U}", manaOptions);
ManaOptionsTestUtils.assertManaOptions("{R}", manaOptions);

View file

@ -13,8 +13,6 @@ import org.mage.test.utils.ManaOptionsTestUtils;
import java.util.ArrayList;
import java.util.List;
import static org.mage.test.utils.ManaOptionsTestUtils.assertDuplicatedManaOptions;
/**
* @author TheElk801
*/
@ -54,7 +52,7 @@ public class ThePrismaticPiperTest7 extends ThePrismaticPiperBaseTest {
execute();
ManaOptions manaOptions = playerA.getAvailableManaTest(currentGame);
assertDuplicatedManaOptions(manaOptions);
Assert.assertEquals("mana variations don't fit", 2, manaOptions.size());
ManaOptionsTestUtils.assertManaOptions("{R}", manaOptions);
ManaOptionsTestUtils.assertManaOptions("{G}", manaOptions);

View file

@ -7,8 +7,6 @@ import org.junit.Assert;
import org.junit.Test;
import org.mage.test.utils.ManaOptionsTestUtils;
import static org.mage.test.utils.ManaOptionsTestUtils.assertDuplicatedManaOptions;
/**
* @author TheElk801
*/
@ -50,7 +48,7 @@ public class ThePrismaticPiperTest8 extends ThePrismaticPiperBaseTest {
execute();
ManaOptions manaOptions = playerA.getAvailableManaTest(currentGame);
assertDuplicatedManaOptions(manaOptions);
Assert.assertEquals("mana variations don't fit", 3, manaOptions.size());
ManaOptionsTestUtils.assertManaOptions("{U}", manaOptions);
ManaOptionsTestUtils.assertManaOptions("{R}", manaOptions);

View file

@ -5,10 +5,10 @@ import mage.constants.PhaseStep;
import mage.constants.Zone;
import mage.counters.CounterType;
import org.junit.Assert;
import org.junit.Ignore;
import org.junit.Test;
import org.mage.test.serverside.base.CardTestPlayerBase;
import static org.mage.test.utils.ManaOptionsTestUtils.assertDuplicatedManaOptions;
import static org.mage.test.utils.ManaOptionsTestUtils.assertManaOptions;
/**
@ -27,7 +27,6 @@ public class ManaOptionsTest extends CardTestPlayerBase {
execute();
ManaOptions manaOptions = playerA.getAvailableManaTest(currentGame);
assertDuplicatedManaOptions(manaOptions);
Assert.assertEquals("mana variations don't fit", 1, manaOptions.size());
assertManaOptions("{G}{G}{G}", manaOptions);
@ -45,7 +44,6 @@ public class ManaOptionsTest extends CardTestPlayerBase {
execute();
ManaOptions manaOptions = playerA.getAvailableManaTest(currentGame);
assertDuplicatedManaOptions(manaOptions);
Assert.assertEquals("mana variations don't fit", 4, manaOptions.size());
assertManaOptions("{G}{G}{G}", manaOptions);
@ -66,7 +64,6 @@ public class ManaOptionsTest extends CardTestPlayerBase {
execute();
ManaOptions manaOptions = playerA.getAvailableManaTest(currentGame);
assertDuplicatedManaOptions(manaOptions);
Assert.assertEquals("mana variations don't fit", 10, manaOptions.size());
assertManaOptions("{C}{C}{C}", manaOptions);
@ -92,7 +89,6 @@ public class ManaOptionsTest extends CardTestPlayerBase {
execute();
ManaOptions manaOptions = playerA.getAvailableManaTest(currentGame);
assertDuplicatedManaOptions(manaOptions);
Assert.assertEquals("mana variations don't fit", 1, manaOptions.size());
assertManaOptions("{Any}{Any}", manaOptions);
@ -110,7 +106,6 @@ public class ManaOptionsTest extends CardTestPlayerBase {
execute();
ManaOptions manaOptions = playerA.getAvailableManaTest(currentGame);
assertDuplicatedManaOptions(manaOptions);
Assert.assertEquals("mana variations don't fit", 1, manaOptions.size());
assertManaOptions("{W}{W}{Any}{Any}", manaOptions);
@ -129,7 +124,6 @@ public class ManaOptionsTest extends CardTestPlayerBase {
execute();
ManaOptions manaOptions = playerA.getAvailableManaTest(currentGame);
assertDuplicatedManaOptions(manaOptions);
Assert.assertEquals("mana variations don't fit", 1, manaOptions.size());
assertManaOptions("{C}{G}{G}{W}{W}", manaOptions);
@ -148,7 +142,6 @@ public class ManaOptionsTest extends CardTestPlayerBase {
execute();
ManaOptions manaOptions = playerA.getAvailableManaTest(currentGame);
assertDuplicatedManaOptions(manaOptions);
Assert.assertEquals("mana variations don't fit", 2, manaOptions.size());
assertManaOptions("{C}{G}{G}{G}{W}{W}", manaOptions);
@ -169,7 +162,6 @@ public class ManaOptionsTest extends CardTestPlayerBase {
execute();
ManaOptions manaOptions = playerA.getAvailableManaTest(currentGame);
assertDuplicatedManaOptions(manaOptions);
Assert.assertEquals("mana variations don't fit", 3, manaOptions.size());
assertManaOptions("{C}{G}{G}{G}", manaOptions);
@ -188,7 +180,6 @@ public class ManaOptionsTest extends CardTestPlayerBase {
execute();
ManaOptions manaOptions = playerA.getAvailableManaTest(currentGame);
assertDuplicatedManaOptions(manaOptions);
Assert.assertEquals("mana variations don't fit", 3, manaOptions.size());
assertManaOptions("{C}{G}{G}{G}", manaOptions);
@ -206,7 +197,6 @@ public class ManaOptionsTest extends CardTestPlayerBase {
execute();
ManaOptions manaOptions = playerA.getAvailableManaTest(currentGame);
assertDuplicatedManaOptions(manaOptions);
Assert.assertEquals("mana variations don't fit", 1, manaOptions.size());
assertManaOptions("{C}{G}{Any}", manaOptions);
@ -225,7 +215,6 @@ public class ManaOptionsTest extends CardTestPlayerBase {
execute();
ManaOptions manaOptions = playerA.getAvailableManaTest(currentGame);
assertDuplicatedManaOptions(manaOptions);
Assert.assertEquals("mana variations don't fit", 2, manaOptions.size());
assertManaOptions("{C}{G}{G}{G}", manaOptions);
@ -249,7 +238,6 @@ public class ManaOptionsTest extends CardTestPlayerBase {
execute();
ManaOptions manaOptions = playerA.getAvailableManaTest(currentGame);
assertDuplicatedManaOptions(manaOptions);
Assert.assertEquals("mana variations don't fit", 1, manaOptions.size());
assertManaOptions("{C}{G}{G}{G}", manaOptions);
@ -267,7 +255,6 @@ public class ManaOptionsTest extends CardTestPlayerBase {
execute();
ManaOptions manaOptions = playerA.getAvailableManaTest(currentGame);
assertDuplicatedManaOptions(manaOptions);
Assert.assertEquals("mana variations don't fit", 3, manaOptions.size());
assertManaOptions("{G}{W}{W}", manaOptions);
@ -296,7 +283,6 @@ public class ManaOptionsTest extends CardTestPlayerBase {
execute();
ManaOptions manaOptions = playerA.getAvailableManaTest(currentGame);
assertDuplicatedManaOptions(manaOptions);
Assert.assertEquals("mana variations don't fit", 6, manaOptions.size());
assertManaOptions("{C}{G}{G}{G}", manaOptions);
@ -316,7 +302,6 @@ public class ManaOptionsTest extends CardTestPlayerBase {
execute();
ManaOptions manaOptions = playerA.getAvailableManaTest(currentGame);
assertDuplicatedManaOptions(manaOptions);
}
@Test
@ -328,7 +313,6 @@ public class ManaOptionsTest extends CardTestPlayerBase {
execute();
ManaOptions manaOptions = playerA.getAvailableManaTest(currentGame);
assertDuplicatedManaOptions(manaOptions);
}
@Test
@ -357,7 +341,6 @@ public class ManaOptionsTest extends CardTestPlayerBase {
ManaOptions manaOptions = playerA.getAvailableManaTest(currentGame);
Assert.assertEquals("mana variations don't fit", 3, manaOptions.size());
assertDuplicatedManaOptions(manaOptions);
assertManaOptions("{C}{C}", manaOptions);
assertManaOptions("{Any}{Any}", manaOptions);
assertManaOptions("{C}{Any}", manaOptions);
@ -374,7 +357,6 @@ public class ManaOptionsTest extends CardTestPlayerBase {
execute();
ManaOptions manaOptions = playerA.getAvailableManaTest(currentGame);
assertDuplicatedManaOptions(manaOptions);
Assert.assertEquals("mana variations don't fit", 4, manaOptions.size());
assertManaOptions("{C}{W}", manaOptions);
@ -396,9 +378,8 @@ public class ManaOptionsTest extends CardTestPlayerBase {
execute();
ManaOptions manaOptions = playerA.getAvailableManaTest(currentGame);
assertDuplicatedManaOptions(manaOptions);
Assert.assertEquals("mana variations don't fit", 1, manaOptions.size());
Assert.assertEquals("mana variations don't fit", 1, manaOptions.size()); // TODO: Why one, should there be {B} and {B}{U}?
assertManaOptions("{W}{B}", manaOptions);
}
@ -412,7 +393,6 @@ public class ManaOptionsTest extends CardTestPlayerBase {
execute();
ManaOptions manaOptions = playerA.getAvailableManaTest(currentGame);
assertDuplicatedManaOptions(manaOptions);
Assert.assertEquals("mana variations don't fit", 2, manaOptions.size());
assertManaOptions("{W}{B}{B}", manaOptions);
@ -432,7 +412,6 @@ public class ManaOptionsTest extends CardTestPlayerBase {
execute();
ManaOptions manaOptions = playerA.getAvailableManaTest(currentGame);
assertDuplicatedManaOptions(manaOptions);
Assert.assertEquals("mana variations don't fit", 1, manaOptions.size());
assertManaOptions("{C}{W}{B}", manaOptions);
@ -452,7 +431,6 @@ public class ManaOptionsTest extends CardTestPlayerBase {
execute();
ManaOptions manaOptions = playerA.getAvailableManaTest(currentGame);
assertDuplicatedManaOptions(manaOptions);
Assert.assertEquals("mana variations don't fit", 1, manaOptions.size());
assertManaOptions("{C}{C}{C}{C}{W}{B}", manaOptions);
@ -470,7 +448,6 @@ public class ManaOptionsTest extends CardTestPlayerBase {
execute();
ManaOptions manaOptions = playerA.getAvailableManaTest(currentGame);
assertDuplicatedManaOptions(manaOptions);
Assert.assertEquals("mana variations don't fit", 1, manaOptions.size());
assertManaOptions("{B}{B}", manaOptions);
@ -489,7 +466,6 @@ public class ManaOptionsTest extends CardTestPlayerBase {
execute();
ManaOptions manaOptions = playerA.getAvailableManaTest(currentGame);
assertDuplicatedManaOptions(manaOptions);
Assert.assertEquals("mana variations don't fit", 1, manaOptions.size());
assertManaOptions("{C}", manaOptions);
@ -508,7 +484,6 @@ public class ManaOptionsTest extends CardTestPlayerBase {
execute();
ManaOptions manaOptions = playerA.getAvailableManaTest(currentGame);
assertDuplicatedManaOptions(manaOptions);
Assert.assertEquals("mana variations don't fit", 1, manaOptions.size());
assertManaOptions("{C}{C}", manaOptions);
@ -529,7 +504,6 @@ public class ManaOptionsTest extends CardTestPlayerBase {
execute();
ManaOptions manaOptions = playerA.getAvailableManaTest(currentGame);
assertDuplicatedManaOptions(manaOptions);
Assert.assertEquals("mana variations don't fit", 16, manaOptions.size());
assertManaOptions("{C}{C}{C}{C}{W}{W}{W}", manaOptions);
@ -561,7 +535,6 @@ public class ManaOptionsTest extends CardTestPlayerBase {
execute();
ManaOptions manaOptions = playerA.getAvailableManaTest(currentGame);
assertDuplicatedManaOptions(manaOptions);
Assert.assertEquals("mana variations don't fit", 2, manaOptions.size());
@ -582,7 +555,6 @@ public class ManaOptionsTest extends CardTestPlayerBase {
execute();
ManaOptions manaOptions = playerA.getAvailableManaTest(currentGame);
assertDuplicatedManaOptions(manaOptions);
Assert.assertEquals("mana variations don't fit", 88, manaOptions.size());
@ -603,7 +575,6 @@ public class ManaOptionsTest extends CardTestPlayerBase {
execute();
ManaOptions manaOptions = playerA.getAvailableManaTest(currentGame);
assertDuplicatedManaOptions(manaOptions);
Assert.assertEquals("mana variations don't fit", 4, manaOptions.size());
assertManaOptions("{U}{U}", manaOptions);
@ -612,4 +583,47 @@ public class ManaOptionsTest extends CardTestPlayerBase {
assertManaOptions("{G}{W}{W}", manaOptions);
}
/**
* This is a stress test for the implementation of ManaUtils.
* Based on the bug from: https://github.com/magefree/mage/issues/7710
*/
@Test
public void testCascadingCataracts() {
addCard(Zone.BATTLEFIELD, playerA, "Plains", 5);
addCard(Zone.BATTLEFIELD, playerA, "Island", 5);
addCard(Zone.BATTLEFIELD, playerA, "Swamp", 5);
addCard(Zone.BATTLEFIELD, playerA, "Mountain", 5);
addCard(Zone.BATTLEFIELD, playerA, "Forest", 5);
addCard(Zone.BATTLEFIELD, playerA, "Desert", 5);
addCard(Zone.BATTLEFIELD, playerA, "Cascading Cataracts", 3);
setStopAt(1, PhaseStep.END_TURN);
execute();
ManaOptions manaOptions = playerA.getAvailableManaTest(currentGame);
// The size below is based on no optimization to remove any mana possibilities beyond exact duplicates.
Assert.assertEquals("mana variations don't match", 6902, manaOptions.size());
}
/**
* Similar to above, except without a hardcoded expected result, and used to check scaling.
* Leave the @Ignore added when pushing commits.
*/
@Test
@Ignore
public void testCascadingCataractsN() {
int n = 5;
addCard(Zone.BATTLEFIELD, playerA, "Plains", n);
addCard(Zone.BATTLEFIELD, playerA, "Island", n);
addCard(Zone.BATTLEFIELD, playerA, "Swamp", n);
addCard(Zone.BATTLEFIELD, playerA, "Mountain", n);
addCard(Zone.BATTLEFIELD, playerA, "Forest", n);
addCard(Zone.BATTLEFIELD, playerA, "Desert", n);
addCard(Zone.BATTLEFIELD, playerA, "Cascading Cataracts", n);
setStopAt(1, PhaseStep.END_TURN);
execute();
ManaOptions manaOptions = playerA.getAvailableManaTest(currentGame);
}
}

View file

@ -1,7 +1,11 @@
package org.mage.test.utils;
import mage.Mana;
import mage.abilities.costs.mana.ManaCost;
import mage.abilities.costs.mana.ManaCosts;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.mana.ManaOptions;
import mage.util.ManaUtil;
import org.junit.Assert;
import java.util.HashSet;
@ -19,8 +23,8 @@ public class ManaOptionsTestUtils {
//mana info
//logger.info(playerA.getManaPool().getMana().toString());
//logger.info(playerA.getManaAvailable(currentGame).toString());
public static boolean manaOptionsContain(ManaOptions list, String searchMana) {
for (Mana mana : list) {
public static boolean manaOptionsContain(String searchMana, ManaOptions manaOptions) {
for (Mana mana : manaOptions) {
if (mana instanceof ConditionalMana) {
if ((mana.toString() + ((ConditionalMana)mana).getConditionString()).equals(searchMana)) {
return true;
@ -34,21 +38,9 @@ public class ManaOptionsTestUtils {
return false;
}
public static void assertManaOptions(String searchMana, ManaOptions manaList) {
if (!manaOptionsContain(manaList, searchMana)) {
Assert.fail("Can't find " + searchMana + " in " + manaList.toString());
}
}
public static void assertDuplicatedManaOptions(ManaOptions manaList) {
Set<String> list = new HashSet<>();
for (Mana mana : manaList) {
String s = mana.toString();
if (list.contains(s)) {
Assert.fail("Found duplicated mana option " + s + " in " + manaList.toString());
} else {
list.add(s);
}
public static void assertManaOptions(String searchMana, ManaOptions manaOptions) {
if (!manaOptionsContain(searchMana, manaOptions)) {
Assert.fail("Can't find " + searchMana + " in " + manaOptions.toString());
}
}
}