Exemple #1
0
        public void GetNextPredictedCards_SortedByProbability()
        {
            AddMetaDeck("Hunter", new List <string> {
                "Alleycat"
            });
            AddMetaDeck("Hunter", new List <string> {
                "Deadly Shot", "Bear Trap", "Alleycat"
            });
            _metaDecks[1].Cards[0].Count = 40;
            _metaDecks[1].Cards[1].Count = 40;
            AddMetaDeck("Hunter", new List <string> {
                "Deadly Shot", "Alleycat",
            });
            _metaDecks[2].Cards[0].Count = 40;
            var opponent = new MockOpponent("Hunter");

            opponent.Mana = 1;
            var predictor = new Predictor(opponent, _metaDecks.AsReadOnly());

            var nextPredictedCards = predictor.GetNextPredictedCards(50);

            Assert.AreEqual("Deadly Shot", nextPredictedCards.ElementAt(0).Card.Name);
            Assert.AreEqual("Deadly Shot", nextPredictedCards.ElementAt(1).Card.Name);
            Assert.AreEqual("Bear Trap", nextPredictedCards.ElementAt(40).Card.Name);
        }
Exemple #2
0
        public void SeparateEntriesForCreatedCards()
        {
            var opponent = new MockOpponent("Hunter");

            AddMetaDeck("Hunter", new List <string> {
                "Alleycat"
            });
            var controller = new PredictionController(opponent, _metaDecks.AsReadOnly());

            opponent.KnownCards = CardList(new List <string> {
                "Alleycat"
            });
            opponent.KnownCards[0].IsCreated = true;
            var info = GetPredictionInfo(controller);

            Assert.AreEqual(2, info.PredictedCards.Count);
            var originalCardInfo = info.PredictedCards[0];

            Assert.AreEqual(0, originalCardInfo.NumPlayed);
            Assert.AreEqual(1, originalCardInfo.Card.Count);
            Assert.IsFalse(originalCardInfo.Card.IsCreated);
            var createdCardInfo = info.PredictedCards[1];

            Assert.AreEqual(1, createdCardInfo.NumPlayed);
            Assert.AreEqual(1, createdCardInfo.Card.Count);
            Assert.IsTrue(createdCardInfo.Card.IsCreated);
        }
Exemple #3
0
        public void CardPlayabilityAboveAvailableManaForNextTurn()
        {
            var opponent = new MockOpponent("Hunter");

            AddMetaDeck("Hunter", new List <string> {
                "Deadly Shot"
            });
            var controller = new PredictionController(opponent, _metaDecks.AsReadOnly());
            var info       = GetPredictionInfo(controller);

            Assert.AreEqual(PlayableType.AboveAvailableMana, info.PredictedCards[0].Playability);
        }
Exemple #4
0
        public void UpdatesWithNoDeckIfClassMismatch()
        {
            var opponent = new MockOpponent("Hunter");

            AddMetaDeck("Mage", new List <string> {
            });
            var controller = new PredictionController(opponent, _metaDecks.AsReadOnly());

            var info = GetPredictionInfo(controller);

            Assert.AreEqual(0, info.NumPossibleDecks);
        }
Exemple #5
0
        public void CardPlayedNotInMetaDecksIsMarkedOffMeta()
        {
            var opponent = new MockOpponent("Hunter");

            opponent.KnownCards = CardList(new List <string> {
                "Alleycat"
            });
            var controller = new PredictionController(opponent, _metaDecks.AsReadOnly());
            var info       = GetPredictionInfo(controller);

            Assert.IsTrue(info.PredictedCards[0].OffMeta);
        }
Exemple #6
0
        public void OnOpponentHandDiscard_CallsOnPredictionUpdate()
        {
            var opponent   = new MockOpponent("Hunter");
            var controller = new PredictionController(opponent, _metaDecks.AsReadOnly());

            bool called = false;

            controller.OnPredictionUpdate.Add(prediction => called = true);
            controller.OnOpponentHandDiscard(null);

            Assert.IsTrue(called);
        }
Exemple #7
0
        public void UpdatesWithMetaDeck()
        {
            var opponent = new MockOpponent("Hunter");

            AddMetaDeck("Hunter", new List <string> {
                "Deadly Shot"
            });
            var controller = new PredictionController(opponent, _metaDecks.AsReadOnly());

            var info = GetPredictionInfo(controller);

            Assert.AreEqual(1, info.NumPossibleDecks);
        }
Exemple #8
0
        public void GetPossibleDecks_MissingNonCollectibleCardDoesNotFilter()
        {
            var opponent = new MockOpponent("Hunter");

            AddMetaDeck("Hunter");
            var predictor = new Predictor(opponent, _metaDecks.AsReadOnly());

            var hunterCard = Database.GetCardFromName("Greater Emerald Spellstone");

            opponent.KnownCards.Add(hunterCard);
            predictor.CheckOpponentCards();
            Assert.AreEqual(1, predictor.PossibleDecks.Count);
        }
Exemple #9
0
        public void OnOpponentDraw_SecondTimeDoesNotCallOnPredictionUpdate()
        {
            var opponent   = new MockOpponent("Hunter");
            var controller = new PredictionController(opponent, _metaDecks.AsReadOnly());

            controller.OnOpponentDraw();

            bool called = false;

            controller.OnPredictionUpdate.Add(prediction => called = true);
            controller.OnOpponentDraw();

            Assert.IsFalse(called);
        }
Exemple #10
0
        public void JoustedCardCanBeOffMeta()
        {
            var opponent = new MockOpponent("Hunter");

            AddMetaDeck("Hunter", new List <string> {
            });
            opponent.KnownCards = CardList(new List <string> {
                "Alleycat"
            });
            opponent.KnownCards[0].Jousted = true;
            var controller = new PredictionController(opponent, _metaDecks.AsReadOnly());
            var info       = GetPredictionInfo(controller);

            Assert.IsTrue(info.PredictedCards[0].OffMeta);
        }
Exemple #11
0
        public void GetPossibleDecks_IgnoresOffMetaCard()
        {
            var opponent = new MockOpponent("Hunter");

            AddMetaDeck("Hunter", new List <string> {
                "Deadly Shot"
            });
            var predictor = new Predictor(opponent, _metaDecks.AsReadOnly());

            opponent.KnownCards = CardList(new List <string> {
                "Deadly Shot", "Alleycat"
            });
            predictor.CheckOpponentCards();
            Assert.AreEqual(1, predictor.PossibleDecks.Count);
        }
Exemple #12
0
        public void GetPredictedCard_ProbabilityReturnsToOneAfterSecondDeckFiltered()
        {
            AddMetaDeck("Hunter", new List <string> {
                "Hunter's Mark", "Alleycat"
            });
            AddMetaDeck("Hunter", new List <string> {
                "Alleycat", "Tracking"
            });
            var opponent  = new MockOpponent("Hunter");
            var predictor = new Predictor(opponent, _metaDecks.AsReadOnly());

            opponent.KnownCards.Add(Database.GetCardFromName("Tracking"));
            predictor.CheckOpponentCards();
            Assert.AreEqual(1, predictor.GetPredictedCard(Key("Tracking", 1)).Probability);
        }
Exemple #13
0
        public void JoustedCardsAreAddedButPlayedCountIsZero()
        {
            var opponent = new MockOpponent("Hunter");

            AddMetaDeck("Hunter", new List <string> {
            });
            opponent.KnownCards = CardList(new List <string> {
                "Alleycat"
            });
            opponent.KnownCards[0].Jousted = true;
            var controller = new PredictionController(opponent, _metaDecks.AsReadOnly());
            var info       = GetPredictionInfo(controller);

            Assert.AreEqual(0, info.PredictedCards[0].NumPlayed);
        }
Exemple #14
0
        public void MarksCardsAlreadyPlayed()
        {
            var opponent = new MockOpponent("Hunter");

            AddMetaDeck("Hunter", new List <string> {
                "Alleycat"
            });
            var controller = new PredictionController(opponent, _metaDecks.AsReadOnly());

            opponent.KnownCards = CardList(new List <string> {
                "Alleycat"
            });
            var info = GetPredictionInfo(controller);

            Assert.AreEqual(1, info.PredictedCards[0].NumPlayed);
        }
Exemple #15
0
        public void GetPredictedCards_FewerAfterDeckFiltered()
        {
            AddMetaDeck("Hunter", new List <string> {
                "Deadly Shot", "Alleycat"
            });
            AddMetaDeck("Hunter", new List <string> {
                "Deadly Shot", "Bear Trap"
            });

            var opponent  = new MockOpponent("Hunter");
            var predictor = new Predictor(opponent, _metaDecks.AsReadOnly());

            opponent.KnownCards.Add(Database.GetCardFromName("Alleycat"));
            predictor.CheckOpponentCards();
            Assert.AreEqual(2, predictor.PredictedCards.Count);
        }
Exemple #16
0
        public void GetNextPredictedCards_TruncatesLeftoverCards()
        {
            AddMetaDeck("Hunter", new List <string> {
                "Alleycat"
            });
            AddMetaDeck("Hunter", new List <string> {
                "Deadly Shot", "Alleycat"
            });
            _metaDecks[1].Cards[0].Count = 40;
            var opponent = new MockOpponent("Hunter");

            opponent.Mana = 1;
            var predictor = new Predictor(opponent, _metaDecks.AsReadOnly());

            Assert.AreEqual(10, predictor.GetNextPredictedCards(10).Count);
        }
Exemple #17
0
        public void GetPredictedCards_SortedSecondaryByLowerManaCost()
        {
            AddMetaDeck("Hunter", new List <string> {
                "Bear Trap", "Alleycat"
            });
            AddMetaDeck("Hunter", new List <string> {
                "Alleycat", "Tracking"
            });
            var opponent = new MockOpponent("Hunter");

            opponent.Mana = 2;
            var predictor          = new Predictor(opponent, _metaDecks.AsReadOnly());
            var firstPredictedCard = predictor.PredictedCards.ElementAt(1);

            Assert.AreEqual("Tracking", firstPredictedCard.Card.Name);
        }
Exemple #18
0
        public void CheckOpponentCards_MissingCardFiltersDeck()
        {
            var opponent = new MockOpponent("Hunter");

            AddMetaDeck("Hunter", new List <string> {
                "Deadly Shot"
            });
            AddMetaDeck("Hunter", new List <string> {
                "Alleycat"
            });
            var predictor = new Predictor(opponent, _metaDecks.AsReadOnly());

            opponent.KnownCards.Add(Database.GetCardFromName("Deadly Shot"));
            predictor.CheckOpponentCards();
            Assert.AreEqual(1, predictor.PossibleDecks.Count);
        }
Exemple #19
0
        public void UpdatesWithFullCardList()
        {
            var opponent = new MockOpponent("Hunter");

            AddMetaDeck("Hunter", new List <string> {
                "Deadly Shot", "Alleycat", "Bear Trap"
            });
            var controller = new PredictionController(opponent, _metaDecks.AsReadOnly());

            var info = GetPredictionInfo(controller);

            CollectionAssert.AreEqual(CardList(new List <string> {
                "Deadly Shot", "Alleycat", "Bear Trap"
            }),
                                      CardsFromInfo(info));
        }
Exemple #20
0
        public void SortEntriesByCreated()
        {
            var opponent = new MockOpponent("Hunter");

            AddMetaDeck("Hunter", new List <string> {
                "Bear Trap"
            });
            var controller = new PredictionController(opponent, _metaDecks.AsReadOnly());

            opponent.KnownCards = CardList(new List <string> {
                "Bear Trap", "Bear Trap"
            });
            opponent.KnownCards[0].IsCreated = true;
            var info = GetPredictionInfo(controller);

            Assert.IsFalse(info.PredictedCards[0].Card.IsCreated);
        }
Exemple #21
0
        public void SecondOffMetaCardIncludedInPrediction()
        {
            AddMetaDeck("Hunter", new List <string> {
                "Alleycat"
            });
            var opponent = new MockOpponent("Hunter");

            opponent.KnownCards = CardList(new List <string> {
                "Alleycat"
            }, new List <int> {
                2
            });
            var controller = new PredictionController(opponent, _metaDecks.AsReadOnly());
            var info       = GetPredictionInfo(controller);

            Assert.AreEqual(2, info.PredictedCards[0].Card.Count);
        }
Exemple #22
0
        public void GetPredictedCards_DoesNotIncludeCardsBelowThresholdIfNotPlayableYet()
        {
            AddMetaDeck("Hunter", new List <string> {
                "Alleycat"
            });
            AddMetaDeck("Hunter", new List <string> {
                "Deadly Shot", "Alleycat"
            });
            var opponent = new MockOpponent("Hunter");

            opponent.Mana = 1;
            var predictor = new Predictor(opponent, _metaDecks.AsReadOnly());

            // Deadly Shot only has a 50% chance and can't be played next turn.
            Assert.AreEqual(1, predictor.PredictedCards.Count);
            Assert.AreEqual("Alleycat", predictor.PredictedCards[0].Card.Name);
        }
Exemple #23
0
        public void SortEntriesByManaCost()
        {
            var opponent = new MockOpponent("Hunter");

            AddMetaDeck("Hunter", new List <string> {
                "Alleycat"
            });
            var controller = new PredictionController(opponent, _metaDecks.AsReadOnly());

            opponent.KnownCards = CardList(new List <string> {
                "Bear Trap"
            });
            opponent.KnownCards[0].IsCreated = true;
            var info = GetPredictionInfo(controller);

            Assert.AreEqual("Alleycat", info.PredictedCards[0].Card.Name);
        }
Exemple #24
0
        public void GetPossibleDecks_MatchingCardDoesNotFilter()
        {
            var opponent = new MockOpponent("Hunter");

            AddMetaDeck("Hunter", new List <string> {
                "Deadly Shot"
            });
            AddMetaDeck("Hunter", new List <string> {
                "Deadly Shot", "Alleycat"
            });
            var predictor = new Predictor(opponent, _metaDecks.AsReadOnly());

            var hunterCard = Database.GetCardFromName("Deadly Shot");

            opponent.KnownCards.Add(hunterCard);
            predictor.CheckOpponentCards();
            Assert.AreEqual(2, predictor.PossibleDecks.Count);
        }
Exemple #25
0
        public void GetPredictedCards_SameAsFirstDeckAfterSecondFiltered()
        {
            AddMetaDeck("Hunter", new List <string> {
                "Hunter's Mark", "Alleycat"
            });
            AddMetaDeck("Hunter", new List <string> {
                "Alleycat", "Tracking"
            });

            var opponent  = new MockOpponent("Hunter");
            var predictor = new Predictor(opponent, _metaDecks.AsReadOnly());

            opponent.KnownCards.Add(Database.GetCardFromName("Tracking"));
            predictor.CheckOpponentCards();
            Assert.AreEqual(2, predictor.PredictedCards.Count);
            Assert.IsNotNull(predictor.GetPredictedCard(Key("Alleycat", 1)));
            Assert.IsNotNull(predictor.GetPredictedCard(Key("Tracking", 1)));
        }
Exemple #26
0
        public void GetPredictedCards_LessThanDeckSizeIfAtSameProbabilityAndTooExpensive()
        {
            AddMetaDeck("Hunter", new List <string> {
                "Alleycat"
            });
            AddMetaDeck("Hunter", new List <string> {
                "Deadly Shot", "Alleycat"
            });
            _metaDecks[1].Cards[0].Count = 40;
            var opponent = new MockOpponent("Hunter");

            opponent.Mana = 1;
            var predictor = new Predictor(opponent, _metaDecks.AsReadOnly());

            // All the Deadly Shots are at the same probability and can't yet be played,
            // so don't include any of them.
            Assert.AreEqual(1, predictor.PredictedCards.Count);
        }
Exemple #27
0
        public void GetPredictedCards_DoesNotIncludeCardWithLowProbability()
        {
            for (int n = 0; n < 9; n++)
            {
                AddMetaDeck("Hunter", new List <string> {
                    "Alleycat"
                });
            }
            AddMetaDeck("Hunter", new List <string> {
                "Tracking", "Alleycat"
            });
            var opponent  = new MockOpponent("Hunter");
            var predictor = new Predictor(opponent, _metaDecks.AsReadOnly());

            // Deadly Shot only has a 10% chance and won't be included.
            Assert.AreEqual(1, predictor.PredictedCards.Count);
            Assert.AreEqual("Alleycat", predictor.PredictedCards[0].Card.Name);
        }
Exemple #28
0
        public void GetPredictedCards_IncludeCardIfPlayable()
        {
            AddMetaDeck("Hunter", new List <string> {
                "Alleycat"
            });
            AddMetaDeck("Hunter", new List <string> {
                "Deadly Shot", "Alleycat"
            });
            var opponent  = new MockOpponent("Hunter");
            var predictor = new Predictor(opponent, _metaDecks.AsReadOnly());

            predictor.ProbabilityIncludeIfPlayable = .50m;
            opponent.Mana = 5;
            predictor.CheckOpponentMana();

            // Deadly Shot has a 50% chance and is playable.
            Assert.AreEqual(2, predictor.PredictedCards.Count);
        }
Exemple #29
0
        public void AddsInCardsNotInMetaDecks()
        {
            var opponent = new MockOpponent("Hunter");

            AddMetaDeck("Hunter", new List <string> {
            });
            var controller = new PredictionController(opponent, _metaDecks.AsReadOnly());

            opponent.KnownCards = CardList(new List <string> {
                "Alleycat"
            });
            var info = GetPredictionInfo(controller);

            CollectionAssert.AreEqual(CardList(new List <string> {
                "Alleycat"
            }), CardsFromInfo(info));
            Assert.AreEqual(1, info.PredictedCards[0].NumPlayed);
        }
Exemple #30
0
        public void OnTurnStart_DoesNotUpdateAvailableManaOnOpponentTurn()
        {
            var opponent = new MockOpponent("Hunter");

            opponent.Mana = 1;
            AddMetaDeck("Hunter", new List <string> {
                "Alleycat"
            });
            AddMetaDeck("Hunter", new List <string> {
                "Alleycat", "Bear Trap"
            });
            var controller = new PredictionController(opponent, _metaDecks.AsReadOnly());

            opponent.Mana = 2;
            controller.OnTurnStart(ActivePlayer.Opponent);

            var info = GetPredictionInfo(controller);

            Assert.AreEqual(1, info.PredictedCards.Count);
        }