200 lines
5.1 KiB
C#
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()));
|
|
}
|
|
}
|
|
}
|
|
}
|