Posts: 3,449
Threads: 126
Joined: Jun 2003
Reputation:
1
06-05-2022, 08:46 AM
(This post was last modified: 06-05-2022, 08:46 AM by Philou.)
(05-05-2022, 10:53 PM)Darth Nico Wrote: On voit qu'ils beaucoup progressé dans le design de figurines.
Easy Rider Dwarf, la classe américaine 
Bon, maintenant, tu te mets à 40K et tu joue les Squats
Posts: 3,449
Threads: 126
Joined: Jun 2003
Reputation:
1
Posts: 3,449
Threads: 126
Joined: Jun 2003
Reputation:
1
Pendant ce temps, mon projet pour le CNAM avance.
Après avoir eu une embrouille sur les arbres (on s'y perd), mais avoir trouvé une astuce pour ne plus m'y perdre, j'ai enfin finit l'ensemble des tests unitaires.
Soit:
Code: package com.calculateur.warhammer.calcul.calcul;
import java.util.Arrays;
import org.apache.commons.math3.fraction.Fraction;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;
import com.calculateur.warhammer.data.ContexteActionImplementationBuilder;
import com.calculateur.warhammer.data.ContexteBatiment;
import com.calculateur.warhammer.data.ContexteFactionnaireNecron;
import com.calculateur.warhammer.data.ContexteGardienEldar;
import com.calculateur.warhammer.data.ContexteGorgones;
import com.calculateur.warhammer.data.ContexteGuerrierNecron;
import com.calculateur.warhammer.data.ContexteImmortelNecron;
import com.calculateur.warhammer.data.ContexteMarinePeste;
import com.calculateur.warhammer.data.ContexteSoeurBataille;
import com.calculateur.warhammer.data.ContexteSoeurRepentia;
import com.calculateur.warhammer.data.ContexteSpaceMarineIntersessorAssaut;
import com.calculateur.warhammer.data.ContexteTerminatorDeathwing;
import com.calculateur.warhammer.data.IArmeCorpsACorps;
import com.calculateur.warhammer.data.IBatiment;
import com.calculateur.warhammer.data.IContexteAction;
import com.calculateur.warhammer.data.IProfil;
import com.calculateur.warhammer.data.IReglesSpeciales;
public class CalculMortPhaseCorpACorpTest {
private final ICalculMort<IArmeCorpsACorps> calculMort;
public CalculMortPhaseCorpACorpTest() {
calculMort = new CalculMortPhaseCorpACorp();
}
@Test
public void testSpaceMarineInterssessorAssautAttaqueGuerrierNecronBase() throws CalculException {
IProfil spaceMarine = ContexteSpaceMarineIntersessorAssaut.getSpaceMarineIntersessorAssaut();
IArmeCorpsACorps epeeTronconneuse = ContexteSpaceMarineIntersessorAssaut.getEpeeTronconneuseAstartes();
IReglesSpeciales regleBaseMarine = ContexteSpaceMarineIntersessorAssaut.getRegleAttaqueBase();
IProfil necron = ContexteGuerrierNecron.getGuerrierNecron();
IReglesSpeciales regleBaseNecron = ContexteGuerrierNecron.getRegleDefense();
IBatiment aucun = ContexteBatiment.getAucun();
IContexteAction<IArmeCorpsACorps> contexteAction = ContexteActionImplementationBuilder
.getInstancePhaseCorpsACorps().addProfilAttaquant(spaceMarine).addReglesAttaquant(regleBaseMarine)
.addArmeAttaquant(epeeTronconneuse).addProfilDefenseur(necron).addReglesDefenseur(regleBaseNecron)
.addBatiment(aucun).build();
Fraction probaTouche = new Fraction(2, 3);
Fraction probaBlesse = new Fraction(2, 3);
Fraction probaRateSauvegarde = new Fraction(2, 3);
Fraction probaNecronNESeRelevePasDef1 = new Fraction(1, 2);
Fraction probaNecronNESeRelevePasDef2 = new Fraction(2, 3);
Fraction probaNecronNeSeRelevePasMaisRelance = new Fraction(1, 6);
Fraction ch1 = CheminBuilder.getInstance().addEvent(probaTouche).addEvent(probaBlesse)
.addEvent(probaRateSauvegarde).addEvent(probaNecronNeSeRelevePasMaisRelance)
.addEvent(probaNecronNESeRelevePasDef2).build();
Fraction ch2 = CheminBuilder.getInstance().addEvent(probaTouche).addEvent(probaBlesse)
.addEvent(probaRateSauvegarde).addEvent(probaNecronNESeRelevePasDef1).build();
Fraction attendu = CheminBuilder.doSomme(Arrays.asList(ch1, ch2));
Fraction proba = calculMort.calculProbabiliteMort(contexteAction);
Assertions.assertThat(proba).isEqualTo(attendu);
}
@Test
public void testSpaceMarineInterssessorAssautDarkAngelRiposteGuerrierNecronBase() throws CalculException {
IProfil spaceMarine = ContexteSpaceMarineIntersessorAssaut.getSpaceMarineIntersessorAssaut();
IArmeCorpsACorps epeeTronconneuse = ContexteSpaceMarineIntersessorAssaut.getEpeeTronconneuseAstartes();
IReglesSpeciales regleBaseMarine = ContexteSpaceMarineIntersessorAssaut.getAttaqueDarkAngelHorsDoctrine();
IProfil necron = ContexteGuerrierNecron.getGuerrierNecron();
IReglesSpeciales regleBaseNecron = ContexteGuerrierNecron.getRegleDefense();
IBatiment aucun = ContexteBatiment.getAucun();
IContexteAction<IArmeCorpsACorps> contexteAction = ContexteActionImplementationBuilder
.getInstancePhaseCorpsACorps().addProfilAttaquant(spaceMarine).addReglesAttaquant(regleBaseMarine)
.addArmeAttaquant(epeeTronconneuse).addProfilDefenseur(necron).addReglesDefenseur(regleBaseNecron)
.addBatiment(aucun).build();
Fraction probaTouche = new Fraction(5, 6);
Fraction probaBlesse = new Fraction(2, 3);
Fraction probaRateSauvegarde = new Fraction(2, 3);
Fraction probaNecronNESeRelevePasDef1 = new Fraction(1, 2);
Fraction probaNecronNESeRelevePasDef2 = new Fraction(2, 3);
Fraction probaNecronNeSeRelevePasMaisRelance = new Fraction(1, 6);
Fraction ch1 = CheminBuilder.getInstance().addEvent(probaTouche).addEvent(probaBlesse)
.addEvent(probaRateSauvegarde).addEvent(probaNecronNeSeRelevePasMaisRelance)
.addEvent(probaNecronNESeRelevePasDef2).build();
Fraction ch2 = CheminBuilder.getInstance().addEvent(probaTouche).addEvent(probaBlesse)
.addEvent(probaRateSauvegarde).addEvent(probaNecronNESeRelevePasDef1).build();
Fraction attendu = CheminBuilder.doSomme(Arrays.asList(ch1, ch2));
Fraction proba = calculMort.calculProbabiliteMort(contexteAction);
Assertions.assertThat(proba).isEqualTo(attendu);
}
@Test
public void testSpaceMarineIntersessorAssautAttqueimmortelNecron() throws CalculException {
IProfil spaceMarine = ContexteSpaceMarineIntersessorAssaut.getSpaceMarineIntersessorAssaut();
IArmeCorpsACorps epeeTronconneuse = ContexteSpaceMarineIntersessorAssaut.getEpeeTronconneuseAstartes();
IReglesSpeciales regleBaseMarine = ContexteSpaceMarineIntersessorAssaut.getRegleAttaqueBase();
IProfil immortel = ContexteImmortelNecron.getImmortelNecron();
IReglesSpeciales regleDefense = ContexteImmortelNecron.getRegleDefense();
IBatiment aucun = ContexteBatiment.getAucun();
IContexteAction<IArmeCorpsACorps> contexteAction = ContexteActionImplementationBuilder
.getInstancePhaseCorpsACorps().addProfilAttaquant(spaceMarine).addReglesAttaquant(regleBaseMarine)
.addArmeAttaquant(epeeTronconneuse).addProfilDefenseur(immortel).addReglesDefenseur(regleDefense)
.addBatiment(aucun).build();
Fraction probaTouche = new Fraction(2, 3);
Fraction probaBlesse = new Fraction(1, 2);
Fraction probaRateSave = new Fraction(1, 2);
Fraction probaNeSeRelevePas = new Fraction(2, 3);
Fraction attendu = CheminBuilder.getInstance().addEvent(probaTouche).addEvent(probaBlesse)
.addEvent(probaRateSave).addEvent(probaNeSeRelevePas).build();
Fraction proba = calculMort.calculProbabiliteMort(contexteAction);
Assertions.assertThat(proba).isEqualTo(attendu);
}
@Test
public void testSpaceMarineInterssessorAssautACoteDeCommandantTirentSurGardienEldar() throws CalculException {
IProfil spaceMarine = ContexteSpaceMarineIntersessorAssaut.getSpaceMarineIntersessorAssaut();
IArmeCorpsACorps epeeTronconneuse = ContexteSpaceMarineIntersessorAssaut.getEpeeTronconneuseAstartes();
IReglesSpeciales regleBaseMarine = ContexteSpaceMarineIntersessorAssaut.getDoctrineEtCommandant();
IProfil GardienEldar = ContexteGardienEldar.getGardienEldar();
IReglesSpeciales regleGardien = ContexteGardienEldar.getRegleDefenseGardien();
IBatiment batiment = ContexteBatiment.getAucun();
IContexteAction<IArmeCorpsACorps> contexteAction = ContexteActionImplementationBuilder
.getInstancePhaseCorpsACorps().addProfilAttaquant(spaceMarine).addReglesAttaquant(regleBaseMarine)
.addArmeAttaquant(epeeTronconneuse).addProfilDefenseur(GardienEldar).addReglesDefenseur(regleGardien)
.addBatiment(batiment).build();
Fraction probaTouche = new Fraction(2, 3);
Fraction probaRateTirMaisRelance = new Fraction(1, 6);
Fraction probaBlesse = new Fraction(2, 3);
Fraction probaEldarRateSauvegarde = new Fraction(5, 6);
// Marine rate tir
Fraction ch1 = CheminBuilder.getInstance().addEvent(probaRateTirMaisRelance).addEvent(probaTouche)
.addEvent(probaBlesse).addEvent(probaEldarRateSauvegarde).build();
// Marine réussi tir
Fraction ch2 = CheminBuilder.getInstance().addEvent(probaTouche).addEvent(probaBlesse)
.addEvent(probaEldarRateSauvegarde).build();
Fraction attendu = CheminBuilder.doSomme(Arrays.asList(ch1, ch2));
Fraction proba = calculMort.calculProbabiliteMort(contexteAction);
Assertions.assertThat(proba).isEqualTo(attendu);
}
@Test
public void testSpaceMarineInterssessorAssautACoteDeLieutenantAttaqueGardienEldar() throws CalculException {
IProfil spaceMarine = ContexteSpaceMarineIntersessorAssaut.getSpaceMarineIntersessorAssaut();
IArmeCorpsACorps epeeTronconneuse = ContexteSpaceMarineIntersessorAssaut.getEpeeTronconneuseAstartes();
IReglesSpeciales regleBaseMarine = ContexteSpaceMarineIntersessorAssaut.getDoctrineEtCommandant();
IProfil GardienEldar = ContexteGardienEldar.getGardienEldar();
IReglesSpeciales regleGardien = ContexteGardienEldar.getRegleDefenseGardien();
IBatiment batiment = ContexteBatiment.getAucun();
IContexteAction<IArmeCorpsACorps> contexteAction = ContexteActionImplementationBuilder
.getInstancePhaseCorpsACorps().addProfilAttaquant(spaceMarine).addReglesAttaquant(regleBaseMarine)
.addArmeAttaquant(epeeTronconneuse).addProfilDefenseur(GardienEldar).addReglesDefenseur(regleGardien)
.addBatiment(batiment).build();
Fraction probaTouche = new Fraction(2, 3);
Fraction probaBlesse = new Fraction(2, 3);
Fraction probaRateBlessureMaisRetente = new Fraction(1, 6);
Fraction probaEldarRateSauvegarde = new Fraction(5, 6);
// Marine rate blessure
Fraction ch1 = CheminBuilder.getInstance().addEvent(probaTouche).addEvent(probaRateBlessureMaisRetente)
.addEvent(probaBlesse).addEvent(probaEldarRateSauvegarde).build();
// Marine réussi blessure
Fraction ch2 = CheminBuilder.getInstance().addEvent(probaTouche).addEvent(probaBlesse)
.addEvent(probaEldarRateSauvegarde).build();
Fraction attendu = CheminBuilder.doSomme(Arrays.asList(ch1, ch2));
Fraction proba = calculMort.calculProbabiliteMort(contexteAction);
Assertions.assertThat(proba).isEqualTo(attendu);
}
@Test
public void testSpaceMarineInterssessorAssautACoteDeCommandantEtLieutenantAttaqueGardienEldar()
throws CalculException {
IProfil spaceMarine = ContexteSpaceMarineIntersessorAssaut.getSpaceMarineIntersessorAssaut();
IArmeCorpsACorps epeeTronconneuse = ContexteSpaceMarineIntersessorAssaut.getEpeeTronconneuseAstartes();
IReglesSpeciales regleBaseMarine = ContexteSpaceMarineIntersessorAssaut.getDoctrineEtCommandantEtLieutenant();
IProfil GardienEldar = ContexteGardienEldar.getGardienEldar();
IReglesSpeciales regleGardien = ContexteGardienEldar.getRegleDefenseGardien();
IBatiment batiment = ContexteBatiment.getAucun();
IContexteAction<IArmeCorpsACorps> contexteAction = ContexteActionImplementationBuilder
.getInstancePhaseCorpsACorps().addProfilAttaquant(spaceMarine).addReglesAttaquant(regleBaseMarine)
.addArmeAttaquant(epeeTronconneuse).addProfilDefenseur(GardienEldar).addReglesDefenseur(regleGardien)
.addBatiment(batiment).build();
Fraction probaTouche = new Fraction(2, 3);
Fraction probaRateTirMaisRelance = new Fraction(1, 6);
Fraction probaBlesse = new Fraction(2, 3);
Fraction probaRateBlesseMaisRelance = new Fraction(1, 6);
Fraction probaEldarRateSauvegarde = new Fraction(5, 6);
// Touche ratée et Blesse réussie
Fraction ch1 = CheminBuilder.getInstance().addEvent(probaRateTirMaisRelance).addEvent(probaTouche)
.addEvent(probaRateBlesseMaisRelance).addEvent(probaBlesse).addEvent(probaEldarRateSauvegarde).build();
// Touche ratée mais blesse réussie
Fraction ch2 = CheminBuilder.getInstance().addEvent(probaRateTirMaisRelance).addEvent(probaTouche)
.addEvent(probaBlesse).addEvent(probaEldarRateSauvegarde).build();
// Touche réussie mais blesse ratée
Fraction ch3 = CheminBuilder.getInstance().addEvent(probaTouche).addEvent(probaRateBlesseMaisRelance)
.addEvent(probaBlesse).addEvent(probaEldarRateSauvegarde).build();
// Tout réussie
Fraction ch4 = CheminBuilder.getInstance().addEvent(probaTouche).addEvent(probaBlesse)
.addEvent(probaEldarRateSauvegarde).build();
Fraction attendu = CheminBuilder.doSomme(Arrays.asList(ch1, ch2, ch3, ch4));
Fraction proba = calculMort.calculProbabiliteMort(contexteAction);
Assertions.assertThat(proba).isEqualTo(attendu);
}
@Test
public void testGardienEldarRiposteSpaceMarineIntersessorDansBatimentDefendableApresCharge()
throws CalculException {
IProfil gardienEldar = ContexteGardienEldar.getGardienEldar();
IArmeCorpsACorps base = ContexteGardienEldar.getArmeBase();
IReglesSpeciales regleAttaque = ContexteGardienEldar.getRegleAttaque();
IProfil spaceMarine = ContexteSpaceMarineIntersessorAssaut.getSpaceMarineIntersessorAssaut();
IReglesSpeciales regleDefense = ContexteSpaceMarineIntersessorAssaut.getRegleDefense();
IBatiment batiment = ContexteBatiment.getBatiment(false, false, false, true, false);
IContexteAction<IArmeCorpsACorps> contexte = ContexteActionImplementationBuilder.getInstanceDefenseurObstacle()
.addProfilAttaquant(gardienEldar).addReglesAttaquant(regleAttaque).addArmeAttaquant(base)
.addProfilDefenseur(spaceMarine).addReglesDefenseur(regleDefense).addBatiment(batiment).build();
Fraction probaTouche = new Fraction(5, 6);
Fraction probaBlesse = new Fraction(1, 3);
Fraction probaRateSauvegarde = new Fraction(1, 3);
Fraction attendu = CheminBuilder.getInstance().addEvent(probaTouche).addEvent(probaBlesse)
.addEvent(probaRateSauvegarde).build();
Fraction proba = calculMort.calculProbabiliteMort(contexte);
Assertions.assertThat(proba).isEqualTo(attendu);
}
@Test
public void testGardienEldarRiposteSpaceMarineIntersessorDansBatiment() throws CalculException {
IProfil gardienEldar = ContexteGardienEldar.getGardienEldar();
IArmeCorpsACorps base = ContexteGardienEldar.getArmeBase();
IReglesSpeciales regleAttaque = ContexteGardienEldar.getRegleAttaque();
IProfil spaceMarine = ContexteSpaceMarineIntersessorAssaut.getSpaceMarineIntersessorAssaut();
IReglesSpeciales regleDefense = ContexteSpaceMarineIntersessorAssaut.getRegleDefense();
IBatiment batiment = ContexteBatiment.getBatiment(false, false, false, false, true);
IContexteAction<IArmeCorpsACorps> contexte = ContexteActionImplementationBuilder.getInstancePhaseCorpsACorps()
.addProfilAttaquant(gardienEldar).addReglesAttaquant(regleAttaque).addArmeAttaquant(base)
.addProfilDefenseur(spaceMarine).addReglesDefenseur(regleDefense).addBatiment(batiment).build();
Fraction probaTouche = new Fraction(5, 6);
Fraction probaBlesse = new Fraction(1, 3);
Fraction probaRateSauvegarde = new Fraction(1, 3);
Fraction attendu = CheminBuilder.getInstance().addEvent(probaTouche).addEvent(probaBlesse)
.addEvent(probaRateSauvegarde).build();
Fraction proba = calculMort.calculProbabiliteMort(contexte);
Assertions.assertThat(proba).isEqualTo(attendu);
}
@Test
public void testTerminatorDeathwingAttaquegGardienEldar() throws CalculException {
IProfil terminator = ContexteTerminatorDeathwing.getTerminatorDeathwing();
IArmeCorpsACorps ganteletEnergetique = ContexteTerminatorDeathwing.getGanteletEnergetique();
IReglesSpeciales doctrineTactiqueImmobile = ContexteTerminatorDeathwing.getRegleAttaqueDoctrineImmobile();
IProfil GardienEldar = ContexteGardienEldar.getGardienEldar();
IReglesSpeciales regleGardien = ContexteGardienEldar.getRegleDefenseGardien();
IBatiment batiment = ContexteBatiment.getAucun();
IContexteAction<IArmeCorpsACorps> contexteAction = ContexteActionImplementationBuilder
.getInstancePhaseCorpsACorps().addProfilAttaquant(terminator)
.addReglesAttaquant(doctrineTactiqueImmobile).addArmeAttaquant(ganteletEnergetique)
.addProfilDefenseur(GardienEldar).addReglesDefenseur(regleGardien).addBatiment(batiment).build();
Fraction probaTouche = new Fraction(2, 3);
Fraction probaBlesse = new Fraction(5, 6);
Fraction attendu = CheminBuilder.getInstance().addEvent(probaTouche).addEvent(probaBlesse).build();
Fraction proba = calculMort.calculProbabiliteMort(contexteAction);
Assertions.assertThat(proba).isEqualTo(attendu);
}
@Test
public void testFactionnaireAttaqueTerminatorDeathwing() throws CalculException {
IProfil factionnaire = ContexteFactionnaireNecron.getFactionnaireNecron();
IArmeCorpsACorps fauchard = ContexteFactionnaireNecron.getFauchard();
IReglesSpeciales regleAttaque = ContexteFactionnaireNecron.getRegleAttaque();
IProfil terminator = ContexteTerminatorDeathwing.getTerminatorDeathwing();
IReglesSpeciales regleDefense = ContexteTerminatorDeathwing.getRegleDefense();
IBatiment batiment = ContexteBatiment.getAucun();
IContexteAction<IArmeCorpsACorps> contexteAction = ContexteActionImplementationBuilder
.getInstancePhaseCorpsACorps().addProfilAttaquant(factionnaire).addReglesAttaquant(regleAttaque)
.addArmeAttaquant(fauchard).addProfilDefenseur(terminator).addReglesDefenseur(regleDefense)
.addBatiment(batiment).build();
Fraction probaTouche = new Fraction(2, 3);
Fraction probaBlesse = new Fraction(1, 2);
Fraction probaRateSauvegarde = new Fraction(2, 3);
Fraction attendu = CheminBuilder.getInstance().addEvent(probaTouche).addEvent(probaBlesse)
.addEvent(probaRateSauvegarde).build();
Fraction proba = calculMort.calculProbabiliteMort(contexteAction);
Assertions.assertThat(proba).isEqualTo(attendu);
}
@Test
public void testGogonneAttaqueSpaceMarineIntersessor() throws CalculException {
IProfil gorgonne = ContexteGorgones.getGorgonne();
IArmeCorpsACorps lame = ContexteGorgones.getLameGorgonne();
IReglesSpeciales regleAttaque = ContexteGorgones.getRegleAttaque();
IProfil spaceMarine = ContexteSpaceMarineIntersessorAssaut.getSpaceMarineIntersessorAssaut();
IReglesSpeciales regleDefense = ContexteSpaceMarineIntersessorAssaut.getRegleDefense();
IBatiment batiment = ContexteBatiment.getAucun();
IContexteAction<IArmeCorpsACorps> contexte = ContexteActionImplementationBuilder.getInstancePhaseCorpsACorps()
.addReglesAttaquant(regleAttaque).addProfilAttaquant(gorgonne).addArmeAttaquant(lame)
.addProfilDefenseur(spaceMarine).addReglesDefenseur(regleDefense).addBatiment(batiment).build();
Fraction probaTouche = new Fraction(2, 3);
Fraction probaBlesse = new Fraction(1, 2);
Fraction probaRateSauvegarde = new Fraction(1, 3);
Fraction attendu = CheminBuilder.getInstance().addEvent(probaTouche).addEvent(probaBlesse)
.addEvent(probaRateSauvegarde).build();
Fraction proba = calculMort.calculProbabiliteMort(contexte);
Assertions.assertThat(proba).isEqualTo(attendu);
}
@Test
public void testMarinePesteAttaqueSoeur() throws CalculException {
IProfil marinePeste = ContexteMarinePeste.getMarinePeste();
IArmeCorpsACorps base = ContexteMarinePeste.getArmeDeBase();
IReglesSpeciales regleAttaque = ContexteMarinePeste.getRegleAttaque();
IProfil soeur = ContexteSoeurBataille.getSoeurBataille();
IReglesSpeciales regleDefense = ContexteSoeurBataille.getRegleDefense();
IBatiment aucun = ContexteBatiment.getAucun();
IContexteAction<IArmeCorpsACorps> contexte = ContexteActionImplementationBuilder.getInstancePhaseCorpsACorps()
.addProfilAttaquant(marinePeste).addArmeAttaquant(base).addReglesAttaquant(regleAttaque)
.addProfilDefenseur(soeur).addReglesDefenseur(regleDefense).addBatiment(aucun).build();
Fraction probaTouche = new Fraction(2, 3);
Fraction probaBlesse = new Fraction(5, 6);
Fraction probaRateSauvegarde = new Fraction(1, 3);
Fraction attendu = CheminBuilder.getInstance().addEvent(probaTouche).addEvent(probaBlesse)
.addEvent(probaRateSauvegarde).build();
Fraction proba = calculMort.calculProbabiliteMort(contexte);
Assertions.assertThat(proba).isEqualTo(attendu);
}
@Test
public void testMarinePesteAttaqueSoeurRepentia() throws CalculException {
IProfil marinePeste = ContexteMarinePeste.getMarinePeste();
IArmeCorpsACorps base = ContexteMarinePeste.getArmeDeBase();
IReglesSpeciales regleAttaque = ContexteMarinePeste.getRegleAttaque();
IProfil repentia = ContexteSoeurRepentia.getSoeurRepentia();
IReglesSpeciales regleDefense = ContexteSoeurRepentia.getRegleDefense();
IBatiment aucun = ContexteBatiment.getAucun();
IContexteAction<IArmeCorpsACorps> contexte = ContexteActionImplementationBuilder.getInstancePhaseCorpsACorps()
.addProfilAttaquant(marinePeste).addArmeAttaquant(base).addReglesAttaquant(regleAttaque)
.addProfilDefenseur(repentia).addReglesDefenseur(regleDefense).addBatiment(aucun).build();
Fraction probaTouche = new Fraction(2, 3);
Fraction probaBlesse = new Fraction(5, 6);
Fraction probaRateSauvegarde = new Fraction(5, 6);
Fraction probaNePasIgnorerBlessure = new Fraction(2, 3);
Fraction attendu = CheminBuilder.getInstance().addEvent(probaTouche).addEvent(probaBlesse)
.addEvent(probaRateSauvegarde).addEvent(probaNePasIgnorerBlessure).build();
Fraction proba = calculMort.calculProbabiliteMort(contexte);
Assertions.assertThat(proba).isEqualTo(attendu);
}
}
Code: package com.calculateur.warhammer.calcul.calcul;
import java.util.Arrays;
import org.apache.commons.math3.fraction.Fraction;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;
import com.calculateur.warhammer.data.ContexteActionImplementationBuilder;
import com.calculateur.warhammer.data.ContexteBatiment;
import com.calculateur.warhammer.data.ContexteChenilleCrachepeste;
import com.calculateur.warhammer.data.ContexteChevalierNoirRavenwing;
import com.calculateur.warhammer.data.ContexteGardienEldar;
import com.calculateur.warhammer.data.ContexteGuerrierKabalite;
import com.calculateur.warhammer.data.ContexteGuerrierNecron;
import com.calculateur.warhammer.data.ContexteImmortelNecron;
import com.calculateur.warhammer.data.ContexteMarinePeste;
import com.calculateur.warhammer.data.ContexteRangerEldar;
import com.calculateur.warhammer.data.ContexteSoeurBataille;
import com.calculateur.warhammer.data.ContexteSoeurRepentia;
import com.calculateur.warhammer.data.ContexteSpaceMarineIntersessor;
import com.calculateur.warhammer.data.ContexteTerminatorDeathwing;
import com.calculateur.warhammer.data.IArmeDeTir;
import com.calculateur.warhammer.data.IBatiment;
import com.calculateur.warhammer.data.IContexteAction;
import com.calculateur.warhammer.data.IProfil;
import com.calculateur.warhammer.data.IReglesSpeciales;
public class CalculMortPhaseTirTest {
private final ICalculMort<IArmeDeTir> calculMort;
public CalculMortPhaseTirTest() {
calculMort = new CalculMortPhaseTir();
}
@Test
public void testSpaceMarineInterssessorTirentSurGuerrierNecronBase() throws CalculException {
IProfil spaceMarine = ContexteSpaceMarineIntersessor.getProfilSpaceMarineIntersessor();
IArmeDeTir bolter = ContexteSpaceMarineIntersessor.getFusilBolter();
IReglesSpeciales regleBaseMarine = ContexteSpaceMarineIntersessor.getRegleAttaqueBase();
IProfil necron = ContexteGuerrierNecron.getGuerrierNecron();
IReglesSpeciales regleBaseNecron = ContexteGuerrierNecron.getRegleDefense();
IBatiment aucun = ContexteBatiment.getAucun();
IContexteAction<IArmeDeTir> contexteAction = ContexteActionImplementationBuilder.getInstancePhaseDeTir()
.addProfilAttaquant(spaceMarine).addReglesAttaquant(regleBaseMarine).addArmeAttaquant(bolter)
.addProfilDefenseur(necron).addReglesDefenseur(regleBaseNecron).addBatiment(aucun).build();
Fraction probaTouche = new Fraction(2, 3);
Fraction probaBlesse = new Fraction(1, 2);
Fraction probaRateSauvegarde = new Fraction(2, 3);
Fraction probaNecronNESeRelevePasDef1 = new Fraction(1, 2);
Fraction probaNecronNESeRelevePasDef2 = new Fraction(2, 3);
Fraction probaNecronNeSeRelevePasMaisRelance = new Fraction(1, 6);
Fraction ch1 = CheminBuilder.getInstance().addEvent(probaTouche).addEvent(probaBlesse)
.addEvent(probaRateSauvegarde).addEvent(probaNecronNeSeRelevePasMaisRelance)
.addEvent(probaNecronNESeRelevePasDef2).build();
Fraction ch2 = CheminBuilder.getInstance().addEvent(probaTouche).addEvent(probaBlesse)
.addEvent(probaRateSauvegarde).addEvent(probaNecronNESeRelevePasDef1).build();
Fraction attendu = CheminBuilder.doSomme(Arrays.asList(ch1, ch2));
Fraction proba = calculMort.calculProbabiliteMort(contexteAction);
Assertions.assertThat(proba).isEqualTo(attendu);
}
@Test
public void testSpaceMarineIntersessorTirentSurimmortelNecron() throws CalculException {
IProfil spaceMarine = ContexteSpaceMarineIntersessor.getProfilSpaceMarineIntersessor();
IArmeDeTir bolter = ContexteSpaceMarineIntersessor.getFusilBolter();
IReglesSpeciales regleBaseMarine = ContexteSpaceMarineIntersessor.getRegleAttaqueBase();
IProfil immortel = ContexteImmortelNecron.getImmortelNecron();
IReglesSpeciales regleDefense = ContexteImmortelNecron.getRegleDefense();
IBatiment aucun = ContexteBatiment.getAucun();
IContexteAction<IArmeDeTir> contexteAction = ContexteActionImplementationBuilder.getInstancePhaseDeTir()
.addProfilAttaquant(spaceMarine).addReglesAttaquant(regleBaseMarine).addArmeAttaquant(bolter)
.addProfilDefenseur(immortel).addReglesDefenseur(regleDefense).addBatiment(aucun).build();
Fraction probaTouche = new Fraction(2, 3);
Fraction probaBlesse = new Fraction(1, 3);
Fraction probaRateSave = new Fraction(1, 2);
Fraction probaNeSeRelevePas = new Fraction(2, 3);
Fraction attendu = CheminBuilder.getInstance().addEvent(probaTouche).addEvent(probaBlesse)
.addEvent(probaRateSave).addEvent(probaNeSeRelevePas).build();
Fraction proba = calculMort.calculProbabiliteMort(contexteAction);
Assertions.assertThat(proba).isEqualTo(attendu);
}
@Test
public void testSpaceMarineInterssessorACoteDeCommandantTirentSurGardienEldar() throws CalculException {
IProfil spaceMarine = ContexteSpaceMarineIntersessor.getProfilSpaceMarineIntersessor();
IArmeDeTir bolter = ContexteSpaceMarineIntersessor.getFusilBolter();
IReglesSpeciales doctrineTactiqueEtCommandantEtLieutenant = ContexteSpaceMarineIntersessor
.getDoctrineEtCommandant();
IProfil GardienEldar = ContexteGardienEldar.getGardienEldar();
IReglesSpeciales regleGardien = ContexteGardienEldar.getRegleDefenseGardien();
IBatiment batiment = ContexteBatiment.getAucun();
IContexteAction<IArmeDeTir> contexteAction = ContexteActionImplementationBuilder.getInstancePhaseDeTir()
.addProfilAttaquant(spaceMarine).addReglesAttaquant(doctrineTactiqueEtCommandantEtLieutenant)
.addArmeAttaquant(bolter).addProfilDefenseur(GardienEldar).addReglesDefenseur(regleGardien)
.addBatiment(batiment).build();
Fraction probaToucheTir = new Fraction(2, 3);
Fraction probaRateTirMaisRelance = new Fraction(1, 6);
Fraction probaBlesse = new Fraction(2, 3);
Fraction probaEldarRateSauvegarde = new Fraction(5, 6);
// Marine rate tir
Fraction ch1 = CheminBuilder.getInstance().addEvent(probaRateTirMaisRelance).addEvent(probaToucheTir)
.addEvent(probaBlesse).addEvent(probaEldarRateSauvegarde).build();
// Marine réussi tir
Fraction ch2 = CheminBuilder.getInstance().addEvent(probaToucheTir).addEvent(probaBlesse)
.addEvent(probaEldarRateSauvegarde).build();
Fraction attendu = CheminBuilder.doSomme(Arrays.asList(ch1, ch2));
Fraction proba = calculMort.calculProbabiliteMort(contexteAction);
Assertions.assertThat(proba).isEqualTo(attendu);
}
@Test
public void testSpaceMarineInterssessorACoteDeLieutenantTirentSurGardienEldar() throws CalculException {
IProfil spaceMarine = ContexteSpaceMarineIntersessor.getProfilSpaceMarineIntersessor();
IArmeDeTir bolter = ContexteSpaceMarineIntersessor.getFusilBolter();
IReglesSpeciales doctrineTactiqueEtCommandantEtLieutenant = ContexteSpaceMarineIntersessor
.getDoctrineEtLieutenant();
IProfil GardienEldar = ContexteGardienEldar.getGardienEldar();
IReglesSpeciales regleGardien = ContexteGardienEldar.getRegleDefenseGardien();
IBatiment batiment = ContexteBatiment.getAucun();
IContexteAction<IArmeDeTir> contexteAction = ContexteActionImplementationBuilder.getInstancePhaseDeTir()
.addProfilAttaquant(spaceMarine).addReglesAttaquant(doctrineTactiqueEtCommandantEtLieutenant)
.addArmeAttaquant(bolter).addProfilDefenseur(GardienEldar).addReglesDefenseur(regleGardien)
.addBatiment(batiment).build();
Fraction probaToucheTir = new Fraction(2, 3);
Fraction probaBlesse = new Fraction(2, 3);
Fraction probaRateBlessureMaisRetente = new Fraction(1, 6);
Fraction probaEldarRateSauvegarde = new Fraction(5, 6);
// Marine rate blessure
Fraction ch1 = CheminBuilder.getInstance().addEvent(probaToucheTir).addEvent(probaRateBlessureMaisRetente)
.addEvent(probaBlesse).addEvent(probaEldarRateSauvegarde).build();
// Marine réussi blessure
Fraction ch2 = CheminBuilder.getInstance().addEvent(probaToucheTir).addEvent(probaBlesse)
.addEvent(probaEldarRateSauvegarde).build();
Fraction attendu = CheminBuilder.doSomme(Arrays.asList(ch1, ch2));
Fraction proba = calculMort.calculProbabiliteMort(contexteAction);
Assertions.assertThat(proba).isEqualTo(attendu);
}
@Test
public void testSpaceMarineInterssessorACoteDeCommandantEtLieutenantTirentSurGardienEldarDansBatiment()
throws CalculException {
IProfil spaceMarine = ContexteSpaceMarineIntersessor.getProfilSpaceMarineIntersessor();
IArmeDeTir bolter = ContexteSpaceMarineIntersessor.getFusilBolter();
IReglesSpeciales doctrineTactiqueEtCommandantEtLieutenant = ContexteSpaceMarineIntersessor
.getDoctrineEtCommandantEtLieutenant();
IProfil GardienEldar = ContexteGardienEldar.getGardienEldar();
IReglesSpeciales regleGardien = ContexteGardienEldar.getRegleDefenseGardien();
IBatiment batiment = ContexteBatiment.getBatiment(true, true, false, false, false);
IContexteAction<IArmeDeTir> contexteAction = ContexteActionImplementationBuilder.getInstancePhaseDeTir()
.addProfilAttaquant(spaceMarine).addReglesAttaquant(doctrineTactiqueEtCommandantEtLieutenant)
.addArmeAttaquant(bolter).addProfilDefenseur(GardienEldar).addReglesDefenseur(regleGardien)
.addBatiment(batiment).build();
Fraction probaToucheTir = new Fraction(1, 2);
Fraction probaRateTirMaisRelance = new Fraction(1, 6);
Fraction probaBlesse = new Fraction(2, 3);
Fraction probaRateBlesseMaisRelance = new Fraction(1, 6);
Fraction probaEldarRateSauvegarde = new Fraction(2, 3);
// Touche ratée et Blesse réussie
Fraction ch1 = CheminBuilder.getInstance().addEvent(probaRateTirMaisRelance).addEvent(probaToucheTir)
.addEvent(probaRateBlesseMaisRelance).addEvent(probaBlesse).addEvent(probaEldarRateSauvegarde).build();
// Touche ratée mais blesse réussie
Fraction ch2 = CheminBuilder.getInstance().addEvent(probaRateTirMaisRelance).addEvent(probaToucheTir)
.addEvent(probaBlesse).addEvent(probaEldarRateSauvegarde).build();
// Touche réussie mais blesse ratée
Fraction ch3 = CheminBuilder.getInstance().addEvent(probaToucheTir).addEvent(probaRateBlesseMaisRelance)
.addEvent(probaBlesse).addEvent(probaEldarRateSauvegarde).build();
// Tout réussie
Fraction ch4 = CheminBuilder.getInstance().addEvent(probaToucheTir).addEvent(probaBlesse)
.addEvent(probaEldarRateSauvegarde).build();
Fraction attendu = CheminBuilder.doSomme(Arrays.asList(ch1, ch2, ch3, ch4));
Fraction proba = calculMort.calculProbabiliteMort(contexteAction);
Assertions.assertThat(proba).isEqualTo(attendu);
}
@Test
public void testTerminatorDeathwingTirentSurGardienEldar() throws CalculException {
IProfil terminator = ContexteTerminatorDeathwing.getTerminatorDeathwing();
IArmeDeTir stormBolt = ContexteTerminatorDeathwing.getFulguant();
IReglesSpeciales doctrineTactiqueImmobile = ContexteTerminatorDeathwing.getRegleAttaqueDoctrineImmobile();
IProfil GardienEldar = ContexteGardienEldar.getGardienEldar();
IReglesSpeciales regleGardien = ContexteGardienEldar.getRegleDefenseGardien();
IBatiment batiment = ContexteBatiment.getAucun();
IContexteAction<IArmeDeTir> contexteAction = ContexteActionImplementationBuilder.getInstancePhaseDeTir()
.addProfilAttaquant(terminator).addReglesAttaquant(doctrineTactiqueImmobile).addArmeAttaquant(stormBolt)
.addProfilDefenseur(GardienEldar).addReglesDefenseur(regleGardien).addBatiment(batiment).build();
Fraction probaTouche = new Fraction(5, 6);
Fraction probaBlesse = new Fraction(2, 3);
Fraction probaRateSauvegarde = new Fraction(2, 3);
Fraction attendu = CheminBuilder.getInstance().addEvent(probaTouche).addEvent(probaBlesse)
.addEvent(probaRateSauvegarde).build();
Fraction proba = calculMort.calculProbabiliteMort(contexteAction);
Assertions.assertThat(proba).isEqualTo(attendu);
}
@Test
public void testImmortelNecronTireSurTerminatorDeathwing() throws CalculException {
IProfil immortel = ContexteImmortelNecron.getImmortelNecron();
IArmeDeTir eclateurGauss = ContexteImmortelNecron.getEclateurGauss();
IReglesSpeciales regleImmortel = ContexteImmortelNecron.getRegleAttaque();
IProfil terminator = ContexteTerminatorDeathwing.getTerminatorDeathwing();
IReglesSpeciales regleDefense = ContexteTerminatorDeathwing.getRegleDefense();
IBatiment batiment = ContexteBatiment.getAucun();
IContexteAction<IArmeDeTir> contexteAction = ContexteActionImplementationBuilder.getInstancePhaseDeTir()
.addProfilAttaquant(immortel).addReglesAttaquant(regleImmortel).addArmeAttaquant(eclateurGauss)
.addProfilDefenseur(terminator).addReglesDefenseur(regleDefense).addBatiment(batiment).build();
Fraction probaTouche = new Fraction(2, 3);
Fraction probaBlesse = new Fraction(1, 2);
Fraction probaRateSauvegarde = new Fraction(1, 3);
Fraction attendu = CheminBuilder.getInstance().addEvent(probaTouche).addEvent(probaBlesse)
.addEvent(probaRateSauvegarde).build();
Fraction proba = calculMort.calculProbabiliteMort(contexteAction);
Assertions.assertThat(proba).isEqualTo(attendu);
}
@Test
public void testimmortelNecronTireSurChevalierNoirRavenwing() throws CalculException {
IProfil immortel = ContexteImmortelNecron.getImmortelNecron();
IArmeDeTir eclateurGauss = ContexteImmortelNecron.getEclateurGauss();
IReglesSpeciales regleImmortel = ContexteImmortelNecron.getRegleAttaque();
IProfil chevalierRavenwing = ContexteChevalierNoirRavenwing.getChevalierNoirRavenwing();
IReglesSpeciales regleDefense = ContexteChevalierNoirRavenwing.getRavenwingSalome();
IBatiment batiment = ContexteBatiment.getAucun();
IContexteAction<IArmeDeTir> contexteAction = ContexteActionImplementationBuilder.getInstancePhaseDeTir()
.addProfilAttaquant(immortel).addReglesAttaquant(regleImmortel).addArmeAttaquant(eclateurGauss)
.addProfilDefenseur(chevalierRavenwing).addReglesDefenseur(regleDefense).addBatiment(batiment).build();
Fraction probaTouche = new Fraction(1, 2);
Fraction probaBlesse = new Fraction(1, 2);
Fraction probaRateSauvegarde = new Fraction(1, 3);
Fraction attendu = CheminBuilder.getInstance().addEvent(probaTouche).addEvent(probaBlesse)
.addEvent(probaRateSauvegarde).build();
Fraction proba = calculMort.calculProbabiliteMort(contexteAction);
Assertions.assertThat(proba).isEqualTo(attendu);
}
@Test
public void testChenilleCrachePesteTirIndirectSoeurCouvert() throws CalculException {
IProfil ChenilleCrachePeste = ContexteChenilleCrachepeste.getChenilleCrachepeste();
IArmeDeTir mortierCrachePeste = ContexteChenilleCrachepeste.getMortierCrachePeste();
IReglesSpeciales regleAttaque = ContexteChenilleCrachepeste.getRegleAttaque();
IProfil soeur = ContexteSoeurBataille.getSoeurBataille();
IReglesSpeciales regleDefense = ContexteSoeurBataille.getRegleDefense();
IBatiment batiment = ContexteBatiment.getBatiment(true, true, false, false, false);
IContexteAction<IArmeDeTir> contexte = ContexteActionImplementationBuilder.getInstancePhaseDeTir()
.addProfilAttaquant(ChenilleCrachePeste).addReglesAttaquant(regleAttaque)
.addArmeAttaquant(mortierCrachePeste).addProfilDefenseur(soeur).addReglesDefenseur(regleDefense)
.addBatiment(batiment).addIsTirIndirect(true).build();
Fraction probaTouche = new Fraction(1, 2);
Fraction probaBlesse = new Fraction(5, 6);
Fraction probaRateBlessure = new Fraction(1, 6);
Fraction probaRateSauvegarde = new Fraction(1, 6);
Fraction ch1 = CheminBuilder.getInstance().addEvent(probaTouche).addEvent(probaRateBlessure)
.addEvent(probaBlesse).addEvent(probaRateSauvegarde).build();
Fraction ch2 = CheminBuilder.getInstance().addEvent(probaTouche).addEvent(probaBlesse)
.addEvent(probaRateSauvegarde).build();
Fraction attendu = CheminBuilder.doSomme(Arrays.asList(ch1, ch2));
Fraction proba = calculMort.calculProbabiliteMort(contexte);
Assertions.assertThat(proba).isEqualTo(attendu);
}
@Test
public void testSoeursTirentSurGardienBolter() throws CalculException {
IProfil soeur = ContexteSoeurBataille.getSoeurBataille();
IArmeDeTir bolter = ContexteSoeurBataille.getBolter();
IReglesSpeciales regleAttaque = ContexteSoeurBataille.getAttaqueRiteDirectionDivine();
IProfil eldar = ContexteGardienEldar.getGardienEldar();
IReglesSpeciales regleDefense = ContexteGardienEldar.getRegleDefenseGardien();
IBatiment aucun = ContexteBatiment.getAucun();
IContexteAction<IArmeDeTir> contexte = ContexteActionImplementationBuilder.getInstancePhaseDeTir()
.addProfilAttaquant(soeur).addArmeAttaquant(bolter).addReglesAttaquant(regleAttaque)
.addProfilDefenseur(eldar).addReglesDefenseur(regleDefense).addBatiment(aucun).build();
Fraction probaTouche = new Fraction(2, 3);
Fraction probaBlessePANormal = new Fraction(1, 2);
Fraction probaBlesseAmeliorationPA = new Fraction(1, 6);
Fraction probaRateSauvegarceCas1 = new Fraction(1, 2);
Fraction probaRateSauvegardeCas2 = new Fraction(2, 3);
Fraction ch1 = CheminBuilder.getInstance().addEvent(probaTouche).addEvent(probaBlessePANormal)
.addEvent(probaRateSauvegarceCas1).build();
Fraction ch2 = CheminBuilder.getInstance().addEvent(probaTouche).addEvent(probaBlesseAmeliorationPA)
.addEvent(probaRateSauvegardeCas2).build();
Fraction attendu = CheminBuilder.doSomme(Arrays.asList(ch1, ch2));
Fraction proba = calculMort.calculProbabiliteMort(contexte);
Assertions.assertThat(proba).isEqualTo(attendu);
}
@Test
public void testSoeursTirentSurGardienLanceFlammeLourd() throws CalculException {
IProfil soeur = ContexteSoeurBataille.getSoeurBataille();
IArmeDeTir lanceFlammeLourd = ContexteSoeurBataille.getLanceFlammeLourd();
IReglesSpeciales regleAttaque = ContexteSoeurBataille.getAttaqueRiteDirectionDivine();
IProfil eldar = ContexteGardienEldar.getGardienEldar();
IReglesSpeciales regleDefense = ContexteGardienEldar.getRegleDefenseGardien();
IBatiment aucun = ContexteBatiment.getAucun();
IContexteAction<IArmeDeTir> contexte = ContexteActionImplementationBuilder.getInstancePhaseDeTir()
.addProfilAttaquant(soeur).addArmeAttaquant(lanceFlammeLourd).addReglesAttaquant(regleAttaque)
.addProfilDefenseur(eldar).addReglesDefenseur(regleDefense).addBatiment(aucun).build();
Fraction probaBlessePANormal = new Fraction(5, 6);
Fraction probaBlesseAmeliorationPA = new Fraction(1, 6);
Fraction probaRateSauvegarceCas1 = new Fraction(2, 3);
Fraction probaRateSauvegardeCas2 = new Fraction(1, 6);
Fraction ch1 = CheminBuilder.getInstance().addEvent(probaBlessePANormal).addEvent(probaRateSauvegarceCas1)
.build();
Fraction ch2 = CheminBuilder.getInstance().addEvent(probaBlesseAmeliorationPA).addEvent(probaRateSauvegardeCas2)
.build();
Fraction attendu = CheminBuilder.doSomme(Arrays.asList(ch1, ch2));
Fraction proba = calculMort.calculProbabiliteMort(contexte);
Assertions.assertThat(proba).isEqualTo(attendu);
}
@Test
public void testSoeursTirentSurMarineDeLaPeste() throws CalculException {
IProfil soeur = ContexteSoeurBataille.getSoeurBataille();
IArmeDeTir bolter = ContexteSoeurBataille.getBolter();
IReglesSpeciales regleAttaque = ContexteSoeurBataille.getAttaqueRiteDirectionDivine();
IProfil marinePeste = ContexteMarinePeste.getMarinePeste();
IReglesSpeciales regleDefense = ContexteMarinePeste.getRegleDefense();
IBatiment aucun = ContexteBatiment.getAucun();
IContexteAction<IArmeDeTir> contexte = ContexteActionImplementationBuilder.getInstancePhaseDeTir()
.addProfilAttaquant(soeur).addArmeAttaquant(bolter).addReglesAttaquant(regleAttaque)
.addProfilDefenseur(marinePeste).addReglesDefenseur(regleDefense).addBatiment(aucun).build();
Fraction probaTouche = new Fraction(2, 3);
Fraction probaBlesse = new Fraction(1, 3);
Fraction probaRateSauvegarde = new Fraction(1, 3);
Fraction attendu = CheminBuilder.getInstance().addEvent(probaTouche).addEvent(probaBlesse)
.addEvent(probaRateSauvegarde).build();
Fraction proba = calculMort.calculProbabiliteMort(contexte);
Assertions.assertThat(proba).isEqualTo(attendu);
}
@Test
public void testMarinePesteTirentSurSoeur() throws CalculException {
IProfil marinePeste = ContexteMarinePeste.getMarinePeste();
IArmeDeTir bolter = ContexteMarinePeste.getBolter();
IReglesSpeciales regleAttaque = ContexteMarinePeste.getRegleAttaque();
IProfil soeur = ContexteSoeurBataille.getSoeurBataille();
IReglesSpeciales regleDefense = ContexteSoeurBataille.getRegleDefense();
IBatiment aucun = ContexteBatiment.getAucun();
IContexteAction<IArmeDeTir> contexte = ContexteActionImplementationBuilder.getInstancePhaseDeTir()
.addProfilAttaquant(marinePeste).addArmeAttaquant(bolter).addReglesAttaquant(regleAttaque)
.addProfilDefenseur(soeur).addReglesDefenseur(regleDefense).addBatiment(aucun).build();
Fraction probaTouche = new Fraction(2, 3);
Fraction probaBlesse = new Fraction(5, 6);
Fraction probaRateSauvegarde = new Fraction(1, 3);
Fraction attendu = CheminBuilder.getInstance().addEvent(probaTouche).addEvent(probaBlesse)
.addEvent(probaRateSauvegarde).build();
Fraction proba = calculMort.calculProbabiliteMort(contexte);
Assertions.assertThat(proba).isEqualTo(attendu);
}
@Test
public void testGuerrierKabalitePesteTirentSurSoeur() throws CalculException {
IProfil guerrierKabalite = ContexteGuerrierKabalite.getGuerrierKabalite();
IArmeDeTir fusil = ContexteGuerrierKabalite.getFusilEclateur();
IReglesSpeciales regleAttaque = ContexteGuerrierKabalite.getRegleAttaque();
IProfil soeur = ContexteSoeurBataille.getSoeurBataille();
IReglesSpeciales regleDefense = ContexteSoeurBataille.getRegleDefense();
IBatiment aucun = ContexteBatiment.getAucun();
IContexteAction<IArmeDeTir> contexte = ContexteActionImplementationBuilder.getInstancePhaseDeTir()
.addProfilAttaquant(guerrierKabalite).addArmeAttaquant(fusil).addReglesAttaquant(regleAttaque)
.addProfilDefenseur(soeur).addReglesDefenseur(regleDefense).addBatiment(aucun).build();
Fraction probaTouche = new Fraction(2, 3);
Fraction probaBlesse = new Fraction(1, 2);
Fraction probaRateSauvegarde = new Fraction(1, 3);
Fraction attendu = CheminBuilder.getInstance().addEvent(probaTouche).addEvent(probaBlesse)
.addEvent(probaRateSauvegarde).build();
Fraction proba = calculMort.calculProbabiliteMort(contexte);
Assertions.assertThat(proba).isEqualTo(attendu);
}
@Test
public void testRangerEldarTirentSoeursRepentia() throws CalculException {
IProfil ranger = ContexteRangerEldar.getRanger();
IArmeDeTir longFusil = ContexteRangerEldar.getLongFusilRanger();
IReglesSpeciales regleAttaquant = ContexteRangerEldar.getRegleAttaque();
IProfil soeurRepentia = ContexteSoeurRepentia.getSoeurRepentia();
IReglesSpeciales regleDefense = ContexteSoeurRepentia.getRegleDefense();
IBatiment aucun = ContexteBatiment.getAucun();
IContexteAction<IArmeDeTir> contexte = ContexteActionImplementationBuilder.getInstancePhaseDeTir()
.addProfilAttaquant(ranger).addArmeAttaquant(longFusil).addReglesAttaquant(regleAttaquant)
.addProfilDefenseur(soeurRepentia).addReglesDefenseur(regleDefense).addBatiment(aucun).build();
Fraction probaToucheSansBM = new Fraction(2, 3);
Fraction probaToucheAvecBM = new Fraction(1, 6);
Fraction probaBlesse = new Fraction(2, 3);
Fraction probaRateSauvegarde = new Fraction(5, 6);
Fraction probaNePasIgnorerBlessure = new Fraction(2, 3);
Fraction ch1 = CheminBuilder.getInstance().addEvent(probaToucheSansBM).addEvent(probaBlesse)
.addEvent(probaRateSauvegarde).addEvent(probaNePasIgnorerBlessure).build();
Fraction ch2 = CheminBuilder.getInstance().addEvent(probaToucheAvecBM).addEvent(probaNePasIgnorerBlessure)
.build();
Fraction attendu = CheminBuilder.doSomme(Arrays.asList(ch1, ch2));
Fraction proba = calculMort.calculProbabiliteMort(contexte);
Assertions.assertThat(proba).isEqualTo(attendu);
}
}
Code: package com.calculateur.warhammer.calcul.calcul;
import java.util.Arrays;
import org.apache.commons.math3.fraction.Fraction;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;
import com.calculateur.warhammer.data.ContexteActionImplementationBuilder;
import com.calculateur.warhammer.data.ContexteBatiment;
import com.calculateur.warhammer.data.ContexteGardienEldar;
import com.calculateur.warhammer.data.ContexteGuerrierNecron;
import com.calculateur.warhammer.data.ContexteImmortelNecron;
import com.calculateur.warhammer.data.ContexteMarinePeste;
import com.calculateur.warhammer.data.ContexteRangerEldar;
import com.calculateur.warhammer.data.ContexteSoeurBataille;
import com.calculateur.warhammer.data.ContexteSoeurRepentia;
import com.calculateur.warhammer.data.ContexteSpaceMarineIntersessor;
import com.calculateur.warhammer.data.ContexteTerminatorDeathwing;
import com.calculateur.warhammer.data.IArmeDeTir;
import com.calculateur.warhammer.data.IBatiment;
import com.calculateur.warhammer.data.IContexteAction;
import com.calculateur.warhammer.data.IProfil;
import com.calculateur.warhammer.data.IReglesSpeciales;
public class CalculMortTirContreChargeTest {
private final ICalculMort<IArmeDeTir> calculMort;
public CalculMortTirContreChargeTest() {
calculMort = new CalculMortTirContreCharge();
}
@Test
public void testSpaceMarineInterssessorTirentSurGuerrierNecronContreCharge() throws CalculException {
IProfil spaceMarine = ContexteSpaceMarineIntersessor.getProfilSpaceMarineIntersessor();
IArmeDeTir bolter = ContexteSpaceMarineIntersessor.getFusilBolter();
IReglesSpeciales regleBaseMarine = ContexteSpaceMarineIntersessor.getRegleAttaqueBase();
IProfil necron = ContexteGuerrierNecron.getGuerrierNecron();
IReglesSpeciales regleBaseNecron = ContexteGuerrierNecron.getRegleDefense();
IBatiment aucun = ContexteBatiment.getAucun();
IContexteAction<IArmeDeTir> contexteAction = ContexteActionImplementationBuilder.getInstancePhaseDeTir()
.addProfilAttaquant(spaceMarine).addReglesAttaquant(regleBaseMarine).addArmeAttaquant(bolter)
.addProfilDefenseur(necron).addReglesDefenseur(regleBaseNecron).addBatiment(aucun).build();
Fraction probaTouche = new Fraction(1, 6);
Fraction probaBlesse = new Fraction(1, 2);
Fraction probaRateSauvegarde = new Fraction(2, 3);
Fraction probaNecronNESeRelevePasDef1 = new Fraction(1, 2);
Fraction probaNecronNESeRelevePasDef2 = new Fraction(2, 3);
Fraction probaNecronNeSeRelevePasMaisRelance = new Fraction(1, 6);
Fraction ch1 = CheminBuilder.getInstance().addEvent(probaTouche).addEvent(probaBlesse)
.addEvent(probaRateSauvegarde).addEvent(probaNecronNeSeRelevePasMaisRelance)
.addEvent(probaNecronNESeRelevePasDef2).build();
Fraction ch2 = CheminBuilder.getInstance().addEvent(probaTouche).addEvent(probaBlesse)
.addEvent(probaRateSauvegarde).addEvent(probaNecronNESeRelevePasDef1).build();
Fraction attendu = CheminBuilder.doSomme(Arrays.asList(ch1, ch2));
Fraction proba = calculMort.calculProbabiliteMort(contexteAction);
Assertions.assertThat(proba).isEqualTo(attendu);
}
@Test
public void testSpaceMarineIntersessorTirentSurimmortelNecronContreCharge() throws CalculException {
IProfil spaceMarine = ContexteSpaceMarineIntersessor.getProfilSpaceMarineIntersessor();
IArmeDeTir bolter = ContexteSpaceMarineIntersessor.getFusilBolter();
IReglesSpeciales regleBaseMarine = ContexteSpaceMarineIntersessor.getRegleAttaqueBase();
IProfil immortel = ContexteImmortelNecron.getImmortelNecron();
IReglesSpeciales regleDefense = ContexteImmortelNecron.getRegleDefense();
IBatiment aucun = ContexteBatiment.getAucun();
IContexteAction<IArmeDeTir> contexteAction = ContexteActionImplementationBuilder.getInstancePhaseDeTir()
.addProfilAttaquant(spaceMarine).addReglesAttaquant(regleBaseMarine).addArmeAttaquant(bolter)
.addProfilDefenseur(immortel).addReglesDefenseur(regleDefense).addBatiment(aucun).build();
Fraction probaTouche = new Fraction(1, 6);
Fraction probaBlesse = new Fraction(1, 3);
Fraction probaRateSave = new Fraction(1, 2);
Fraction probaNeSeRelevePas = new Fraction(2, 3);
Fraction attendu = CheminBuilder.getInstance().addEvent(probaTouche).addEvent(probaBlesse)
.addEvent(probaRateSave).addEvent(probaNeSeRelevePas).build();
Fraction proba = calculMort.calculProbabiliteMort(contexteAction);
Assertions.assertThat(proba).isEqualTo(attendu);
}
@Test
public void testSpaceMarineInterssessorACoteDeCommandantTirentSurGardienEldarContreCharge() throws CalculException {
IProfil spaceMarine = ContexteSpaceMarineIntersessor.getProfilSpaceMarineIntersessor();
IArmeDeTir bolter = ContexteSpaceMarineIntersessor.getFusilBolter();
IReglesSpeciales doctrineTactiqueEtCommandantEtLieutenant = ContexteSpaceMarineIntersessor
.getDoctrineEtCommandant();
IProfil GardienEldar = ContexteGardienEldar.getGardienEldar();
IReglesSpeciales regleGardien = ContexteGardienEldar.getRegleDefenseGardien();
IBatiment batiment = ContexteBatiment.getAucun();
IContexteAction<IArmeDeTir> contexteAction = ContexteActionImplementationBuilder.getInstancePhaseDeTir()
.addProfilAttaquant(spaceMarine).addReglesAttaquant(doctrineTactiqueEtCommandantEtLieutenant)
.addArmeAttaquant(bolter).addProfilDefenseur(GardienEldar).addReglesDefenseur(regleGardien)
.addBatiment(batiment).build();
Fraction probaToucheTir = new Fraction(1, 6);
Fraction probaRateTirMaisRelance = new Fraction(1, 6);
Fraction probaBlesse = new Fraction(2, 3);
Fraction probaEldarRateSauvegarde = new Fraction(5, 6);
// Marine rate tir
Fraction ch1 = CheminBuilder.getInstance().addEvent(probaRateTirMaisRelance).addEvent(probaToucheTir)
.addEvent(probaBlesse).addEvent(probaEldarRateSauvegarde).build();
// Marine réussi tir
Fraction ch2 = CheminBuilder.getInstance().addEvent(probaToucheTir).addEvent(probaBlesse)
.addEvent(probaEldarRateSauvegarde).build();
Fraction attendu = CheminBuilder.doSomme(Arrays.asList(ch1, ch2));
Fraction proba = calculMort.calculProbabiliteMort(contexteAction);
Assertions.assertThat(proba).isEqualTo(attendu);
}
@Test
public void testSpaceMarineInterssessorACoteDeLieutenantTirentSurGardienEldarContreCharge() throws CalculException {
IProfil spaceMarine = ContexteSpaceMarineIntersessor.getProfilSpaceMarineIntersessor();
IArmeDeTir bolter = ContexteSpaceMarineIntersessor.getFusilBolter();
IReglesSpeciales doctrineTactiqueEtCommandantEtLieutenant = ContexteSpaceMarineIntersessor
.getDoctrineEtLieutenant();
IProfil GardienEldar = ContexteGardienEldar.getGardienEldar();
IReglesSpeciales regleGardien = ContexteGardienEldar.getRegleDefenseGardien();
IBatiment batiment = ContexteBatiment.getAucun();
IContexteAction<IArmeDeTir> contexteAction = ContexteActionImplementationBuilder.getInstancePhaseDeTir()
.addProfilAttaquant(spaceMarine).addReglesAttaquant(doctrineTactiqueEtCommandantEtLieutenant)
.addArmeAttaquant(bolter).addProfilDefenseur(GardienEldar).addReglesDefenseur(regleGardien)
.addBatiment(batiment).build();
Fraction probaToucheTir = new Fraction(1, 6);
Fraction probaBlesse = new Fraction(2, 3);
Fraction probaRateBlessureMaisRetente = new Fraction(1, 6);
Fraction probaEldarRateSauvegarde = new Fraction(5, 6);
// Marine rate blessure
Fraction ch1 = CheminBuilder.getInstance().addEvent(probaToucheTir).addEvent(probaRateBlessureMaisRetente)
.addEvent(probaBlesse).addEvent(probaEldarRateSauvegarde).build();
// Marine réussi blessure
Fraction ch2 = CheminBuilder.getInstance().addEvent(probaToucheTir).addEvent(probaBlesse)
.addEvent(probaEldarRateSauvegarde).build();
Fraction attendu = CheminBuilder.doSomme(Arrays.asList(ch1, ch2));
Fraction proba = calculMort.calculProbabiliteMort(contexteAction);
Assertions.assertThat(proba).isEqualTo(attendu);
}
@Test
public void testSpaceMarineInterssessorACoteDeCommandantEtLieutenantDansCouvertTirentSurGardienEldarContreCharge()
throws CalculException {
IProfil spaceMarine = ContexteSpaceMarineIntersessor.getProfilSpaceMarineIntersessor();
IArmeDeTir bolter = ContexteSpaceMarineIntersessor.getFusilBolter();
IReglesSpeciales doctrineTactiqueEtCommandantEtLieutenant = ContexteSpaceMarineIntersessor
.getDoctrineEtCommandantEtLieutenant();
IProfil GardienEldar = ContexteGardienEldar.getGardienEldar();
IReglesSpeciales regleGardien = ContexteGardienEldar.getRegleDefenseGardien();
IBatiment batiment = ContexteBatiment.getBatiment(false, false, true, false, false);
IContexteAction<IArmeDeTir> contexteAction = ContexteActionImplementationBuilder.getInstancePhaseDeTir()
.addProfilAttaquant(spaceMarine).addReglesAttaquant(doctrineTactiqueEtCommandantEtLieutenant)
.addArmeAttaquant(bolter).addProfilDefenseur(GardienEldar).addReglesDefenseur(regleGardien)
.addBatiment(batiment).build();
Fraction probaToucheTir = new Fraction(1, 3);
Fraction probaRateTirMaisRelance = new Fraction(1, 6);
Fraction probaBlesse = new Fraction(2, 3);
Fraction probaRateBlesseMaisRelance = new Fraction(1, 6);
Fraction probaEldarRateSauvegarde = new Fraction(5, 6);
// Touche ratée et Blesse réussie
Fraction ch1 = CheminBuilder.getInstance().addEvent(probaRateTirMaisRelance).addEvent(probaToucheTir)
.addEvent(probaRateBlesseMaisRelance).addEvent(probaBlesse).addEvent(probaEldarRateSauvegarde).build();
// Touche ratée mais blesse réussie
Fraction ch2 = CheminBuilder.getInstance().addEvent(probaRateTirMaisRelance).addEvent(probaToucheTir)
.addEvent(probaBlesse).addEvent(probaEldarRateSauvegarde).build();
// Touche réussie mais blesse ratée
Fraction ch3 = CheminBuilder.getInstance().addEvent(probaToucheTir).addEvent(probaRateBlesseMaisRelance)
.addEvent(probaBlesse).addEvent(probaEldarRateSauvegarde).build();
// Tout réussie
Fraction ch4 = CheminBuilder.getInstance().addEvent(probaToucheTir).addEvent(probaBlesse)
.addEvent(probaEldarRateSauvegarde).build();
Fraction attendu = CheminBuilder.doSomme(Arrays.asList(ch1, ch2, ch3, ch4));
Fraction proba = calculMort.calculProbabiliteMort(contexteAction);
Assertions.assertThat(proba).isEqualTo(attendu);
}
@Test
public void testImmortelNecronTireSurTerminatorDeathwingContreCharge() throws CalculException {
IProfil immortel = ContexteImmortelNecron.getImmortelNecron();
IArmeDeTir eclateurGauss = ContexteImmortelNecron.getEclateurGauss();
IReglesSpeciales regleImmortel = ContexteImmortelNecron.getRegleAttaque();
IProfil terminator = ContexteTerminatorDeathwing.getTerminatorDeathwing();
IReglesSpeciales regleDefense = ContexteTerminatorDeathwing.getRegleDefense();
IBatiment batiment = ContexteBatiment.getAucun();
IContexteAction<IArmeDeTir> contexteAction = ContexteActionImplementationBuilder.getInstancePhaseDeTir()
.addProfilAttaquant(immortel).addReglesAttaquant(regleImmortel).addArmeAttaquant(eclateurGauss)
.addProfilDefenseur(terminator).addReglesDefenseur(regleDefense).addBatiment(batiment).build();
Fraction probaTouche = new Fraction(1, 6);
Fraction probaBlesse = new Fraction(1, 2);
Fraction probaRateSauvegarde = new Fraction(1, 3);
Fraction attendu = CheminBuilder.getInstance().addEvent(probaTouche).addEvent(probaBlesse)
.addEvent(probaRateSauvegarde).build();
Fraction proba = calculMort.calculProbabiliteMort(contexteAction);
Assertions.assertThat(proba).isEqualTo(attendu);
}
@Test
public void testSoeursTirentSurGardienBolterContreCharge() throws CalculException {
IProfil soeur = ContexteSoeurBataille.getSoeurBataille();
IArmeDeTir bolter = ContexteSoeurBataille.getBolter();
IReglesSpeciales regleAttaque = ContexteSoeurBataille.getAttaqueRiteDirectionDivine();
IProfil eldar = ContexteGardienEldar.getGardienEldar();
IReglesSpeciales regleDefense = ContexteGardienEldar.getRegleDefenseGardien();
IBatiment aucun = ContexteBatiment.getAucun();
IContexteAction<IArmeDeTir> contexte = ContexteActionImplementationBuilder.getInstancePhaseDeTir()
.addProfilAttaquant(soeur).addArmeAttaquant(bolter).addReglesAttaquant(regleAttaque)
.addProfilDefenseur(eldar).addReglesDefenseur(regleDefense).addBatiment(aucun).build();
Fraction probaTouche = new Fraction(1, 6);
Fraction probaBlessePANormal = new Fraction(1, 2);
Fraction probaBlesseAmeliorationPA = new Fraction(1, 6);
Fraction probaRateSauvegarceCas1 = new Fraction(1, 2);
Fraction probaRateSauvegardeCas2 = new Fraction(2, 3);
Fraction ch1 = CheminBuilder.getInstance().addEvent(probaTouche).addEvent(probaBlessePANormal)
.addEvent(probaRateSauvegarceCas1).build();
Fraction ch2 = CheminBuilder.getInstance().addEvent(probaTouche).addEvent(probaBlesseAmeliorationPA)
.addEvent(probaRateSauvegardeCas2).build();
Fraction attendu = CheminBuilder.doSomme(Arrays.asList(ch1, ch2));
Fraction proba = calculMort.calculProbabiliteMort(contexte);
Assertions.assertThat(proba).isEqualTo(attendu);
}
@Test
public void testSoeursTirentSurGardienLanceFlammeLourdContreCharge() throws CalculException {
IProfil soeur = ContexteSoeurBataille.getSoeurBataille();
IArmeDeTir lanceFlammeLourd = ContexteSoeurBataille.getLanceFlammeLourd();
IReglesSpeciales regleAttaque = ContexteSoeurBataille.getAttaqueRiteDirectionDivine();
IProfil eldar = ContexteGardienEldar.getGardienEldar();
IReglesSpeciales regleDefense = ContexteGardienEldar.getRegleDefenseGardien();
IBatiment aucun = ContexteBatiment.getAucun();
IContexteAction<IArmeDeTir> contexte = ContexteActionImplementationBuilder.getInstancePhaseDeTir()
.addProfilAttaquant(soeur).addArmeAttaquant(lanceFlammeLourd).addReglesAttaquant(regleAttaque)
.addProfilDefenseur(eldar).addReglesDefenseur(regleDefense).addBatiment(aucun).build();
Fraction probaBlessePANormal = new Fraction(5, 6);
Fraction probaBlesseAmeliorationPA = new Fraction(1, 6);
Fraction probaRateSauvegarceCas1 = new Fraction(2, 3);
Fraction probaRateSauvegardeCas2 = new Fraction(1, 6);
Fraction ch1 = CheminBuilder.getInstance().addEvent(probaBlessePANormal).addEvent(probaRateSauvegarceCas1)
.build();
Fraction ch2 = CheminBuilder.getInstance().addEvent(probaBlesseAmeliorationPA).addEvent(probaRateSauvegardeCas2)
.build();
Fraction attendu = CheminBuilder.doSomme(Arrays.asList(ch1, ch2));
Fraction proba = calculMort.calculProbabiliteMort(contexte);
Assertions.assertThat(proba).isEqualTo(attendu);
}
@Test
public void testSoeursTirentSurMarineDeLaPesteContreCharge() throws CalculException {
IProfil soeur = ContexteSoeurBataille.getSoeurBataille();
IArmeDeTir bolter = ContexteSoeurBataille.getBolter();
IReglesSpeciales regleAttaque = ContexteSoeurBataille.getAttaqueRiteDirectionDivine();
IProfil marinePeste = ContexteMarinePeste.getMarinePeste();
IReglesSpeciales regleDefense = ContexteMarinePeste.getRegleDefense();
IBatiment aucun = ContexteBatiment.getAucun();
IContexteAction<IArmeDeTir> contexte = ContexteActionImplementationBuilder.getInstancePhaseDeTir()
.addProfilAttaquant(soeur).addArmeAttaquant(bolter).addReglesAttaquant(regleAttaque)
.addProfilDefenseur(marinePeste).addReglesDefenseur(regleDefense).addBatiment(aucun).build();
Fraction probaTouche = new Fraction(1, 6);
Fraction probaBlesse = new Fraction(1, 3);
Fraction probaRateSauvegarde = new Fraction(1, 3);
Fraction attendu = CheminBuilder.getInstance().addEvent(probaTouche).addEvent(probaBlesse)
.addEvent(probaRateSauvegarde).build();
Fraction proba = calculMort.calculProbabiliteMort(contexte);
Assertions.assertThat(proba).isEqualTo(attendu);
}
@Test
public void testMarinePesteTirentSurSoeurContreCharge() throws CalculException {
IProfil marinePeste = ContexteMarinePeste.getMarinePeste();
IArmeDeTir bolter = ContexteMarinePeste.getBolter();
IReglesSpeciales regleAttaque = ContexteMarinePeste.getRegleAttaque();
IProfil soeur = ContexteSoeurBataille.getSoeurBataille();
IReglesSpeciales regleDefense = ContexteSoeurBataille.getRegleDefense();
IBatiment aucun = ContexteBatiment.getAucun();
IContexteAction<IArmeDeTir> contexte = ContexteActionImplementationBuilder.getInstancePhaseDeTir()
.addProfilAttaquant(marinePeste).addArmeAttaquant(bolter).addReglesAttaquant(regleAttaque)
.addProfilDefenseur(soeur).addReglesDefenseur(regleDefense).addBatiment(aucun).build();
Fraction probaTouche = new Fraction(1, 6);
Fraction probaBlesse = new Fraction(5, 6);
Fraction probaRateSauvegarde = new Fraction(1, 3);
Fraction attendu = CheminBuilder.getInstance().addEvent(probaTouche).addEvent(probaBlesse)
.addEvent(probaRateSauvegarde).build();
Fraction proba = calculMort.calculProbabiliteMort(contexte);
Assertions.assertThat(proba).isEqualTo(attendu);
}
@Test
public void testRangerEldarTirentSoeursRepentiaContreCharge() throws CalculException {
IProfil ranger = ContexteRangerEldar.getRanger();
IArmeDeTir longFusil = ContexteRangerEldar.getLongFusilRanger();
IReglesSpeciales regleAttaquant = ContexteRangerEldar.getRegleAttaque();
IProfil soeurRepentia = ContexteSoeurRepentia.getSoeurRepentia();
IReglesSpeciales regleDefense = ContexteSoeurRepentia.getRegleDefense();
IBatiment aucun = ContexteBatiment.getAucun();
IContexteAction<IArmeDeTir> contexte = ContexteActionImplementationBuilder.getInstancePhaseDeTir()
.addProfilAttaquant(ranger).addArmeAttaquant(longFusil).addReglesAttaquant(regleAttaquant)
.addProfilDefenseur(soeurRepentia).addReglesDefenseur(regleDefense).addBatiment(aucun).build();
Fraction probaTouche = new Fraction(1, 6);
Fraction probaNePasIgnorerBlessure = new Fraction(2, 3);
Fraction attendu = CheminBuilder.getInstance().addEvent(probaTouche).addEvent(probaNePasIgnorerBlessure)
.build();
Fraction proba = calculMort.calculProbabiliteMort(contexte);
Assertions.assertThat(proba).isEqualTo(attendu);
}
}
Posts: 11,103
Threads: 141
Joined: Jul 2002
Reputation:
1
Trouvé dans un placard chez mes parents, ça ne nous rajeunit pas ^^
Posts: 8,126
Threads: 166
Joined: Oct 2002
Reputation:
3
et beh putain il est collector celui-là
Posts: 3,449
Threads: 126
Joined: Jun 2003
Reputation:
1
Posts: 3,449
Threads: 126
Joined: Jun 2003
Reputation:
1
Posts: 11,103
Threads: 141
Joined: Jul 2002
Reputation:
1
C'est le moment de ressortir les Land Raider, apparemment ils passent à E9 et leur canon laser à D6+2, cf leak codex chaos :
https://www.warhammer-forum.com/index.ph...nt-3722878
Posts: 11,103
Threads: 141
Joined: Jul 2002
Reputation:
1
Posts: 8,126
Threads: 166
Joined: Oct 2002
Reputation:
3
Oulà endu 9 on n'en voit pas partout...
En plus il a droppé en point, clairement il va revenir (surtout que l'impact PA est tel que l'endu 9 va le mettre au top des chars de la méta)
|