diff --git a/src/FSharpUnitTests/MatrixTests.fs b/src/FSharpUnitTests/MatrixTests.fs index 60526fe4..13a74f5c 100644 --- a/src/FSharpUnitTests/MatrixTests.fs +++ b/src/FSharpUnitTests/MatrixTests.fs @@ -15,6 +15,32 @@ module MatrixTests = /// A large vector with increasingly large entries let largeM = new DenseMatrix( Array2D.init 100 100 (fun i j -> float i * 100.0 + float j) ) + [] + let ``Matrix.GetSlice`` () = + largeM.[*,*] |> should equal largeM + largeM.[0..99,0..99] |> should equal largeM + largeM.[1..2,1..2] |> should equal (DenseMatrix(2,2,[|101.;201.;102.;202.|])) + largeM.[98..,98..] |> should equal (DenseMatrix(2,2,[|9898.;9998.;9899.;9999.|])) + largeM.[..1,..1] |> should equal (DenseMatrix(2,2,[|0.;100.;1.;101.|])) + + [] + let ``Matrix.SetSlice`` () = + let m = DenseMatrix.init 2 2 (fun i j -> float i * 100.0 + float j) in + m.[*,*] <- DenseMatrix(2,2,[|5.;6.;7.;8.|]); + m |> should equal (DenseMatrix(2,2,[|5.;6.;7.;8.|])) + let m = DenseMatrix.init 2 2 (fun i j -> float i * 100.0 + float j) in + m.[0..1,0..1] <- DenseMatrix(2,2,[|5.;6.;7.;8.|]); + m |> should equal (DenseMatrix(2,2,[|5.;6.;7.;8.|])) + let m = DenseMatrix.init 4 4 (fun i j -> float i * 100.0 + float j) in + m.[1..2,1..2] <- DenseMatrix(2,2,[|5.;6.;7.;8.|]); + m |> should equal (DenseMatrix(4,4,[|0.;100.;200.;300.;1.;5.;6.;301.;2.;7.;8.;302.;3.;103.;203.;303.|])) + let m = DenseMatrix.init 4 4 (fun i j -> float i * 100.0 + float j) in + m.[2..,..1] <- DenseMatrix(2,2,[|5.;6.;7.;8.|]); + m |> should equal (DenseMatrix(4,4,[|0.;100.;5.;6.;1.;101.;7.;8.;2.;102.;202.;302.;3.;103.;203.;303.|])) + let m = DenseMatrix.init 4 4 (fun i j -> float i * 100.0 + float j) in + m.[..1,2..] <- DenseMatrix(2,2,[|5.;6.;7.;8.|]); + m |> should equal (DenseMatrix(4,4,[|0.;100.;200.;300.;1.;101.;201.;301.;5.;6.;202.;302.;7.;8.;203.;303.|])) + [] let ``Matrix.fold`` () = Matrix.fold (fun a b -> a - b) 0.0 smallM |> should equal -1.2 diff --git a/src/FSharpUnitTests/VectorTests.fs b/src/FSharpUnitTests/VectorTests.fs index b24f5d00..d60a171b 100644 --- a/src/FSharpUnitTests/VectorTests.fs +++ b/src/FSharpUnitTests/VectorTests.fs @@ -14,6 +14,32 @@ module VectorTests = /// A large vector with increasingly large entries let largev = new DenseVector(Array.init 100 (fun i -> float i / 100.0)) :> Vector + [] + let ``Vector.GetSlice`` () = + largev.[*] |> should equal largev + largev.[0..99] |> should equal largev + largev.[1..3] |> should equal (DenseVector([|0.01;0.02;0.03|])) + largev.[97..] |> should equal (DenseVector([|0.97;0.98;0.99|])) + largev.[..4] |> should equal (DenseVector([|0.00;0.01;0.02;0.03;0.04|])) + + [] + let ``Vector.SetSlice`` () = + let v = smallv.Clone() in + v.[*] <- DenseVector([|0.1;0.2;0.3;0.4;0.5|]); + v |> should equal (DenseVector([|0.1;0.2;0.3;0.4;0.5|])) + let v = smallv.Clone() in + v.[0..4] <- DenseVector([|0.1;0.2;0.3;0.4;0.5|]); + v |> should equal (DenseVector([|0.1;0.2;0.3;0.4;0.5|])) + let v = smallv.Clone() in + v.[1..3] <- DenseVector([|7.0;8.0;9.0|]); + v |> should equal (DenseVector([|0.3;7.0;8.0;9.0;0.3|])) + let v = smallv.Clone() in + v.[2..] <- DenseVector([|7.0;8.0;9.0|]); + v |> should equal (DenseVector([|0.3;0.3;7.0;8.0;9.0|])) + let v = smallv.Clone() in + v.[..2] <- DenseVector([|7.0;8.0;9.0|]); + v |> should equal (DenseVector([|7.0;8.0;9.0;0.3;0.3|])) + [] let ``Vector.toArray`` () = Vector.toArray smallv |> should array_equal [|0.3;0.3;0.3;0.3;0.3|]