141 lines
4.8 KiB
C#
141 lines
4.8 KiB
C#
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());
|
|
}
|
|
}
|
|
} |