Skip to content

Commit 45bf8a0

Browse files
authored
Merge pull request #66 from fslaborg/daily-test-improver-matrix-formatcell-20251013-8eb5d5912085d9cd-855fc44fef5fbe47
Daily Test Coverage Improver - Matrix formatCell Tests (100% Coverage)
2 parents dec882e + 38de2a4 commit 45bf8a0

File tree

2 files changed

+161
-0
lines changed

2 files changed

+161
-0
lines changed

tests/FsMath.Tests/FsMath.Tests.fsproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
<Compile Include="VectorOpsCoverageTests.fs" />
2626
<Compile Include="AlgTypesTopLevelOpsCoverageTests.fs" />
2727
<Compile Include="MatrixFloatTests.fs" />
28+
<Compile Include="MatrixFormattingTests.fs" />
2829
<Compile Include="MatrixAdditionalTests.fs" />
2930
<Compile Include="PermutationTests.fs" />
3031
<Compile Include="LinearAlgebraTests.fs" />
Lines changed: 160 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,160 @@
1+
namespace FsMath.Tests.Matrix
2+
3+
open System
4+
open Xunit
5+
open FsMath
6+
7+
/// Tests for Matrix toFormattedString and formatCell functionality
8+
/// These tests ensure that formatCell correctly handles all numeric types
9+
module MatrixFormattingTests =
10+
11+
[<Fact>]
12+
let ``toFormattedString with float matrix`` () =
13+
let mat = matrix [| [|1.5; 2.75|]
14+
[|3.25; 4.125|] |]
15+
let str = mat.toFormattedString()
16+
Assert.Contains("Matrix", str)
17+
Assert.Contains("1.5", str)
18+
Assert.Contains("2.75", str)
19+
20+
[<Fact>]
21+
let ``toFormattedString with float32 matrix`` () =
22+
let mat = Matrix.create<float32> 2 2 [|1.5f; 2.75f; 3.25f; 4.125f|]
23+
let str = mat.toFormattedString()
24+
Assert.Contains("Matrix", str)
25+
Assert.Contains("1.5", str)
26+
Assert.Contains("2.75", str)
27+
28+
[<Fact>]
29+
let ``toFormattedString with int matrix`` () =
30+
let mat = Matrix.create<int> 2 2 [|1; 2; 3; 4|]
31+
let str = mat.toFormattedString()
32+
Assert.Contains("Matrix", str)
33+
Assert.Contains("1", str)
34+
Assert.Contains("4", str)
35+
36+
[<Fact>]
37+
let ``toFormattedString with custom float format`` () =
38+
let mat = matrix [| [|1.123456; 2.789012|]
39+
[|3.456789; 4.987654|] |]
40+
let str = mat.toFormattedString(floatFormat = "F2")
41+
Assert.Contains("1.12", str)
42+
Assert.Contains("2.79", str)
43+
44+
[<Fact>]
45+
let ``toFormattedString with scientific notation`` () =
46+
let mat = matrix [| [|0.00123; 0.00456|]
47+
[|0.00789; 0.00012|] |]
48+
let str = mat.toFormattedString(useScientific = true)
49+
Assert.Contains("E", str)
50+
51+
[<Fact>]
52+
let ``toFormattedString with maxRows truncation`` () =
53+
let mat = Matrix.init 10 3 (fun r c -> float (r * 3 + c))
54+
let str = mat.toFormattedString(maxRows = 5)
55+
Assert.Contains("truncated", str)
56+
Assert.Contains("10x3", str)
57+
58+
[<Fact>]
59+
let ``toFormattedString with maxCols truncation`` () =
60+
let mat = Matrix.init 3 10 (fun r c -> float (r * 10 + c))
61+
let str = mat.toFormattedString(maxCols = 5)
62+
Assert.Contains("truncated", str)
63+
Assert.Contains("3x10", str)
64+
65+
[<Fact>]
66+
let ``toFormattedString handles negative floats`` () =
67+
let mat = matrix [| [|-1.5; -2.75|]
68+
[|-3.25; -4.125|] |]
69+
let str = mat.toFormattedString()
70+
Assert.Contains("-1.5", str)
71+
Assert.Contains("-2.75", str)
72+
73+
[<Fact>]
74+
let ``toFormattedString handles negative float32`` () =
75+
let mat = Matrix.create<float32> 2 2 [|-1.5f; -2.75f; -3.25f; -4.125f|]
76+
let str = mat.toFormattedString()
77+
Assert.Contains("-1.5", str)
78+
Assert.Contains("-2.75", str)
79+
80+
[<Fact>]
81+
let ``toFormattedString handles mixed positive and negative floats`` () =
82+
let mat = matrix [| [|1.5; -2.75|]
83+
[|-3.25; 4.12|] |]
84+
let str = mat.toFormattedString()
85+
Assert.Contains("1.5", str)
86+
Assert.Contains("-2.75", str)
87+
Assert.Contains("-3.25", str)
88+
Assert.Contains("4.12", str)
89+
90+
[<Fact>]
91+
let ``toFormattedString handles zero in float matrix`` () =
92+
let mat = matrix [| [|0.0; 1.0|]
93+
[|2.0; 0.0|] |]
94+
let str = mat.toFormattedString()
95+
Assert.Contains("0", str)
96+
97+
[<Fact>]
98+
let ``toFormattedString handles zero in float32 matrix`` () =
99+
let mat = Matrix.create<float32> 2 2 [|0.0f; 1.0f; 2.0f; 0.0f|]
100+
let str = mat.toFormattedString()
101+
Assert.Contains("0", str)
102+
103+
[<Fact>]
104+
let ``toFormattedString handles large integers`` () =
105+
let mat = Matrix.create<int> 2 2 [|1000; 2000; 3000; 4000|]
106+
let str = mat.toFormattedString()
107+
Assert.Contains("1000", str)
108+
Assert.Contains("4000", str)
109+
110+
[<Fact>]
111+
let ``toFormattedString handles very small float32 values`` () =
112+
let mat = Matrix.create<float32> 2 2 [|0.001f; 0.002f; 0.003f; 0.004f|]
113+
let str = mat.toFormattedString()
114+
Assert.Contains("Matrix", str)
115+
116+
[<Fact>]
117+
let ``toFormattedString handles very large float32 values`` () =
118+
let mat = Matrix.create<float32> 2 2 [|1000.0f; 2000.0f; 3000.0f; 4000.0f|]
119+
let str = mat.toFormattedString()
120+
Assert.Contains("1000", str)
121+
Assert.Contains("4000", str)
122+
123+
[<Fact>]
124+
let ``toFormattedString with float32 and scientific notation`` () =
125+
let mat = Matrix.create<float32> 2 2 [|0.00123f; 0.00456f; 0.00789f; 0.00012f|]
126+
let str = mat.toFormattedString(useScientific = true)
127+
Assert.Contains("E", str)
128+
129+
[<Fact>]
130+
let ``toFormattedString with single row float32 matrix`` () =
131+
let mat = Matrix.create<float32> 1 3 [|1.5f; 2.5f; 3.5f|]
132+
let str = mat.toFormattedString()
133+
Assert.Contains("Matrix 1x3", str)
134+
Assert.Contains("1.5", str)
135+
136+
[<Fact>]
137+
let ``toFormattedString with single column float32 matrix`` () =
138+
let mat = Matrix.create<float32> 3 1 [|1.5f; 2.5f; 3.5f|]
139+
let str = mat.toFormattedString()
140+
Assert.Contains("Matrix 3x1", str)
141+
Assert.Contains("1.5", str)
142+
143+
[<Fact>]
144+
let ``toFormattedString with int64 matrix`` () =
145+
let mat = Matrix.create<int64> 2 2 [|100L; 200L; 300L; 400L|]
146+
let str = mat.toFormattedString()
147+
Assert.Contains("100", str)
148+
Assert.Contains("400", str)
149+
150+
[<Fact>]
151+
let ``toFormattedString handles alternating floats and float32s in pattern`` () =
152+
// Test both float and float32 formatting paths
153+
let matFloat = matrix [| [|1.234; 5.678|] |]
154+
let matFloat32 = Matrix.create<float32> 1 2 [|1.234f; 5.678f|]
155+
156+
let strFloat = matFloat.toFormattedString()
157+
let strFloat32 = matFloat32.toFormattedString()
158+
159+
Assert.Contains("1.23", strFloat)
160+
Assert.Contains("1.23", strFloat32)

0 commit comments

Comments
 (0)