Browse Source

FSharp: matrix/vector slice syntax unit tests

v2
Christoph Ruegg 14 years ago
parent
commit
0986188176
  1. 26
      src/FSharpUnitTests/MatrixTests.fs
  2. 26
      src/FSharpUnitTests/VectorTests.fs

26
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) )
[<Test>]
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.|]))
[<Test>]
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.|]))
[<Test>]
let ``Matrix.fold`` () =
Matrix.fold (fun a b -> a - b) 0.0 smallM |> should equal -1.2

26
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<float>
[<Test>]
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|]))
[<Test>]
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|]))
[<Test>]
let ``Vector.toArray`` () =
Vector.toArray smallv |> should array_equal [|0.3;0.3;0.3;0.3;0.3|]

Loading…
Cancel
Save