Files
InverseOfLife.Test/tests/ScoreTests.cs
2025-01-18 08:30:10 +00:00

176 lines
4.4 KiB
C#

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));
}
/// <summary>
/// xx xx 02 03
/// xx xx 12 13
/// 20 21 xx xx
/// 30 31 xx xx
/// </summary>
[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));
}
/// <summary>
/// oo 01 02 03
/// 10 xx xx 13
/// xx 21 xx 23
/// 30 31 32 oo
/// </summary>
[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));
}
/// <summary>
/// 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
/// </summary>
[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));
}
}