public void EnqueueDequeue_StableCheck_01() { var person1 = new Person() { Name = "p1", Age = 1 }; var person2 = new Person() { Name = "p1", Age = 2 }; Assert.AreEqual(person1.GetHashCode(), person2.GetHashCode()); Assert.AreNotEqual(person1, person2); var hashq = new HashQueue <Person>(); hashq.Enqueue(person1); hashq.Enqueue(person2); Assert.AreEqual(2, hashq.Count()); Person temp; temp = hashq.Dequeue(); Assert.AreSame(person1, temp); Assert.AreNotSame(person2, temp); Assert.AreEqual(1, hashq.Count()); temp = hashq.Dequeue(); Assert.AreSame(person2, temp); Assert.AreNotSame(person1, temp); Assert.AreEqual(0, hashq.Count()); }
public void IsEmpty01() { var hashq = new HashQueue <int>(); Assert.IsTrue(hashq.IsEmpty()); hashq.Enqueue(1); Assert.IsFalse(hashq.IsEmpty()); hashq.Dequeue(); Assert.IsTrue(hashq.IsEmpty()); Assert.Throws <EmptyException>(() => hashq.Dequeue()); }
public void Dequeue01() { var hashq = new HashQueue <int>(); hashq.Enqueue(1); hashq.Enqueue(1); Assert.AreEqual(2, hashq.Count()); Assert.AreEqual(1, hashq.Dequeue()); Assert.AreEqual(1, hashq.Count()); Assert.AreEqual(1, hashq.Dequeue()); Assert.AreEqual(0, hashq.Count()); }
public void EnqueueDequeue_StableCheck_02() { var hashq = new HashQueue <Person>(); var person1 = new Person() { Name = "p1", Age = 1 }; hashq.Enqueue(person1); hashq.Enqueue(person1); Assert.AreEqual(2, hashq.Count()); Assert.AreSame(person1, hashq.Dequeue()); Assert.AreEqual(1, hashq.Count()); Assert.AreSame(person1, hashq.Dequeue()); Assert.AreEqual(0, hashq.Count()); }
private (int winner, long score) PlayRecursiveCombat_WithHashing(IEnumerable <int> deck1cards, IEnumerable <int> deck2cards) { var deck1 = new HashQueue(deck1cards); var deck2 = new HashQueue(deck2cards); var cache = new HashSet <(long, long)>(); int GetRoundWinner(int card1, int card2) { if (card1 <= deck1.Count && card2 <= deck2.Count) { return(PlayRecursiveCombat_WithHashing(deck1.Take(card1), deck2.Take(card2)).winner); } return(card1 > card2 ? 1 : 2); } while (deck1.Any() && deck2.Any()) { var state = (deck1.Hash, deck2.Hash); if (!cache.Add(state)) { return(1, GetWinnerScore(deck1, deck2)); } var card1 = deck1.Dequeue(); var card2 = deck2.Dequeue(); var winner = GetRoundWinner(card1, card2); var winnerDeck = winner == 1 ? deck1 : deck2; winnerDeck.Enqueue(winner == 1 ? card1 : card2); winnerDeck.Enqueue(winner == 1 ? card2 : card1); } return(winner: deck1.Any() ? 1 : 2, GetWinnerScore(deck1, deck2)); }
public override void _Process(float delta) { //Update visible chunks only when the player has moved a certain distance Vector3 playerPos = player.GetTranslation(); if ((playerPos - playerPosLastUpdate).LengthSquared() > UPDATE_DISTANCE * UPDATE_DISTANCE) { playerPosLastUpdate = playerPos; UpdateVisibleChunks(); } if (chunksToUpdate.Count > 0) { loadedChunks[chunksToUpdate.RemoveFirst()].Item1.UpdateMesh(); } else if (chunksToRemove.Count > 0) { RemoveChunk(chunksToRemove.Dequeue()); } }