anchor.diff:      let ``[SVD] random M33d``() =
   
           let rnd = new RandomSystem(1)
  -        for i in 0..100000 do
  +        for i in 0..10000000 do
               let mat = M33d.FromCols(rnd.UniformV3d(), rnd.UniformV3d(), rnd.UniformV3d())
   
               let svd = SVD.decompose mat
  
positive.code:             | _ -> failwithf "NONE at %d" i
  
      [<Test>]
      let ``[SVD] DecomposeWithBuilder``() =
  
          let rnd = new RandomSystem(1)
  
negative.code:                                     failwithf "Invalid SVD at %d" i
              | _ -> failwith "NONE"
  
      [<Test>]
      let ``[SVD] random M22f``() =
  
          let rnd = new RandomSystem(1)
          for i in 0..100000 do
              let mat = M22f.FromCols(rnd.UniformV2f(), rnd.UniformV2f())
  
              let svd = SVD.decompose mat
  
              match svd with
              | Some (q, s, v) -> let test = q * s * v
                                  if not (Fun.ApproximateEquals(test, mat, 1e-6f)) then
                                      failwithf "Invalid SVD at %d" i
              | _ -> failwith "NONE"
  
  
      [<Test>]
      let ``[SVD] random M23f``() =
  
          let rnd = new RandomSystem(1)
          for i in 0..100000 do
              let mat = M23f.FromCols(rnd.UniformV2f(), rnd.UniformV2f(), rnd.UniformV2f())
  
              let svd = SVD.decompose mat
  
              match svd with
              | Some (q, s, v) -> let test = q * s * v
                                  if not (Fun.ApproximateEquals(test, mat, 1e-6f)) then
                                      failwithf "Invalid SVD at %d" i
              | _ -> failwith "NONE"
  
  
      [<Test>]
      let ``[SVD] random M33f``() =
  
          let rnd = new RandomSystem(1)
          for i in 0..100000 do
              let mat = M33f.FromCols(rnd.UniformV3f(), rnd.UniformV3f(), rnd.UniformV3f())
  
              let svd = SVD.decompose mat
  
              match svd with
              | Some (q, s, v) -> let test = q * s * v
                                  if not (Fun.ApproximateEquals(test, mat, 1e-6f)) then
                                      failwithf "Invalid SVD at %d" i
              | _ -> failwith "NONE"
  
      [<Test>]
      let ``[SVD] random M34f``() =
  
          let rnd = new RandomSystem(1)
          for i in 0..100000 do
              let mat = M34f.FromCols(rnd.UniformV3f(), rnd.UniformV3f(), rnd.UniformV3f(), rnd.UniformV3f())
  
              let svd = SVD.decompose mat
  
              match svd with
              | Some (q, s, v) -> let test = q * s * v
                                  if not (Fun.ApproximateEquals(test, mat, 1e-6f)) then
                                      failwithf "Invalid SVD at %d" i
              | _ -> failwith "NONE"
  
      [<Test>]
      let ``[SVD] random M44f``() =
  
          let rnd = new RandomSystem(1)
          for i in 0..100000 do
              let mat = M44f.FromCols(rnd.UniformV4f(), rnd.UniformV4f(), rnd.UniformV4f(), rnd.UniformV4f())
  
              let svd = SVD.decompose mat
  
              match svd with
              | Some (q, s, v) -> let test = q * s * v
                                  if not (Fun.ApproximateEquals(test, mat, 1e-2f)) then
                                      failwithf "Invalid SVD at %d" i
              | _ -> failwith "NONE"