Files
game-of-life/GameOfLifeTests/PatternLibraryTests.cs
T
2026-05-07 03:23:56 +00:00

94 lines
3.2 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using GameOfLife;
using GameOfLife.Entities;
using NUnit.Framework;
namespace GameOfLifeTests
{
public class PatternLibraryTests
{
[Test]
public void PrintLibrary()
{
var patternLibrary = new PatternLibrary();
//Assert.AreEqual(15, patternLibrary.PatternProjections.Count);
foreach (var p in patternLibrary.PatternProjections)
{
Console.WriteLine($"{p.Item1.Name}, {p.Item1.Type} {string.Join(" ", p.Item1.Comments)}");
foreach (var v in p.Item2)
{
Console.WriteLine(v.First());
PatternTestData.ConsoleWriteGrid(v.Offset(new Cell(2,0)));
Console.WriteLine();
}
Console.WriteLine("* * * * ");
}
}
[Test]
public void MatchLibraryPatterns_SelfTest()
{
var patternLibrary = new PatternLibrary();
foreach (var pattern in patternLibrary.PatternProjections)
{
var matches = patternLibrary.MatchLibraryPatterns(pattern.Item2[0]);
// pattern metadata is the same
Assert.AreEqual(matches.Count(m => m.Item1 == pattern.Item1), 1);
}
}
[Test]
public void MultTest()
{
var singleDigits = new[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }.Select(i=> i.ToString()[0]);
string ReplaceAtIndex(string s, char c, int i)
{
var array = s.ToCharArray();
array[i] = c;
return new string(array);
}
IEnumerable<int> EnumUnderscoreWithNumbers(string s)
{
var currIndex = s.IndexOf('_');
if (currIndex == -1) return new[] { int.Parse(s) };
var skip = currIndex == 0 ? 1 : 0;
return singleDigits.Skip(skip).SelectMany<char, int>(d => EnumUnderscoreWithNumbers(ReplaceAtIndex(s, d, currIndex)));
}
int PartialProduct(int m1, int m2, int digit)
{
var m2s = m2.ToString();
var c = int.Parse(m2s[m2s.Length - digit].ToString());
return m1 * c * (int)Math.Pow(10, digit - 1);
}
Console.WriteLine(PartialProduct(131, 73, 2));
string multplicand = "_3_";
string multiplier = "__";
string partialProd1 = "3__9";
string partialProd2 = "___";
string product = "9__9";
var r =
from mcnd in EnumUnderscoreWithNumbers(multplicand)
from mplr in EnumUnderscoreWithNumbers(multiplier)
from prdc in EnumUnderscoreWithNumbers(product)
from prt in EnumUnderscoreWithNumbers(partialProd1)
where PartialProduct(mcnd, mplr, 1) == prt && mcnd * mplr == prdc
select new { mcnd, mplr, prdc };
foreach (var result in r)
{
Console.WriteLine($"{result.mcnd} * {result.mplr} = {result.prdc}");
}
}
}
}