Пример #1
0
        public void CheckMultiplyScalar <M> () where M : struct, IMat <M, float>
        {
            var prop = from mat in Prop.Choose <M> ()
                       from scalar in Prop.Choose <float> ()
                       let mult = mat.Multiply(scalar)
                                  let multdiv = mult.Multiply(1 / scalar)
                                                select new { mat, scalar, mult, multdiv };

            prop.Label("{0}: (mat * scalar) * (1 / scalar) = mat", typeof(M).Name)
            .Check(p => Mat.ApproxEquals(p.mat, p.multdiv));
        }
Пример #2
0
        public void CheckInverse <M> ()
            where M : struct, ISquareMat <M, float>
        {
            var prop = from mat in Prop.Choose <M> ()
                       let inv = Mat.Inverse(mat)
                                 let mat_inv                         = mat.Multiply(inv)
                                                           let ident = Mat.Identity <M> ()
                                                                       select new { mat, inv, mat_inv, ident };

            prop.Label("{0}: mat * mat^-1 = I", typeof(M).Name)
            .Check(p => Mat.ApproxEquals(p.mat_inv, p.ident, 0.1f));
        }
Пример #3
0
        public void CheckMultiplyMatrices <M> () where M : struct, ISquareMat <M, float>
        {
            var prop = from mat1 in Prop.Choose <M> ()
                       from mat2 in Prop.Choose <M> ()
                       from mat3 in Prop.Choose <M> ()
                       let ident = Mat.Identity <M> ()
                                   let mult_mat1_ident = mat1.Multiply(ident)
                                                         let mult_mat12 = mat1.Multiply(mat2)
                                                                          let mult_mat12_3 = mult_mat12.Multiply(mat3)
                                                                                             let mult_mat23 = mat2.Multiply(mat3)
                                                                                                              let mult_mat1_23 = mat1.Multiply(mult_mat23)
                                                                                                                                 select new { mat1, mat2, ident, mult_mat1_ident,
                                                                                                                                              mult_mat12, mult_mat12_3, mult_mat23, mult_mat1_23 };

            prop.Label("{0}: mat * I = mat", typeof(M).Name)
            .Check(p => p.mult_mat1_ident.Equals(p.mat1));
            prop.Label("{0}: (mat1 * mat2) * mat3 = mat1 * (mat2 * mat3)", typeof(M).Name)
            .Check(p => Mat.ApproxEquals(p.mult_mat12_3, p.mult_mat1_23, 0.001f));
        }