public void EngineShouldGenerateCorrectCollapseWheel(int level) { var config = new Configuration(); var spinResult = GenerateWinningSpinResult(level); var referenceWheel = MainGameEngine.GetTargetWheel(level, config); var removedWinPositions = CollapsingBonusEngine.GetRemoveWinPositions(spinResult.WinPositions); var collapsingRemoves = CollapsingBonusEngine.GetCollapseRemoveItems(removedWinPositions); var newTopIndices = CollapsingBonusEngine.GetCollapseTopIndices(referenceWheel, spinResult.TopIndices, collapsingRemoves); var collapsingAdds = CollapsingBonusEngine.GetCollapseAddItems(referenceWheel, newTopIndices, collapsingRemoves); var collapsingWheel = CollapsingBonusEngine.GenerateCollapsedWheel(spinResult.Wheel, collapsingRemoves, collapsingAdds); var newWheel = spinResult.Wheel.Copy(); foreach (var removeItem in collapsingRemoves) { var cleanReel = newWheel[removeItem.Key]; foreach (var index in removeItem.Value.OrderByDescending(val => val)) { cleanReel.RemoveAt(index); } newWheel[removeItem.Key] = collapsingAdds[removeItem.Key].Concat(cleanReel).ToList(); } foreach (var reelIndex in collapsingWheel.Reels.Select((Value, Index) => new { Value, Index })) { var referenceReel = newWheel[reelIndex.Index]; Assert.IsTrue(!referenceReel.Except(reelIndex.Value).Any()); } newWheel.Equals(collapsingWheel); }