public void TestPeek() {
      PairPriorityQueue<float, string> testQueue = new PairPriorityQueue<float, string>();

      testQueue.Enqueue(1.0f, "a");
      testQueue.Enqueue(2.0f, "b");
      testQueue.Enqueue(0.0f, "c");

      Assert.AreEqual("b", testQueue.Peek().Item);
    }
    public void TestCount() {
      PairPriorityQueue<float, string> testQueue = new PairPriorityQueue<float, string>();

      Assert.AreEqual(0, testQueue.Count);
      testQueue.Enqueue(12.34f, "a");
      Assert.AreEqual(1, testQueue.Count);
      testQueue.Enqueue(56.78f, "b");
      Assert.AreEqual(2, testQueue.Count);
      testQueue.Dequeue();
      Assert.AreEqual(1, testQueue.Count);
      testQueue.Enqueue(9.0f, "c");
      Assert.AreEqual(2, testQueue.Count);
      testQueue.Clear();
      Assert.AreEqual(0, testQueue.Count);
    }
    public void TestOrdering() {
      PairPriorityQueue<float, string> testQueue = new PairPriorityQueue<float, string>();

      testQueue.Enqueue(1.0f, "a");
      testQueue.Enqueue(9.0f, "i");
      testQueue.Enqueue(2.0f, "b");
      testQueue.Enqueue(8.0f, "h");
      testQueue.Enqueue(3.0f, "c");
      testQueue.Enqueue(7.0f, "g");
      testQueue.Enqueue(4.0f, "d");
      testQueue.Enqueue(6.0f, "f");
      testQueue.Enqueue(5.0f, "e");

      Assert.AreEqual("i", testQueue.Dequeue().Item);
      Assert.AreEqual("h", testQueue.Dequeue().Item);
      Assert.AreEqual("g", testQueue.Dequeue().Item);
      Assert.AreEqual("f", testQueue.Dequeue().Item);
      Assert.AreEqual("e", testQueue.Dequeue().Item);
      Assert.AreEqual("d", testQueue.Dequeue().Item);
      Assert.AreEqual("c", testQueue.Dequeue().Item);
      Assert.AreEqual("b", testQueue.Dequeue().Item);
      Assert.AreEqual("a", testQueue.Dequeue().Item);
    }
    public void TestCopyTo() {
      PairPriorityQueue<float, string> testQueue = new PairPriorityQueue<float, string>();

      testQueue.Enqueue(1.0f, "a");
      testQueue.Enqueue(9.0f, "i");
      testQueue.Enqueue(2.0f, "b");
      testQueue.Enqueue(8.0f, "h");
      testQueue.Enqueue(3.0f, "c");
      testQueue.Enqueue(7.0f, "g");
      testQueue.Enqueue(4.0f, "d");
      testQueue.Enqueue(6.0f, "f");
      testQueue.Enqueue(5.0f, "e");

      PriorityItemPair<float, string>[] itemArray = new PriorityItemPair<float, string>[9];
      testQueue.CopyTo(itemArray, 0);

      CollectionAssert.AreEquivalent(testQueue, itemArray);
    }
    public void TestEnumerator() {
      PairPriorityQueue<float, string> testQueue = new PairPriorityQueue<float, string>();

      testQueue.Enqueue(1.0f, "a");
      testQueue.Enqueue(2.0f, "b");
      testQueue.Enqueue(0.0f, "c");

      List<PriorityItemPair<float, string>> testList =
        new List<PriorityItemPair<float,string>>();

      foreach(PriorityItemPair<float, string> entry in testQueue) {
        testList.Add(entry);
      }    

      CollectionAssert.AreEquivalent(testQueue, testList);
    }
    public void TestSyncRoot() {
      PairPriorityQueue<int, int> testQueue = new PairPriorityQueue<int, int>();

      // If IsSynchronized returns true, SyncRoot is allowed to be null
      if(!testQueue.IsSynchronized) {
        lock(testQueue.SyncRoot) {
          testQueue.Clear();
        }
      }
    }