Skip to content

Commit 00d6de1

Browse files
authored
Merge pull request #70 from fslaborg/daily-test-improver-gamma-coverage-20251013-9a1f7dbbd282f51f-9af5848c2de26ad5
Daily Test Coverage Improver - Achieve 100% Coverage for Gamma.fs
2 parents d005634 + 86cc59d commit 00d6de1

File tree

1 file changed

+55
-0
lines changed

1 file changed

+55
-0
lines changed

tests/FsMath.Tests/GammaCoverageTests.fs

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -471,3 +471,58 @@ module GammaCoverageTests =
471471
let ``Q: digamma(100.0) for large positive x`` () =
472472
let result = eval <@ Gamma.digamma 100.0 @> :?> float
473473
floatClose Accuracy.medium result 4.600161852 "Expected ψ(100)"
474+
475+
// ========================================
476+
// Additional coverage tests for uncovered lines
477+
// ========================================
478+
479+
[<Fact>]
480+
let ``Q: upperIncompleteRegularized uses gammpapprox for large a (line 332)`` () =
481+
// Line 332: 'T.One - Gamma.gammpapprox a x true when a >= 100.0
482+
let result = eval <@ Gamma.upperIncompleteRegularized 150.0 160.0 @> :?> float
483+
isTrue (result >= 0.0 && result <= 1.0) "Expected valid Q value via gammpapprox"
484+
485+
[<Fact>]
486+
let ``Q: upperIncompleteRegularized uses gcf path for x >= a + 1 (line 336)`` () =
487+
// Line 336: Gamma.gcf a x when x >= a + 1 and a < 100.0
488+
let result = eval <@ Gamma.upperIncompleteRegularized 2.0 5.0 @> :?> float
489+
floatClose Accuracy.medium result 0.0404276 "Expected Q value via gcf"
490+
491+
[<Fact>]
492+
let ``Q: upperIncompleteRegularized with a=50, x=60 uses gammpapprox (line 332)`` () =
493+
// Additional test for line 332 with different values
494+
let result = eval <@ Gamma.upperIncompleteRegularized 120.0 100.0 @> :?> float
495+
isTrue (result >= 0.0 && result <= 1.0) "Expected valid Q for large a"
496+
497+
[<Fact>]
498+
let ``Q: upperIncompleteRegularized with a=10, x=15 uses gcf (line 336)`` () =
499+
// Additional test for line 336
500+
let result = eval <@ Gamma.upperIncompleteRegularized 10.0 15.0 @> :?> float
501+
floatClose Accuracy.medium result 0.0698536607 "Expected Q value"
502+
503+
[<Fact>]
504+
let ``Q: digammaPositive with x=1e17 uses large x asymptotic path (line 417)`` () =
505+
// Line 417: ln s - half / s - w when s >= limit (1e17)
506+
let result = eval <@ Gamma.digammaPositive 1.0e17 @> :?> float
507+
let expected = log 1.0e17 - 0.5 / 1.0e17
508+
floatClose Accuracy.low result expected "Expected asymptotic digamma for very large x"
509+
510+
[<Fact>]
511+
let ``Q: digamma with x=1e17 uses large x asymptotic path (line 469)`` () =
512+
// Line 469: log<'T> s - half / s - w when s >= limit (1e17)
513+
let result = eval <@ Gamma.digamma 1.0e17 @> :?> float
514+
let expected = log 1.0e17 - 0.5 / 1.0e17
515+
floatClose Accuracy.low result expected "Expected asymptotic digamma for very large x"
516+
517+
[<Fact>]
518+
let ``Q: digamma with x=5e17 uses asymptotic expansion`` () =
519+
// Additional test for large x path
520+
let result = eval <@ Gamma.digamma 5.0e17 @> :?> float
521+
isTrue (result > 39.0) "Expected large digamma value for very large x"
522+
523+
[<Fact>]
524+
let ``Q: digammaPositive with x=1e18 uses extreme asymptotic path`` () =
525+
// Test with even larger value
526+
let result = eval <@ Gamma.digammaPositive 1.0e18 @> :?> float
527+
let expected = log 1.0e18
528+
floatClose Accuracy.low result expected "Expected asymptotic behavior"

0 commit comments

Comments
 (0)