public void CartesianProductTest()
{
int[][] sequences =
{
new int[] { 1, 2, 3},
new int[] { 4, 5, 6},
};
var actual = Matrix.CartesianProduct(sequences);
var list = new List<int[]>();
foreach (IEnumerable<int> point in actual)
list.Add(new List<int>(point).ToArray());
var points = list.ToArray();
Assert.IsTrue(points[0].IsEqual(new int[] { 1, 4 }));
Assert.IsTrue(points[1].IsEqual(new int[] { 1, 5 }));
Assert.IsTrue(points[2].IsEqual(new int[] { 1, 6 }));
Assert.IsTrue(points[3].IsEqual(new int[] { 2, 4 }));
Assert.IsTrue(points[4].IsEqual(new int[] { 2, 5 }));
Assert.IsTrue(points[5].IsEqual(new int[] { 2, 6 }));
Assert.IsTrue(points[6].IsEqual(new int[] { 3, 4 }));
Assert.IsTrue(points[7].IsEqual(new int[] { 3, 5 }));
Assert.IsTrue(points[8].IsEqual(new int[] { 3, 6 }));
}