176 lines
4.4 KiB
C#
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));
|
|
}
|
|
} |