public Matrix mm(Transpose transA, Matrix A, Transpose transB, Matrix B) {
        return mm(transA, A, transB, B, 1.0f, 0.0f);
    }
@Test
    public void testMm() {
        System.out.println("mm");
        float[][] A = {
                { 0.7220180f,  0.07121225f, 0.6881997f},
                {-0.2648886f, -0.89044952f, 0.3700456f},
                {-0.6391588f,  0.44947578f, 0.6240573f}
        };
        float[][] B = {
                {0.6881997f, -0.07121225f,  0.7220180f},
                {0.3700456f,  0.89044952f, -0.2648886f},
                {0.6240573f, -0.44947578f, -0.6391588f}
        };
        float[][] C = {
                { 0.9527204f, -0.2973347f,  0.06257778f},
                {-0.2808735f, -0.9403636f, -0.19190231f},
                { 0.1159052f,  0.1652528f, -0.97941688f}
        };
        float[][] D = {
                { 0.9887140f,  0.1482942f, -0.0212965f},
                { 0.1482942f, -0.9889421f, -0.0015881f},
                {-0.0212965f, -0.0015881f, -0.9997719f}
        };
        float[][] E = {
                {0.0000f,  0.0000f, 1.0000f},
                {0.0000f, -1.0000f, 0.0000f},
                {1.0000f,  0.0000f, 0.0000f}
        };

        Matrix a = Matrix.of(A);
        Matrix b = Matrix.of(B);
        float[][] F = b.mm(a).transpose().toArray();

        assertTrue(MathEx.equals(a.mm(b).toArray(),   C, 1E-6f));
        assertTrue(MathEx.equals(a.mt(b).toArray(),  D, 1E-6f));
        assertTrue(MathEx.equals(a.tm(b).toArray(),  E, 1E-6f));
        assertTrue(MathEx.equals(a.tt(b).toArray(), F, 1E-6f));
    }