1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
namespace FundLab.Web.Tests
open Xunit
open FundLab.Web
module ChartTests =
[<Fact>]
let ``chart points preserve chronological order and normalize NAV values`` () =
let observations : NavObservation list =
[
{ navDate = "2026-01-01"; nav = "1.00000000"; dailyReturn = None }
{ navDate = "2026-01-02"; nav = "1.25000000"; dailyReturn = Some "25.00000000" }
{ navDate = "2026-01-03"; nav = "1.10000000"; dailyReturn = Some "-12.00000000" }
]
let points = Chart.chartPoints observations
Assert.Equal(3, points.Length)
Assert.Equal(0.0, points[0].x)
Assert.Equal(1.0, points[1].y)
Assert.Equal(0.4, points[2].y)
Assert.Equal("2026-01-03", points[2].navDate)
[<Fact>]
let ``series points keep the shared date axis and normalize each series`` () =
let dates = [ "2026-01-01"; "2026-01-02"; "2026-01-03" ]
let values =
[
"2026-01-01", "100.00"
"2026-01-02", "150.00"
"2026-01-03", "125.00"
]
let points = Chart.seriesPoints dates values
Assert.Equal(3, points.Length)
Assert.Equal(0.0, points[0].x)
Assert.Equal(0.5, points[1].x)
Assert.Equal(1.0, points[2].x)
Assert.Equal(0.0, points[0].y)
Assert.Equal(1.0, points[1].y)
Assert.Equal(0.5, points[2].y)
Assert.Equal("150.00", points[1].value)
[<Fact>]
let ``series points skip missing dates instead of filling zero`` () =
let dates = [ "2026-01-01"; "2026-01-02"; "2026-01-03" ]
let values =
[
"2026-01-01", "100.00"
"2026-01-03", "125.00"
]
let points = Chart.seriesPoints dates values
Assert.Equal(2, points.Length)
Assert.Equal(0.0, points[0].x)
Assert.Equal(1.0, points[1].x)
Assert.Equal("2026-01-03", points[1].label)
[<Fact>]
let ``a single point is centered and keeps no line`` () =
let points = Chart.seriesPoints [ "2026-01-01" ] [ "2026-01-01", "1.00000000" ]
Assert.Equal(1, points.Length)
Assert.Equal(0.5, points[0].x)
Assert.Equal(0.5, points[0].y)
|