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); }
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]); } }
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]); } }
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); }