void InsertAllAndDeleteAll(ArrayPQBase <string> pq, string[] expected)
        {
            // default ctor, insert a bunch of values, then delete all
            Assert.True(pq.IsEmpty);
            var actual = Strings(pq).ToList();

            Assert.Equal(expected, actual);
        }
        void TestArrayMaxPQ(ArrayPQBase <string> pq, ArrayMaxPQProducer f, bool IsConsumer = true)
        {
            var maxes = f(pq).ToArray();

            if (IsConsumer)
            {
                Assert.True(pq.IsEmpty);
            }
            Assert.Equal(new string[] { "this", "test", "is", "a" }, maxes);
        }
 IEnumerable <string> ProduceArray(ArrayPQBase <string> pq)
 {
     pq.Insert("this");
     pq.Insert("is");
     pq.Insert("a");
     pq.Insert("test");
     while (!pq.IsEmpty)
     {
         yield return(pq.Delete());
     }
 }
 IEnumerable <string> EnumerateArrayMax(ArrayPQBase <string> pq)
 {
     pq.Insert("this");
     pq.Insert("is");
     pq.Insert("a");
     pq.Insert("test");
     foreach (string s in pq)
     {
         yield return(s);
     }
 }
        IEnumerable <string> Strings(ArrayPQBase <string> pq)
        {
            foreach (var s in array)
            {
                pq.Insert(s);
            }

            while (!pq.IsEmpty)
            {
                yield return(pq.Delete());
            }
        }
        void ArrayPQHamlet(ArrayPQBase <string> pq, string[] expectedTops, string[] expectedLeftovers)
        {
            // arrange
            // var pq = new MinPQ<string>();
            Assert.True(pq.IsEmpty);

            // act
            var tops = Hamlet(pq).ToList();

            // assert
            Assert.False(pq.IsEmpty);
            Assert.Equal(2, pq.Size);

            // , String.Join("|", tops)
            Assert.Equal(expectedTops, tops);

            // , String.Join("|", leftovers)
            var leftovers = pq.ToArray();

            Assert.Equal(expectedLeftovers, leftovers);

            Assert.Equal(expectedLeftovers.Union(expectedTops).OrderBy(x => x), tops.Union(leftovers).OrderBy(x => x));
        }
 void ConstructFromArrayAndIterate(ArrayPQBase <string> pq, string[] expected)
 {
     Assert.False(pq.IsEmpty);
     Assert.Equal(expected, pq.ToList());
 }