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(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(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())); } } } }