Example #1
0
        public void SortAlgorithms()
        {
            var types = Enum.GetValues(typeof(CardType))
                        .Cast <CardType>()
                        .ToArray();
            var clubs  = types.Select(t => new Card(t, CardColor.Club));
            var hearts = types.Select(t => new Card(t, CardColor.Heart));
            var set    = new CardSet <Card>(clubs.Union(hearts).ToArray());

            set.Randomize();
            var enumerated    = set.AsEnumerable().ToArray();
            var bubbleSummary = set.Sort(SortAlgorithm.Bubble);

            Assert.IsTrue(bubbleSummary.Swaps > 0);
            Assert.IsTrue(bubbleSummary.Comparisons > 0);
            var bubblePass = set.AsEnumerable().ToArray();

            for (int i = 0; i < types.Length; i++)
            {
                Assert.AreEqual(types[i], bubblePass[2 * i].Type);
                Assert.AreEqual(types[i], bubblePass[2 * i + 1].Type);
            }
            set = new CardSet <Card>(enumerated);
            var quickSummary = set.Sort(SortAlgorithm.Quick);

            Assert.IsTrue(quickSummary.Swaps > 0);
            Assert.IsTrue(quickSummary.Comparisons > 0);
            Assert.IsTrue(bubbleSummary.Swaps > quickSummary.Swaps);
            Assert.IsTrue(bubbleSummary.Comparisons > quickSummary.Comparisons);
            var quickPass = set.AsEnumerable().ToArray();

            for (int i = 0; i < types.Length; i++)
            {
                Assert.AreEqual(types[i], quickPass[2 * i].Type);
                Assert.AreEqual(types[i], quickPass[2 * i + 1].Type);
            }
            uint samePositions      = 0;
            uint differentPositions = 0;

            for (int i = 0; i < enumerated.Length; i++)
            {
                if (bubblePass[i] == quickPass[i])
                {
                    samePositions++;
                }
                else
                {
                    differentPositions++;
                }
            }
            Assert.IsTrue(samePositions > 0);
            Assert.IsTrue(differentPositions > 0);
        }
Example #2
0
        public void EnumerateCards()
        {
            var cards         = new Card[] { new Card(CardType.Nine, CardColor.Spade), new Card(CardType.Jack, CardColor.Club) };
            var initialLength = cards.Length;
            var set           = new CardSet <Card>(cards);

            Array.Resize(ref cards, 3);
            cards[2] = new Card(CardType.Ace, CardColor.Spade);
            var enumerated = set.AsEnumerable().ToArray();

            Assert.AreEqual(initialLength, enumerated.Count());
            for (int i = 0; i < initialLength; i++)
            {
                Assert.AreEqual(cards[i], enumerated[i]);
            }
        }
Example #3
0
        public void EveryCardHasNewIndexAfterRandomize()
        {
            var types = Enum.GetValues(typeof(CardType))
                        .Cast <CardType>()
                        .ToArray();
            var cards = types.Select(t => new Card(t, CardColor.Club));
            var set   = new CardSet <Card>(cards.ToArray());

            set.Randomize();
            var randomized = set.AsEnumerable().Select(r => r.Type).ToArray();

            for (int i = 0; i < types.Length; i++)
            {
                Assert.AreNotEqual(types[i], randomized[i]);
            }
        }
Example #4
0
        public void NewOrderAfterRandomize()
        {
            var types = Enum.GetValues(typeof(CardType))
                        .Cast <CardType>()
                        .ToArray();
            var cards = types.Select(t => new Card(t, CardColor.Club));
            var first = cards.First().Type;
            var set   = new CardSet <Card>(cards.ToArray());

            set.Randomize();
            var randomized = set.AsEnumerable().Select(c => c.Type).ToList();
            var offset     = randomized.IndexOf(first);
            var same       = 1;

            for (int i = 1; i < types.Length; i++)
            {
                var r = randomized[(i + offset) % types.Length];
                if (types[i] == r)
                {
                    same++;
                }
            }
            Assert.AreNotEqual(types.Length, same);
        }