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); }
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"); }
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"); }
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); }
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)); }
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")); } }
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")); }
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); }
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")); }
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()); }
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")); }
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()); }
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()); }
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()); }
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(); }
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); }