Ejemplo n.º 1
0
        public void TestRobot_Handle1Board()
        {
            var r = new TestRobot(Seats.North);

            r.HandleTournamentStarted(Scorings.scPairs, 120, 1, "");
            r.HandleRoundStarted(null, new DirectionDictionary <string>("", ""));
            r.HandleBoardStarted(1, Seats.North, Vulnerable.Neither);
            r.HandleCardPosition(Seats.North, Suits.Clubs, Ranks.Ace);
            r.HandleCardPosition(Seats.North, Suits.Clubs, Ranks.King);
            r.HandleCardPosition(Seats.North, Suits.Clubs, Ranks.Nine);
            r.HandleCardPosition(Seats.North, Suits.Clubs, Ranks.Seven);
            r.HandleCardPosition(Seats.North, Suits.Diamonds, Ranks.King);
            r.HandleCardPosition(Seats.North, Suits.Diamonds, Ranks.Three);
            r.HandleCardPosition(Seats.North, Suits.Hearts, Ranks.Ace);
            r.HandleCardPosition(Seats.North, Suits.Hearts, Ranks.Six);
            r.HandleCardPosition(Seats.North, Suits.Hearts, Ranks.Five);
            r.HandleCardPosition(Seats.North, Suits.Hearts, Ranks.Three);
            r.HandleCardPosition(Seats.North, Suits.Spades, Ranks.Ace);
            r.HandleCardPosition(Seats.North, Suits.Spades, Ranks.Queen);
            r.HandleCardPosition(Seats.North, Suits.Spades, Ranks.Eight);
            r.HandleBidDone(Seats.North, r.FindBid(Bid.C("Pass"), false, false));
            r.HandleBidDone(Seats.East, Bid.C("Pass"));
            r.HandleBidDone(Seats.South, Bid.C("Pass"));
            r.HandleBidDone(Seats.West, Bid.C("Pass"));
            r.HandleAuctionFinished(Seats.North, new Contract("1NT", Seats.North, Vulnerable.Neither));
            r.HandleCardPlayed(Seats.East, Suits.Diamonds, Ranks.Queen);
            r.HandleShowDummy(Seats.South);
            r.HandleCardPlayed(Seats.South, Suits.Diamonds, Ranks.Two);
            r.HandleCardPlayed(Seats.West, Suits.Diamonds, Ranks.Four);
            r.HandleCardNeeded(Seats.North, Seats.North, Suits.Diamonds, Suits.NoTrump, false, 2, 1);
            var card = r.FindCard(Seats.North, Suits.Diamonds, Suits.NoTrump, false, 2, 1);
        }
Ejemplo n.º 2
0
        public void Auction_RecordOk1()
        {
            var target = new Auction(Vulnerable.EW, Seats.East);

            Assert.AreEqual <Vulnerable>(Vulnerable.EW, target.Vulnerability, "Vulnerability");
            Assert.AreEqual <Seats>(Seats.East, target.Dealer, "Dealer");
            Assert.AreEqual <Seats>(Seats.East, target.WhoseTurn, "WhoseTurn");

            target.Record(Bid.C("p"));

            Assert.AreEqual <Seats>(Seats.South, target.WhoseTurn, "WhoseTurn 1");
            Assert.AreEqual <Seats>(Seats.East, target.WhoBid0(0), "WhoBid0 1");
            Assert.AreEqual <Seats>(Seats.East, target.WhoBid(1), "WhoBid 1");

            target.Record(Bid.C("1NT"));

            Assert.AreEqual <Seats>(Seats.West, target.WhoseTurn, "WhoseTurn 2");
            Assert.AreEqual <Seats>(Seats.South, target.WhoBid0(1), "WhoBid0 2");
            Assert.AreEqual <Seats>(Seats.East, target.WhoBid0(0), "WhoBid0 2a");
            Assert.AreEqual <Seats>(Seats.South, target.WhoBid(1), "WhoBid 2");
            Assert.AreEqual <Seats>(Seats.East, target.WhoBid(2), "WhoBid 2a");

            target.Record(Bid.C("x"));
            target.Record(Bid.C("p"));
            target.Record(Bid.C("p"));

            Assert.AreEqual <Seats>(Seats.South, target.WhoseTurn, "WhoseTurn 5");

            target.Record(Bid.C("p"));

            Assert.AreEqual <Seats>(Seats.West, target.WhoseTurn, "WhoseTurn after end of bidding");
            Assert.AreEqual <Seats>(Seats.South, target.Declarer, "Declarer after end of bidding");
        }
Ejemplo n.º 3
0
        public void Tournament_SavePbn()
        {
            var original = TournamentLoad("WC2005final01.pbn");
            var allPass  = new BoardResult("", original.Boards[0], new Participant("test1", "test1", "test1", "test1"));

            allPass.Auction.Record(Bid.C("p"));
            allPass.Auction.Record(Bid.C("p"));
            allPass.Auction.Record(Bid.C("p"));
            allPass.Auction.Record(Bid.C("p"));
            original.Boards[0].Results.Add(allPass);
            var partialPlay = new BoardResult("", original.Boards[0], new Participant("test2", "test2", "test2", "test2"));

            partialPlay.HandleBidDone(Seats.North, Bid.C("1S"));
            partialPlay.HandleBidDone(Seats.East, Bid.C("p"));
            partialPlay.HandleBidDone(Seats.South, Bid.C("p"));
            partialPlay.HandleBidDone(Seats.West, Bid.C("p"));
            partialPlay.HandleCardPlayed(Seats.East, Suits.Hearts, Ranks.King);
            partialPlay.HandleCardPlayed(Seats.South, Suits.Hearts, Ranks.Two);
            partialPlay.HandleCardPlayed(Seats.West, Suits.Hearts, Ranks.Three);
            partialPlay.HandleCardPlayed(Seats.North, Suits.Hearts, Ranks.Ace);
            partialPlay.HandleCardPlayed(Seats.North, Suits.Spades, Ranks.Ace);
            original.Boards[0].Results.Add(partialPlay);
            var partialAuction = new BoardResult("", original.Boards[0], new Participant("test3", "test3", "test3", "test3"));

            partialAuction.Auction.Record(Bid.C("1S"));
            partialAuction.Auction.Record(Bid.C("p"));
            partialAuction.Auction.Record(Bid.C("p"));
            original.Boards[0].Results.Add(partialAuction);
            Pbn2Tournament.Save(original, File.Create("t1.pbn"));
            var copy = TournamentLoad("t1.pbn");

            Assert.AreEqual(original.EventName, copy.EventName, "EventName");
            Assert.AreEqual <DateTime>(original.Created, copy.Created, "Created");
            Assert.AreEqual <int>(original.Boards.Count, copy.Boards.Count, "Boards.Count");
        }
Ejemplo n.º 4
0
        public void BoardResult_SerializeTest()
        {
            Guid user  = Guid.Parse("4C0856A8-BBBF-4F78-8FF9-B7C161F470AC");
            var  board = new Board2();

            board.Vulnerable = Vulnerable.Both;

            var participant = new Participant(new SeatCollection <string>(new string[4] {
                "Robo", "", "NewUser", ""
            }));
            var newResult = new BoardResult("", board, participant);

            newResult.Auction = new Auction(board.Vulnerable, board.Dealer);
            newResult.Auction.Record(Bid.C("3NT"));
            newResult.Auction.Record(Bid.C("p"));
            newResult.Auction.Record(Bid.C("p"));
            newResult.Auction.Record(Bid.C("p"));
            newResult.Play = new PlaySequence(new Contract("3NT", Seats.South, board.Vulnerable), 13);
            newResult.Play.Record(Suits.Clubs, Ranks.Seven);

            var s = new DataContractSerializer(typeof(BoardResult));
            var m = new MemoryStream();

            s.WriteObject(m, newResult);
            m.Seek(0, SeekOrigin.Begin);
            BoardResult r = s.ReadObject(m) as BoardResult;

            Assert.AreEqual <string>(newResult.TeamName, r.TeamName);
        }
Ejemplo n.º 5
0
        public void Auction_FirstToBid1()
        {
            var target = new Auction(Vulnerable.NS, Seats.East);

            target.Record(Bid.C("p"));
            target.Record(Bid.C("1C"));
            target.Record(Bid.C("p"));
            target.Record(Bid.C("1S"));
            target.Record(Bid.C("p"));
            target.Record(Bid.C("1NT"));

            Assert.AreEqual <Seats>(Seats.South, target.FirstToBid(Suits.NoTrump, Directions.NorthSouth));

            target.Record(Bid.C("p"));
            target.Record(Bid.C("2C"));
            target.Record(Bid.C("p"));
            target.Record(Bid.C("2D"));
            target.Record(Bid.C("p"));
            target.Record(Bid.C("4NT"));

            Assert.AreEqual <Seats>(Seats.South, target.FirstToBid(Suits.NoTrump, Directions.NorthSouth));

            target.Record(Bid.C("p"));
            target.Record(Bid.C("5D"));
            target.Record(Bid.C("p"));

            Assert.AreEqual <Seats>(Seats.South, target.FirstToBid(Suits.NoTrump, Directions.NorthSouth));
        }
Ejemplo n.º 6
0
 public override void HandleBidNeeded(Seats whoseTurn, Bid lastRegularBid, bool allowDouble, bool allowRedouble)
 {
     base.HandleBidNeeded(whoseTurn, lastRegularBid, allowDouble, allowRedouble);
     if (whoseTurn == Seats.North)
     {
         this.EventBus.HandleBidDone(Seats.North, Bid.C(lastRegularBid.IsPass ? "1NT" : "Pass"));
     }
 }
Ejemplo n.º 7
0
        public void Auction_RecordFault6()
        {
            var target = new Auction(Vulnerable.EW, Seats.East);

            target.Record(Bid.C("p"));
            target.Record(Bid.C("1NT"));
            target.Record(Bid.C("xx"));
        }
Ejemplo n.º 8
0
        public void Auction_Declarer_4Pass()
        {
            var target = new Auction(Vulnerable.EW, Seats.East);

            target.Record(Bid.C("p"));
            target.Record(Bid.C("p"));
            target.Record(Bid.C("p"));
            target.Record(Bid.C("p"));
            Assert.AreEqual <Seats>(Seats.East, target.Declarer);
        }
Ejemplo n.º 9
0
        public void Auction_Vergelijkbaar()
        {
            var target = new Auction(Vulnerable.EW, Seats.East);

            target.Record(Bid.C("p"));
            target.Record(Bid.C("1NT"));

            Assert.IsTrue(target.Vergelijkbaar("pas* 05"));
            Assert.IsTrue(target.Vergelijkbaar("pas* 00 05"));
            Assert.IsFalse(target.Vergelijkbaar("pas* 00 00 05"));
        }
Ejemplo n.º 10
0
        public void Auction_RecordOk4()
        {
            var target = new Auction(Vulnerable.EW, Seats.East);

            Assert.IsFalse(target.Opened);
            Assert.AreEqual <Vulnerable>(Vulnerable.EW, target.Vulnerability);
            target.Record(Bid.C("p"));
            Assert.IsFalse(target.Opened);
            target.Record(Bid.C("1NT"));
            Assert.IsTrue(target.Opened);
            Assert.AreEqual <Seats>(Seats.South, target.Opener);
            Assert.AreEqual <Bid>(Bid.C("1NT"), target.OpeningBid);
            target.Record(Bid.C("p"));
            target.Record(Bid.C("p"));
            target.Record(Bid.C("x"));
            target.Record(Bid.C("xx"));
            target.Record(Bid.C("2C"));
            target.Record(Bid.C("x"));

            Assert.AreEqual <Seats>(Seats.South, target.Opener);
            Assert.AreEqual <Seats>(Seats.North, target.WhoBid(1));
            Assert.AreEqual <Seats>(Seats.West, target.WhoBid(2));
            Assert.AreEqual <Seats>(Seats.West, target.FirstBid(Suits.Clubs));
            Assert.AreEqual <Seats>(Seats.West, target.FirstToBid(Suits.Clubs, Directions.EastWest));
            Assert.AreEqual <Seats>(Seats.South, target.FirstToBid(Suits.NoTrump, Directions.NorthSouth));
            Assert.AreEqual <Seats>(Seats.South, target.FirstNotToPass);
            Assert.IsTrue(target.HasBid(Suits.Clubs, 2));
            Assert.IsFalse(target.HasBid(Suits.Diamonds, 2));
            Assert.IsFalse(target.HasBid(Suits.Clubs, 3));
            Assert.IsFalse(target.Vergelijkbaar("pas* 03"));
            Assert.IsTrue(target.Vergelijkbaar("pas* 05 pas0 36 37 2X ??"));
            Assert.IsFalse(target.Vergelijkbaar("pas* 05 pas1"));
            Assert.IsFalse(target.Vergelijkbaar("pas* 05 pas2 36 pass0or1"));
            Assert.IsTrue(target.Vergelijkbaar("pas* 05 pas2 **"));
            Assert.IsTrue(target.Vergelijkbaar("pas* 05 pas2 NP **"));
            Assert.IsFalse(target.Vergelijkbaar("pas* 05 pas0 36 37 2W 3W"));
            Assert.IsFalse(target.Vergelijkbaar("pas* 05 pas0 36 37 2Y 3Y"));
            Assert.IsFalse(target.Vergelijkbaar("pas* 05 pas0 36 37 2Z 3Z"));
            Assert.IsFalse(target.Vergelijkbaar("pas* 05 pas0 36 37 2M 36"));
            Assert.IsTrue(target.Vergelijkbaar("pas* 05 pas0 36 37 2N 36"));
            Assert.IsFalse(target.StartedWith("pas* 03"));
            Assert.IsTrue(target.StartedWith("pas* 05"));
            Assert.AreEqual <int>(7, target.WanneerGeboden("1NT"));
            Assert.AreEqual <int>(7, target.WanneerGeboden(1, Suits.NoTrump));
            Assert.AreEqual <Suits>(Suits.NoTrump, target.VierdeKleur);
            Assert.IsFalse(target.WordtVierdeKleur(Suits.Hearts));
//            Assert.AreEqual(@"West  North East  South
//-     -     Pass  1NT
//Pass  Pass  x     xx
//2C    x     ", target.ToString());
        }
Ejemplo n.º 11
0
        public void Bid_CompareTest()
        {
            Bid b1 = new Bid(0, Suits.Diamonds);
            Bid b2 = Bid.C("Pass");

            Assert.IsTrue(b1 < b2);
            Assert.IsFalse(Bid.C("Pass") < "Pass");
            Assert.IsTrue(Bid.C("Pass") <= "Pass");
            Assert.IsFalse(Bid.C("Pass") > "Pass");
            Assert.IsTrue(Bid.C("Pass") >= "Pass");
            Assert.IsTrue(Bid.C("Pass") == Bid.C("Pass"));
            Assert.IsFalse(Bid.C("1C") < Bid.C("1C"));
            Assert.IsTrue(Bid.C("1C") < Bid.C("1D"));
            Assert.IsTrue(Bid.C("Pass") < Bid.C("1C"));
        }
Ejemplo n.º 12
0
        public void Bid_ToString()
        {
            Bid b2;

            b2 = Bid.C("p");
            Assert.AreEqual("Pass", b2.ToString());
            b2 = Bid.C("x");
            Assert.AreEqual("x", b2.ToString());
            b2 = Bid.C("xx");
            Assert.AreEqual("xx", b2.ToString());
            b2 = Bid.C("1C");
            Assert.AreEqual("1C", b2.ToString());
            b2 = Bid.C("1D");
            Assert.AreEqual("1D", b2.ToString());
            b2 = Bid.C("1H");
            Assert.AreEqual("1H", b2.ToString());
            b2 = Bid.C("1S");
            Assert.AreEqual("1S", b2.ToString());
            b2 = Bid.C("1NT");
            Assert.AreEqual("1NT", b2.ToString());
        }
Ejemplo n.º 13
0
        public void Bid_ToXml_BackwardCompatible()
        {
            Bid b2;

            b2 = Bid.C("p");
            Assert.AreEqual("Pass", b2.ToXML());
            b2 = Bid.C("x");
            Assert.AreEqual("X", b2.ToXML());
            b2 = Bid.C("xx");
            Assert.AreEqual("XX", b2.ToXML());
            b2 = Bid.C("1C");
            Assert.AreEqual("1C", b2.ToXML());
            b2 = Bid.C("1D");
            Assert.AreEqual("1D", b2.ToXML());
            b2 = Bid.C("1H");
            Assert.AreEqual("1H", b2.ToXML());
            b2 = Bid.C("1S!S5");
            Assert.AreEqual("1S!", b2.ToXML());
            Assert.AreEqual("S5", b2.Explanation);
            b2 = Bid.C("1NT;;");
            Assert.AreEqual("1NT", b2.ToXML());
        }
Ejemplo n.º 14
0
        public void Bid_ToSymbol()
        {
            System.Threading.Thread.CurrentThread.CurrentCulture   = new System.Globalization.CultureInfo("en-US");
            System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en-US");
            Bid b2;

            b2 = Bid.C("p");
            Assert.AreEqual("Pass", b2.ToSymbol());
            b2 = Bid.C("x");
            Assert.AreEqual("x", b2.ToSymbol());
            b2 = Bid.C("xx");
            Assert.AreEqual("xx", b2.ToSymbol());
            b2 = Bid.C("1C");
            Assert.AreEqual("1♣", b2.ToSymbol());
            b2 = Bid.C("1D");
            Assert.AreEqual("1♦", b2.ToSymbol());
            b2 = Bid.C("1H");
            Assert.AreEqual("1♥", b2.ToSymbol());
            b2 = Bid.C("1S");
            Assert.AreEqual("1♠", b2.ToSymbol());
            b2 = Bid.C("1NT");
            Assert.AreEqual("1NT", b2.ToSymbol());
        }
Ejemplo n.º 15
0
 public override Bid FindBid(Bid lastRegularBid, bool allowDouble, bool allowRedouble)
 {
     /// this is just some basic logic to enable testing
     /// override this method and implement your own logic
     ///
     if (lastRegularBid.IsPass)
     {
         return(Bid.C("1C"));
     }
     if (lastRegularBid.Equals(1, Suits.Clubs))
     {
         return(Bid.C("1S"));
     }
     if (lastRegularBid.Equals(1, Suits.Spades) && allowDouble)
     {
         return(Bid.C("x"));
     }
     if (lastRegularBid.Equals(1, Suits.Spades) && !allowDouble)
     {
         return(Bid.C("2C"));
     }
     return(Bid.C("Pass"));
 }
            public void Verify(int state, string message)
            {
                //Log.Trace(1, "Host sends {1} {0}", message, seat);
                switch (state)
                {
                case 1:
                    if (message.Contains("seated"))
                    {
                        this.ProcessIncomingMessage("{0} ready for teams", this.seat);
                        return;
                    }
                    else if (message == "Illegal hand specified")
                    {
                        return;
                    }
                    break;

                case 2:
                    if (message == "Expected team name 'NorthSouth'")
                    {
                        return;
                    }
                    break;

                case 4:
                    if (message == "Seat already has been taken")
                    {
                        return;
                    }
                    break;

                case 3:
                    if (message.Contains("Teams : N/S : \""))
                    {
                        this.ProcessIncomingMessage("{0} ready to start", this.seat);
                        return;
                    }

                    if (message.Contains("Start of board"))
                    {
                        this.ProcessIncomingMessage("{0} ready for deal", this.seat);
                        return;
                    }

                    if (message.Contains("Board number "))
                    {
                        this.ProcessIncomingMessage("{0} ready for cards", this.seat);
                        return;
                    }

                    if (message.Contains("'s cards : "))
                    {
                        var whoseTurn = Seats.North;
                        if (this.seat == whoseTurn)
                        {
                            this.ProcessIncomingMessage("North bids 1H");
                            this.ProcessIncomingMessage("{0} ready for {1}'s bid", this.seat, whoseTurn.Next().ToString().PadLeft(5).ToUpper());
                        }
                        else
                        {
                            this.ProcessIncomingMessage("{0} ready for {1}'s bid", this.seat, whoseTurn);
                        }

                        this.passCount = 0;
                        return;
                    }

                    if (message.Contains("Explain "))
                    {
                        this.ProcessIncomingMessage("C5*D5");
                        return;
                    }

                    if (message.Contains(" bids ") || message.Contains(" passes"))
                    {
                        var parts = message.Split(' ');
                        if (parts[1] == "passes")
                        {
                            this.passCount++;
                        }
                        else
                        {
                            this.passCount = 0;
                        }
                        if (passCount == 3)
                        {
                            (this.host as TestHost).Abort();
                        }
                        else
                        {
                            var whoseBid  = SeatsExtensions.FromXML(parts[0].Substring(0, 1));
                            var whoseTurn = whoseBid.Next();
                            if (this.seat == whoseTurn)
                            {
                                Bid newBid;
                                if (message.Contains(" bids 1H"))
                                {
                                    newBid = Bid.C("2NT");
                                }
                                else
                                {
                                    newBid = Bid.C("p");
                                    this.passCount++;
                                }

                                this.ProcessIncomingMessage("{0} bids {1}", this.seat, newBid.ToXML());
                                if (this.passCount < 3)
                                {
                                    this.ProcessIncomingMessage("{0} ready for {1}'s bid", this.seat, whoseTurn.Next());
                                }
                            }
                            else
                            {
                                this.ProcessIncomingMessage("{0} ready for {1}'s bid", this.seat, whoseTurn);
                            }
                        }

                        return;
                    }

                    if (message.Contains(" to lead"))
                    {
                        return;
                    }

                    break;

                default:
                    break;
                }

                (this.host as TestHost).Abort();
                Assert.Fail();
            }
Ejemplo n.º 17
0
        public void Board_SerializeTest()
        {
            Board2 board     = new Board2(@"South, All
         S T87432
         H 53
         D 72
         C KT6
S QJ965           S AK
H JT96            H AQ8
D 9               D KJ865
C 973             C AQ4
         S 
         H K742
         D AQT43
         C J852
");
            var    newResult = new BoardResult("owner1", board, new Participant("N", "E", "S", "W"));

            newResult.Auction = new Auction(newResult);
            newResult.Auction.Record(Bid.C("3NT"));
            newResult.Auction.Record(Bid.C("p"));
            newResult.Auction.Record(Bid.C("p"));
            newResult.Auction.Record(Bid.C("p"));
            newResult.Play = new PlaySequence(newResult.Contract, 13);
            newResult.Play.Record(Suits.Clubs, Ranks.Seven);
            newResult.Play.Record(Suits.Clubs, Ranks.Eight);
            newResult.Play.Record(Suits.Clubs, Ranks.Queen);
            newResult.Play.Record(Suits.Clubs, Ranks.Ace);
            newResult.Play.Record(Suits.Diamonds, Ranks.Ace);
            newResult.Play.Record(Suits.Diamonds, Ranks.Seven);
            newResult.Play.Record(Suits.Diamonds, Ranks.Two);
            newResult.Play.Record(Suits.Diamonds, Ranks.Four);
            newResult.Play.Record(Suits.Diamonds, Ranks.King);
            newResult.Play.Record(Suits.Diamonds, Ranks.Queen);
            newResult.Play.Record(Suits.Diamonds, Ranks.Three);
            newResult.Play.Record(Suits.Diamonds, Ranks.Five);
            board.Results.Add(newResult);

            var newResult2 = new BoardResult("owner2", board, new Participant("N2", "E2", "S2", "W2"));

            board.Results.Add(newResult2);

            var    serializer      = new DataContractSerializer(board.GetType());
            string serializedBoard = "";

            using (var sw = new StringWriter())
            {
                using (var xw = new XmlTextWriter(sw))
                {
                    serializer.WriteObject(xw, board);
                }
                serializedBoard = sw.ToString();
            }

            Debug.WriteLine(serializedBoard);
            Assert.IsNotNull(serializedBoard);

            Board2 copy = null;

            using (var sr = new StringReader(serializedBoard))
            {
                using (var xr = new XmlTextReader(sr))
                {
                    copy = (Board2)serializer.ReadObject(xr);
                }
            }

            Assert.AreEqual <Board2>(board, copy, "board");

            var    serializer2      = new DataContractSerializer(newResult.GetType());
            string serializedResult = "";

            using (var sw = new StringWriter())
            {
                using (var xw = new XmlTextWriter(sw))
                {
                    serializer2.WriteObject(xw, newResult);
                }
                serializedResult = sw.ToString();
            }

            BoardResult resultCopy = null;

            using (var sr = new StringReader(serializedResult))
            {
                using (var xr = new XmlTextReader(sr))
                {
                    resultCopy = (BoardResult)serializer2.ReadObject(xr);
                }
            }

            resultCopy.Board = board;
            Assert.AreEqual <BoardResult>(newResult, resultCopy);
        }