using NUnit.Framework; namespace InverseOfLife.Test; [TestFixture] public class ScoreTests { [Test] public void Score_AllCellsMatch_ReturnsOne() { var board1 = new Board(3, 3); var board2 = new Board(3, 3); board1.Toggle(0, 0); board1.Toggle(1, 1); board1.Toggle(2, 2); board2.Toggle(0, 0); board2.Toggle(1, 1); board2.Toggle(2, 2); double score = Summarizer.Score(board1, board2); Assert.That(score, Is.EqualTo(1.0)); } [Test] public void Score_NoMatchingCells_ReturnsZero() { var board1 = new Board(3, 3); var board2 = new Board(3, 3); board1.Toggle(0, 0); board1.Toggle(1, 1); board1.Toggle(2, 2); board2.Toggle(0, 1); board2.Toggle(1, 2); board2.Toggle(2, 0); double score = Summarizer.Score(board1, board2); Assert.That(score, Is.EqualTo(1d / 3d)); } [Test] public void Score_PartialMatch_ReturnsCorrectValue() { var board1 = new Board(3, 3); var board2 = new Board(3, 3); board1.Toggle(0, 0); board1.Toggle(1, 1); board1.Toggle(2, 2); board2.Toggle(0, 0); board2.Toggle(1, 2); board2.Toggle(2, 1); double score = Summarizer.Score(board1, board2); double tp = 1; double tn = 3 * 3 - 5; double total = 9; Assert.That(score, Is.EqualTo((tp + tn) / total).Within(1e-8)); } [Test] public void ScoreBySubGrid_AllCellsMatch_ReturnsOneForAllSubGrids() { var board1 = new Board(4, 4); var board2 = new Board(4, 4); board1.Toggle(0, 0); board1.Toggle(1, 1); board1.Toggle(2, 2); board1.Toggle(3, 3); board2.Toggle(0, 0); board2.Toggle(1, 1); board2.Toggle(2, 2); board2.Toggle(3, 3); var scores = Summarizer.ScoreBySubGrid(board1, board2, 2); Assert.That(scores[0], Is.EqualTo(1.0)); Assert.That(scores[1], Is.EqualTo(1.0)); Assert.That(scores[2], Is.EqualTo(1.0)); Assert.That(scores[3], Is.EqualTo(1.0)); } /// /// xx xx 02 03 /// xx xx 12 13 /// 20 21 xx xx /// 30 31 xx xx /// [Test] public void ScoreBySubGrid_NoMatchingCells_ReturnsZeroForAllSubGrids() { var board1 = new Board(4, 4); var board2 = new Board(4, 4); board1.Toggle(0, 0); board1.Toggle(1, 1); board1.Toggle(2, 2); board1.Toggle(3, 3); board2.Toggle(0, 1); board2.Toggle(1, 0); board2.Toggle(2, 3); board2.Toggle(3, 2); var scores = Summarizer.ScoreBySubGrid(board1, board2, 2); Assert.That(scores[0], Is.EqualTo(0.0)); Assert.That(scores[1], Is.EqualTo(1.0)); Assert.That(scores[2], Is.EqualTo(1.0)); Assert.That(scores[3], Is.EqualTo(0.0)); } /// /// oo 01 02 03 /// 10 xx xx 13 /// xx 21 xx 23 /// 30 31 32 oo /// [Test] public void ScoreBySubGrid_PartialMatch_ReturnsCorrectScores() { var board1 = new Board(4, 4); var board2 = new Board(4, 4); board1.Toggle(0, 0); board1.Toggle(1, 1); board1.Toggle(2, 2); board1.Toggle(3, 3); board2.Toggle(0, 0); board2.Toggle(1, 2); board2.Toggle(3, 3); board2.Toggle(2, 0); var scores = Summarizer.ScoreBySubGrid(board1, board2, 2); Assert.That(scores[0], Is.EqualTo(0.75d)); Assert.That(scores[1], Is.EqualTo(0.75d)); Assert.That(scores[2], Is.EqualTo(0.75d)); Assert.That(scores[3], Is.EqualTo(0.75d)); } /// /// oo 01 02 03 04 05 /// 10 oo 12 13 14 15 /// 20 21 22 23 24 25 /// 30 31 32 33 34 35 /// 40 41 42 43 oo 45 /// 50 51 52 53 54 55 /// [Test] public void ScoreBySubGrid_DifferentResolutions_CorrectSubGridCount() { var board1 = new Board(6, 6); var board2 = new Board(6, 6); board1.Toggle(0, 0); board1.Toggle(1, 1); board1.Toggle(4, 4); board2.Toggle(0, 0); board2.Toggle(1, 1); board2.Toggle(4, 4); var scores2X2 = Summarizer.ScoreBySubGrid(board1, board2, 2); var scores3X3 = Summarizer.ScoreBySubGrid(board1, board2, 3); Assert.That(scores2X2.Count, Is.EqualTo(9)); Assert.That(scores3X3.Count, Is.EqualTo(4)); } }