public void Clone() { var types = Enum.GetValues(typeof(CardType)) .Cast <CardType>() .ToList(); var colors = Enum.GetValues(typeof(CardColor)) .Cast <CardColor>() .ToList(); var cards = new List <Card>(); colors.ForEach(c => types.ForEach(t => cards.Add(new Card(t, c)))); var fullSet = new CardSet <Card>(cards.ToArray()); fullSet.Randomize(); var clone = (CardSet <Card>)fullSet.Clone(); Assert.AreNotSame(fullSet, clone); Assert.AreEqual(0, fullSet.Except(clone, this).Count()); for (int i = 0; i < types.Count * colors.Count; i++) { Assert.AreNotSame(fullSet[i], clone[i]); Assert.AreEqual(fullSet[i].Color, clone[i].Color); Assert.AreEqual(fullSet[i].Type, clone[i].Type); } }
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 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); }