Files
2025-08-03 20:24:38 -07:00

200 lines
5.1 KiB
C#

using System;
using System.Linq;
using NUnit.Framework;
namespace magicSquare.Tests
{
[TestFixture]
public class SquareMatrixTests
{
[Test]
public void Init()
{
var vals
= new [,]
{
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
var matrix = new SquareMatrix(vals);
Assert.That(matrix.IsFeasible(), Is.False);
Assert.That(matrix.ColumnSum(0), Is.EqualTo(12));
Assert.That(matrix.ColumnSum(1), Is.EqualTo(15));
Assert.That(matrix.ColumnSum(2), Is.EqualTo(18));
Assert.That(matrix.RowSum(0), Is.EqualTo(6));
Assert.That(matrix.RowSum(1), Is.EqualTo(15));
Assert.That(matrix.RowSum(2), Is.EqualTo(24));
Assert.That(matrix.Diag1Sum, Is.EqualTo(15));
Assert.That(matrix.Diag2Sum, Is.EqualTo(15));
Assert.That(matrix.ColumnDelta(0), Is.EqualTo(-3));
Assert.That(matrix.ColumnDelta(1), Is.EqualTo(0));
Assert.That(matrix.ColumnDelta(2), Is.EqualTo(3));
Assert.That(matrix.RowDelta(0), Is.EqualTo(-9));
Assert.That(matrix.RowDelta(1), Is.EqualTo(0));
Assert.That(matrix.RowDelta(2), Is.EqualTo(9));
}
[Test]
public void Swap()
{
var vals
= new [,]
{
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
var matrix = new SquareMatrix(vals);
matrix.Swap(1,1,2,1);
PrintMatrix(matrix);
Assert.That(matrix.IsFeasible(), Is.False);
Assert.That(matrix.ColumnSum(0), Is.EqualTo(12));
Assert.That(matrix.ColumnSum(1), Is.EqualTo(15));
Assert.That(matrix.ColumnSum(2), Is.EqualTo(18));
Assert.That(matrix.RowSum(0), Is.EqualTo(6));
Assert.That(matrix.RowSum(1), Is.EqualTo(18));
Assert.That(matrix.RowSum(2), Is.EqualTo(21));
Assert.That(matrix.Diag1Sum, Is.EqualTo(18));
Assert.That(matrix.Diag2Sum, Is.EqualTo(18));
Assert.That(matrix.ColumnDelta(0), Is.EqualTo(-3));
Assert.That(matrix.ColumnDelta(1), Is.EqualTo(0));
Assert.That(matrix.ColumnDelta(2), Is.EqualTo(3));
Assert.That(matrix.RowDelta(0), Is.EqualTo(-9));
Assert.That(matrix.RowDelta(1), Is.EqualTo(3));
Assert.That(matrix.RowDelta(2), Is.EqualTo(6));
}
[Test]
public void Swap2()
{
var vals
= new [,]
{
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
var matrix = new SquareMatrix(vals);
matrix.Swap(0,1,1,2);
PrintMatrix(matrix);
Assert.That(matrix.IsFeasible(), Is.False);
Assert.That(matrix.ColumnSum(0), Is.EqualTo(12));
Assert.That(matrix.ColumnSum(1), Is.EqualTo(19));
Assert.That(matrix.ColumnSum(2), Is.EqualTo(14));
Assert.That(matrix.RowSum(0), Is.EqualTo(10));
Assert.That(matrix.RowSum(1), Is.EqualTo(11));
Assert.That(matrix.RowSum(2), Is.EqualTo(24));
Assert.That(matrix.Diag1Sum, Is.EqualTo(15));
Assert.That(matrix.Diag2Sum, Is.EqualTo(15));
Assert.That(matrix.ColumnDelta(0), Is.EqualTo(-3));
Assert.That(matrix.ColumnDelta(1), Is.EqualTo(4));
Assert.That(matrix.ColumnDelta(2), Is.EqualTo(-1));
Assert.That(matrix.RowDelta(0), Is.EqualTo(-5));
Assert.That(matrix.RowDelta(1), Is.EqualTo(-4));
Assert.That(matrix.RowDelta(2), Is.EqualTo(9));
}
[Test]
public void Swap3()
{
var vals
= new [,]
{
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
var matrix = new SquareMatrix(vals);
matrix.Swap(2,0,1,2);
PrintMatrix(matrix);
Assert.That(matrix.IsFeasible(), Is.False);
Assert.That(matrix.ColumnSum(0), Is.EqualTo(11));
Assert.That(matrix.ColumnSum(1), Is.EqualTo(15));
Assert.That(matrix.ColumnSum(2), Is.EqualTo(19));
Assert.That(matrix.RowSum(0), Is.EqualTo(6));
Assert.That(matrix.RowSum(1), Is.EqualTo(16));
Assert.That(matrix.RowSum(2), Is.EqualTo(23));
Assert.That(matrix.Diag1Sum, Is.EqualTo(15));
Assert.That(matrix.Diag2Sum, Is.EqualTo(14));
Assert.That(matrix.ColumnDelta(0), Is.EqualTo(-4));
Assert.That(matrix.ColumnDelta(1), Is.EqualTo(0));
Assert.That(matrix.ColumnDelta(2), Is.EqualTo(4));
Assert.That(matrix.RowDelta(0), Is.EqualTo(-9));
Assert.That(matrix.RowDelta(1), Is.EqualTo(1));
Assert.That(matrix.RowDelta(2), Is.EqualTo(8));
}
[Test]
public void Deltas()
{
var vals
= new[,]
{
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
var matrix = new SquareMatrix(vals);
var pairs = matrix.MaxColumnDeltaPairs().ToArray();
Assert.That(pairs.First(), Is.EqualTo(new Tuple<int,int>(0,2)));
}
[Test]
public void Deltas2()
{
var vals
= new[,]
{
{1, 2, 3, 4},
{4, 5, 6, 7},
{8, 9, 10, 11},
{12,13,14,15}
};
var matrix = new SquareMatrix(vals);
var pairs = matrix.MaxColumnDeltaPairs().ToArray();
Assert.That(pairs.First(), Is.EqualTo(new Tuple<int,int>(1,3)));
}
[Test]
public void IsDiagonalTest()
{
var vals
= new[,]
{
{1, 2, 3, 4},
{4, 5, 6, 7},
{8, 9, 10, 11},
{12,13,14,15}
};
}
private void PrintMatrix(SquareMatrix sm)
{
Console.WriteLine(sm.Size);
var rowValues =
from row in Enumerable.Range(0, sm.Size)
let rowVals =
(from col in Enumerable.Range(0, sm.Size)
select sm.GetValue(row,col))
select rowVals;
foreach (var rowValue in rowValues)
{
Console.WriteLine(string.Join("\t", rowValue.ToArray()));
}
}
}
}