func TestStrassen(t *testing.T) {
	A := matrix.MakeMatrix([]float64{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}, 4, 4)
	B := matrix.MakeMatrix([]float64{2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2}, 4, 4)

	C := Multiply(A, B)
	D := matrix.Multiply(A, B)
	if !FloatArrayEquals(C.Elements, D.Elements) {
		t.Error()
	}

	A = matrix.MakeMatrix([]float64{1, 1, 1, 1}, 2, 2)
	B = matrix.MakeMatrix([]float64{1, 1, 1, 1}, 2, 2)

	C = Multiply(A, B)
	D = matrix.Multiply(A, B)
	if !FloatArrayEquals(C.Elements, D.Elements) {
		t.Error()
	}

	A = matrix.MakeMatrix([]float64{1, 1, 1, 1, 1, 1, 1, 1, 1}, 3, 3)
	B = matrix.MakeMatrix([]float64{1, 1, 1, 1, 1, 1, 1, 1, 1}, 3, 3)

	C = Multiply(A, B)
	D = matrix.Multiply(A, B)
	if !FloatArrayEquals(C.Elements, D.Elements) {
		t.Error()
	}
}
func BenchmarkMultiply(b *testing.B) {
	a := make([]float64, 100000000, 100000000)
	c := make([]float64, 100000000, 100000000)

	for i := 0; i < 100000000; i++ {
		a[i] = float64(i)
		c[i] = float64(100000000 - i)
	}
	A := matrix.MakeMatrix(a, 10000, 10000)
	B := matrix.MakeMatrix(c, 10000, 10000)

	for i := 0; i < b.N; i++ {
		matrix.Multiply(A, B)
	}
}