コード例 #1
0
        public void FindRoomsByCriteriaTest_level()
        {
            //Arrange

            NoLimitHoldem config = new NoLimitHoldem();
            int           level  = 4;
            Player        creator;
            var           expRoom = gameCenter.CreateNewRoom(level, config, out creator);
            Exception     expE    = null;

            expRoom.Preferences.Name = "test room";


            TestContext.WriteLine("min level {0} max level {1}", gameCenter.Leagues.Single().MinLevel, gameCenter.Leagues.Single().MaxLevel);

            //Act
            var actRoom = gameCenter.FindRoomsByCriteria(45);

            try
            {
                gameCenter.FindRoomsByCriteria(0);

                Assert.Fail("exception missing");
            }
            catch (CrossUtility.Exceptions.RoomNotFoundException e)
            {
                expE = e;
            }

            //Assert
            Assert.IsNotNull(expE);
            TestContext.WriteLine("exception message: {0}", expE.Message);
            Assert.AreEqual(1, actRoom.Count);
            Assert.AreEqual(expRoom, actRoom.Single());
        }
コード例 #2
0
        public void RoomTest2() // (:Player)
        {
            //Arrange
            var player    = new Player();
            var expPlayer = player;
            var expConfig = new NoLimitHoldem();

            //Act
            var actual = new Room(player);

            //Assert
            Assert.AreEqual(1, actual.Players.Count, "one player in new room");
            Assert.AreEqual(expPlayer, actual.Players.First(), "the creator is first");
            Assert.AreEqual(Player.State.Passive, player.CurrentState, "the creator is passive");
            Assert.AreEqual(1, actual.PassivePlayers.Count, "one passive player");
            Assert.AreEqual(0, actual.ActivePlayers.Count, "zero active players");
            Assert.IsTrue(actual.PassivePlayers.Contains(expPlayer), "the creator found in passive players collection at room");
            Assert.AreEqual(null, actual.CurrentHand, "current hand null");
            Assert.AreEqual(false, actual.IsTableFull, "table not full");

            // 8 Configurations of game-config
            Assert.AreEqual(expConfig.BuyInCost, actual.Preferences.BuyInCost, "default buy in");
            Assert.AreEqual(true, actual.Preferences.IsSpactatorsAllowed, "default spectators allowed");
            Assert.AreEqual(expConfig.MaxNumberOfPlayers, actual.Preferences.MaxNumberOfPlayers, "default max players number");
            Assert.AreEqual(expConfig.MinimumBet, actual.Preferences.MinimumBet, "minimum bet default");
            Assert.AreEqual(expConfig.MinNumberOfPlayers, actual.Preferences.MinNumberOfPlayers, "min players default");
            Assert.AreEqual(expConfig.Name, actual.Preferences.Name, "default name");
            // TODO: idan - add assert for default game preferences.
        }
コード例 #3
0
        public void CreateNewRoomTest()
        {
            //Arrange
            var expPlayer = new Player()
            {
                Nickname = "test player"
            };
            var expRoom = new Room(expPlayer);

            NoLimitHoldem inConfig = new NoLimitHoldem();
            int           inLevel  = 3;

            //Act
            Player actCreator;
            var    actual = gameCenter.CreateNewRoom(inLevel, inConfig, out actCreator);

            actCreator.Nickname = "test player";

            //Assert
            Assert.AreEqual(expPlayer, actCreator, "eq creators");
            Assert.AreEqual(1, gameCenter.Rooms.Count, "rooms count");
            Assert.AreEqual(1, gameCenter.Players.Count, "players count");
            Assert.AreEqual(1, gameCenter.Leagues.Count, "leagues count");
            Assert.AreEqual(actual, gameCenter.Rooms.First(), "room is registered");
            Assert.AreEqual(expPlayer, gameCenter.Players.First(), "player is registered");
            Assert.IsTrue(gameCenter.Leagues.First().Rooms.Contains(actual), "league is registered and contain room");
        }
コード例 #4
0
        public void FindRoomsByCriteriaTest_multiple_rooms()
        {
            //Arrange
            NoLimitHoldem config = new NoLimitHoldem();
            int           level = 4;
            Player        creator, creator2;
            var           expRoom  = gameCenter.CreateNewRoom(level, config, out creator).Preferences.Name = "test room 1";
            var           expRoom2 = gameCenter.CreateNewRoom(level, config, out creator2).Preferences.Name = "test room 2";

            //Act
            var actual = gameCenter.FindRoomsByCriteria(25);

            //Assert
            Assert.AreEqual(2, actual.Count);
        }
コード例 #5
0
        public FindRoomsByCriteriaResult FindRoomsByCriteria(FindRoomsByCriteriaRequest request)
        {
            var result = new FindRoomsByCriteriaResult();

            try
            {
                // arrange search criteria
                double betSize = request.Criterias.Contains(FindRoomsByCriteriaRequest.BET_SIZE) ? request.BetSize : -1;

                GamePreferences preferences =
                    new NoLimitHoldem()
                {
                    MaxNumberOfPlayers = request.Criterias.Contains(FindRoomsByCriteriaRequest.MAX_NUMBER_OF_PLAYERS) ? request.MaxNumberOfPlayers : -1,
                    AntesValue         = request.Criterias.Contains(FindRoomsByCriteriaRequest.ANTES_VALUE) ? request.Antes : -1,
                    BuyInCost          = request.Criterias.Contains(FindRoomsByCriteriaRequest.BUY_IN_COST) ? request.BuyInCost : -1,
                    Name               = request.Criterias.Contains(FindRoomsByCriteriaRequest.NAME) ? request.Name : "",
                    MinimumBet         = request.Criterias.Contains(FindRoomsByCriteriaRequest.MIN_BET) ? request.MinimumBet : -1,
                    MinNumberOfPlayers = request.Criterias.Contains(FindRoomsByCriteriaRequest.MIN_NUMBER_OF_PLAYERS) ? request.MinNumberOfPlayers : -1,
                };

                Player player = null;
                if (request.Criterias.Contains(FindRoomsByCriteriaRequest.PLAYER))
                {
                    player = _cache.RefreshAndGet(
                        Players,
                        request.Player,
                        new PlayerNotFoundException(string.Format("player id: {0} not found, please re-enter the room.", request.Player))
                        );
                }

                int level = request.Criterias.Contains(FindRoomsByCriteriaRequest.LEVEL) ? request.Level : -1;

                // call search
                var domainRooms = GameCenter.FindRoomsByCriteria(level, player, preferences, betSize);

                // assemble result
                result.Rooms   = DomainRoomsToRoomsResults(domainRooms);
                result.Success = true;
            }
            catch (PokerException e)
            {
                result.Success      = false;
                result.ErrorMessage = e.Message;
                Logger.Error(e, this);
            }

            return(result);
        }
コード例 #6
0
 public void Before()
 {
     _level       = 20;
     _userManager = UserManager.Instance;
     _gameCenter  = GameCenter.Instance;
     _user        = new User();
     _userManager.Users.Add(_user.UserName, _user);
     _securityKey = 1;
     _user.Connect(_securityKey);
     _ctrl = new RoomController()
     {
         Request       = new System.Net.Http.HttpRequestMessage(),
         Configuration = new System.Web.Http.HttpConfiguration()
     };
     _config = new NoLimitHoldem();
 }
コード例 #7
0
        public void FindRoomsByCriteriaTest_perf_success()
        {
            //Arrange
            var pref = new NoLimitHoldem()
            {
                Name = "test room",
            };

            Player expPlayer;
            var    expRoom = gameCenter.CreateNewRoom(6, pref, out expPlayer);

            //Act
            var actual = gameCenter.FindRoomsByCriteria(-1, null, pref);

            //Assert
            Assert.AreEqual(1, actual.Count);
            Assert.AreEqual(expRoom, actual.Single());
        }
コード例 #8
0
        public void PlayMoveTest()
        {
            //Arrange
            var player1 = new Player()
            {
                Nickname = "test player 1", Lock = this
            };
            var player2 = new Player()
            {
                Nickname = "test player 2", Lock = this
            };
            var player3 = new Player()
            {
                Nickname = "test player 3", Lock = this
            };

            player1.AddMoney(500);
            player2.AddMoney(350);
            player3.AddMoney(600);
            var activeUnfoldedPlayers = new List <Player>();

            activeUnfoldedPlayers.Add(player1);
            activeUnfoldedPlayers.Add(player2);
            activeUnfoldedPlayers.Add(player3);
            var       pot                = new Pot(null);
            var       gameConfig         = new NoLimitHoldem();
            var       round              = new Round(player2, activeUnfoldedPlayers, pot, true, gameConfig);
            Exception expectedException1 = new Exception();
            Exception expectedException2 = new Exception();

            //Act
            round.PlayMove(Round.Move.Check, 0);
            var res0 = round.CurrentPlayer == player1 && round.LiveBets[player3] == 0 &&
                       pot.AmountToClaim == 0 && pot.Value == 0 && round.LastRaise == 0 && round.TotalRaise == 0;

            round.PlayMove(Round.Move.Bet, 50);
            var res1 = round.CurrentPlayer == player2 && pot.PlayersClaimPot.Contains(player1) && round.LiveBets[player1] == 50 &&
                       pot.AmountToClaim == 50 && pot.Value == 50 && round.LastRaise == 50 && round.TotalRaise == 50;

            round.PlayMove(Round.Move.Call, 0);
            var res2 = round.CurrentPlayer == player3 && pot.PlayersClaimPot.Contains(player2) && round.LiveBets[player2] == 50 &&
                       pot.AmountToClaim == 50 && pot.Value == 100 && round.LastRaise == 50 && round.TotalRaise == 50;

            try
            {
                round.PlayMove(Round.Move.Raise, 20);
            }
            catch (GameRulesException e)
            {
                expectedException1 = e;
            }

            round.PlayMove(Round.Move.Raise, 70);
            var res3 = round.CurrentPlayer == player1 && pot.PlayersClaimPot.Contains(player3) && round.LiveBets[player3] == 120 &&
                       pot.AmountToClaim == 120 && pot.Value == 220 && round.LastRaise == 70 && round.TotalRaise == 120;

            round.PlayMove(Round.Move.Allin, 0);
            var res4 = round.CurrentPlayer == player2 && pot.PlayersClaimPot.Contains(player1) && round.LiveBets[player1] == 500 &&
                       pot.AmountToClaim == 500 && pot.Value == 670 && round.LastRaise == 380 && round.TotalRaise == 500 &&
                       pot.PartialPot != null && pot.PartialPot.AmountToClaim == 0 && pot.PartialPot.Value == 0;

            round.PlayMove(Round.Move.Allin, 0);
            var res5 = round.CurrentPlayer == player3 && round.CurrentPot.PlayersClaimPot.Contains(player1) && round.CurrentPot.PlayersClaimPot.Contains(player2) &&
                       !round.CurrentPot.PartialPot.PlayersClaimPot.Contains(player2) && round.CurrentPot.PartialPot.PlayersClaimPot.Contains(player1) &&
                       round.LiveBets[player2] == 350 && round.CurrentPot.AmountToClaim == 350 && round.CurrentPot.Value == 820 &&
                       round.CurrentPot.PartialPot.Value == 150 && round.CurrentPot.PartialPot.AmountToClaim == 150;

            try
            {
                round.PlayMove(Round.Move.Allin, 0);
            }
            catch (GameRulesException e)
            {
                expectedException2 = e;
            }

            round.PlayMove(Round.Move.Fold, 0);
            var res6 = round.CurrentPlayer == player1 && !round.CurrentPot.PlayersClaimPot.Contains(player3) && !round.CurrentPot.PartialPot.PlayersClaimPot.Contains(player3) &&
                       round.LiveBets[player3] == 120 && round.CurrentPot.AmountToClaim == 350 && round.CurrentPot.Value == 820 &&
                       round.CurrentPot.PartialPot.Value == 150 && round.CurrentPot.PartialPot.AmountToClaim == 150;


            //Assert
            Assert.IsTrue(res0);
            Assert.IsTrue(res1);
            Assert.IsTrue(res2);
            Assert.AreEqual(expectedException1.Message, "Can't raise less than last raise");
            Assert.IsTrue(res3);
            Assert.IsTrue(res4);
            Assert.IsTrue(res5);
            Assert.AreEqual(expectedException2.Message, "all-in is bigger than the highest other player's all-in... use bet\raise move");
            Assert.IsTrue(res6);
        }
コード例 #9
0
        public void RoomTest3() // (:Player, :GameConfig)
        {
            //Arrange
            #region Arrange
            var             expPlayer          = new Player();
            const string    expName            = "test room 3";
            const bool      expIsSpecAllowed   = false;
            GamePreferences expGamePreferences = new NoLimitHoldem();
            const int       expMinPlayers      = 3;

            // changed parameters
            const double insertBuyinCost        = 50.2;
            const int    insertMaxNumberPlayers = 9;
            const double insertMinBet           = 8.6;

            // expected results by the parameters
            double expBuyinCost        = Math.Max(insertBuyinCost, insertMinBet);
            double expMinBet           = Math.Min(insertMinBet, insertBuyinCost);
            int    expMaxNumberPlayers = insertMaxNumberPlayers;


            var expConfig = new NoLimitHoldem()
            {
                BuyInCost           = insertBuyinCost,
                IsSpactatorsAllowed = expIsSpecAllowed,
                MaxNumberOfPlayers  = insertMaxNumberPlayers,
                MinimumBet          = insertMinBet,
                MinNumberOfPlayers  = expMinPlayers,
                Name = expName,
            };
            #endregion

            //Act
            var actual = new Room(expPlayer, expConfig);

            //Assert
            #region Default asserts
            Assert.AreEqual(1, actual.Players.Count, "one player in new room");
            Assert.AreEqual(expPlayer, actual.Players.First(), "the creator is first");
            Assert.AreEqual(Player.State.Passive, expPlayer.CurrentState, "the creator is passive");
            Assert.AreEqual(1, actual.PassivePlayers.Count, "one passive player");
            Assert.AreEqual(0, actual.ActivePlayers.Count, "zero active players");
            Assert.IsTrue(actual.PassivePlayers.Contains(expPlayer), "the creator found in passive players collection at room");
            Assert.AreEqual(null, actual.CurrentHand, "current hand null");
            Assert.AreEqual(false, actual.IsTableFull, "table not full");
            #endregion

            // 8 Configurations of game-config
            Assert.AreEqual <double>(expBuyinCost, actual.Preferences.BuyInCost, "exp buy in");
            Assert.AreEqual(expIsSpecAllowed, actual.Preferences.IsSpactatorsAllowed, "exp spectators not allowed");

            Assert.AreEqual(expMaxNumberPlayers, actual.Preferences.MaxNumberOfPlayers, "max players number");

            Assert.AreEqual(expMinBet, actual.Preferences.MinimumBet, "minimum bet default");
            Assert.AreEqual(expMinPlayers, actual.Preferences.MinNumberOfPlayers, "min players default");
            Assert.IsFalse(actual.Preferences.MinimumBet > actual.Preferences.BuyInCost, "minBet <= buyIn");

            Assert.IsNotNull(actual.Preferences.Name, "name not null");
            Assert.AreEqual(expName, actual.Preferences.Name, "default name");
            // TODO: idan - add assert for default game preferences.
        }
コード例 #10
0
        public CreateNewRoomResult CreateNewRoom(CreateNewRoomRequest request)
        {
            var result = new CreateNewRoomResult();

            try
            {
                var user = _cache.RefreshAndGet(
                    Users,
                    request.UserName,
                    new UserNotFoundException("User was not found, can't create room")
                    );
                UserManager.SecurityCheck(request.SecurityKey, user);

                Player        creator            = null;
                Room          room               = null;
                NoLimitHoldem noLimitPreferences = new NoLimitHoldem(request.Name, request.BuyInCost, request.MinimumBet, request.Antes,
                                                                     request.MinNumberOfPlayers, request.MaxNumberOfPlayers, request.IsSpactatorsAllowed);
                if (request.Limit == 0)
                {
                    room = user.CreateNewRoom(request.Level, noLimitPreferences, out creator);
                }
                else if (request.Limit == -1)
                {
                    PotLimitHoldem potPreferences = new PotLimitHoldem(noLimitPreferences);
                    room = user.CreateNewRoom(request.Level, potPreferences, out creator);
                }
                else if (request.Limit > 0)
                {
                    LimitHoldem limitPreferences = new LimitHoldem(noLimitPreferences, request.Limit);
                    room = user.CreateNewRoom(request.Level, limitPreferences, out creator);
                }

                if (creator == null || room == null)
                {
                    throw new WrongIOException("Limit field in the request is not valid");
                }
                Rooms.Add(room.GetHashCode(), room);
                Players.Add(creator.GetHashCode(), creator);
                result.Player = creator.GetHashCode();
                result.Room   = room.GetHashCode();

                //Request's info
                result.Name                = request.Name;
                result.BuyInCost           = request.BuyInCost;
                result.MinimumBet          = request.MinimumBet;
                result.Antes               = request.Antes;
                result.MinNumberOfPlayers  = request.MinNumberOfPlayers;
                result.MaxNumberOfPlayers  = request.MaxNumberOfPlayers;
                result.IsSpactatorsAllowed = request.IsSpactatorsAllowed;
                result.Limit               = request.Limit;

                result.Success = true;
            }
            catch (PokerException e)
            {
                result.Success      = false;
                result.ErrorMessage = e.Message;
                Logger.Error(e, this);
            }

            return(result);
        }