Files
2026-05-07 03:23:56 +00:00

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