using System; using System.Linq; using GameOfLife; using GameOfLife.Entities; using NUnit.Framework; namespace GameOfLifeTests { public class VariationsTests { private readonly PatternTestData _patternTestData = new PatternTestData(); [SetUp] public void Setup() { } [Test] public void CornerTest() { var pattern = new Projections(_patternTestData.CornerPattern); Assert.AreEqual(4, pattern.Count); var offsetCell = new Cell(2,2); foreach (var variation in pattern) { PatternTestData.ConsoleWrite(variation); PatternTestData.ConsoleWriteGrid(variation.Offset(offsetCell)); Console.WriteLine(); PatternTestData.ConsoleWriteGrid(variation.GetBoundary.Offset(offsetCell)); Console.WriteLine("-----"); Console.WriteLine(); } } [Test] public void SquareTest() { var pattern = new Pattern(_patternTestData.SquarePattern); PatternTestData.ConsoleWrite(pattern); Assert.AreEqual(4, pattern.Count); foreach (var variation in new Projections(pattern)) { PatternTestData.ConsoleWriteGrid(variation); Console.WriteLine(); } } [Test] public void GliderTest() { PatternTestData.ConsoleWrite(_patternTestData.GliderPattern); var variations = new Projections(_patternTestData.GliderPattern); foreach (var variation in variations) { PatternTestData.ConsoleWriteGrid(variation.Offset(new Cell(2,0))); Console.WriteLine(); } } [Test] public void FindPattern_Corner_Tests() { var gol = new LifeArray(_patternTestData.CornerPattern); var results = gol.LivingCells.ToPattern().FindPattern(_patternTestData.CornerPattern).ToArray(); Assert.AreEqual(1, results.Length); } [Test] public void FindPattern_Corner_Square_Tests() { var gol = new LifeArray(_patternTestData.CornerPattern); var results = gol.LivingCells.ToPattern().FindPattern(_patternTestData.SquarePattern).ToArray(); Assert.AreEqual(0, results.Length); } [Test] public void FindPattern_Corner_Rotated_Tests() { var gol = new LifeHashSet(_patternTestData.CornerPattern.Rotate(2).Normalize()); var results = gol.LivingCells.ToPattern().FindPattern(_patternTestData.CornerPattern).ToArray(); Assert.AreEqual(1, results.Length); } [Test] public void FindPattern_TwoCorners_Tests() { var offsetCorner = _patternTestData.CornerPattern.Offset(new Cell(3,0)); var pattern = _patternTestData.CornerPattern + offsetCorner; //PatternTestData.ConsoleWriteGrid(pattern, 10); var gol = new LifeHashSet(pattern); var results = gol.LivingCellPattern.FindPattern(_patternTestData.CornerPattern).ToArray(); Assert.AreEqual(2, results.Length); } [Test] public void FindPattern_Overlapping_Empty_Space_Tests() { var offsetCorner = _patternTestData.CornerPattern.Offset(new Cell(2, 0)); var pattern = _patternTestData.CornerPattern + offsetCorner; var gol = new LifeHashSet(pattern); var results = gol.LivingCells.ToPattern().FindPattern(_patternTestData.CornerPattern).ToArray(); Assert.AreEqual(0, results.Length); } [Test] public void FindPattern_Corner_and_Square_Tests() { var offsetCorner = _patternTestData.SquarePattern.Offset(new Cell(4, 0)); var pattern = _patternTestData.CornerPattern + offsetCorner; PatternTestData.ConsoleWriteGrid(pattern); var gol = new LifeHashSet(pattern); var cornerResults = gol.LivingCells.ToPattern().FindPattern(_patternTestData.CornerPattern).ToArray(); Assert.AreEqual(1, cornerResults.Length); var squareResults = gol.LivingCells.ToPattern().FindPattern(_patternTestData.SquarePattern).ToArray(); Assert.AreEqual(1, squareResults.Length); } [Test] public void FindOscillations_Tests() { var oscillations= new LifeHashSet(_patternTestData.GliderApgPattern).FindOscillation(); Assert.Greater(oscillations.Count(), 1); Console.WriteLine(oscillations.Count()); } } }