Skip to content

Commit 6e28dec

Browse files
committed
#367: add multicategory data tests for Chart2D
1 parent 59116e9 commit 6e28dec

File tree

2 files changed

+303
-0
lines changed

2 files changed

+303
-0
lines changed
Lines changed: 302 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,302 @@
1+
module Tests.MulticategoryData
2+
3+
open Expecto
4+
open Plotly.NET
5+
open Plotly.NET.LayoutObjects
6+
open Plotly.NET.TraceObjects
7+
open Plotly.NET.GenericChart
8+
open System
9+
10+
open TestUtils.HtmlCodegen
11+
12+
let multicategoryScatter =
13+
Chart.Scatter(
14+
MultiX = [["A";"A";"B";"B"];["AA"; "AB"; "BA"; "BB"]],
15+
MultiY = [
16+
["A";"A";"B";"B"] |> Seq.map (fun x -> x :> IConvertible)
17+
[1; 2; -1; -2] |> Seq.map (fun x -> x :> IConvertible)
18+
],
19+
UseDefaults = false
20+
)
21+
22+
[<Tests>]
23+
let ``Multicategory scatter tests`` =
24+
testList "MulticategoryData.Scatter" [
25+
testCase "Multicategory scatter data" ( fun () ->
26+
"""var data = [{"type":"scatter","x":[["A","A","B","B"],["AA","AB","BA","BB"]],"y":[["A","A","B","B"],[1,2,-1,-2]],"marker":{},"line":{}}];"""
27+
|> chartGeneratedContains multicategoryScatter
28+
);
29+
testCase "Multicategory scatter layout" ( fun () ->
30+
emptyLayout multicategoryScatter
31+
);
32+
]
33+
34+
let multiCategoryBar =
35+
Chart.Bar(
36+
values = [1; 2; -1; -2],
37+
MultiKeys = [["A";"A";"B";"B"];["AA"; "AB"; "BA"; "BB"]],
38+
UseDefaults = false
39+
)
40+
41+
[<Tests>]
42+
let ``Multicategory bar tests`` =
43+
testList "MulticategoryData.Bar" [
44+
testCase "Multicategory bar data" ( fun () ->
45+
"""var data = [{"type":"bar","x":[1,2,-1,-2],"y":[["A","A","B","B"],["AA","AB","BA","BB"]],"orientation":"h","marker":{"pattern":{}}}];"""
46+
|> chartGeneratedContains multiCategoryBar
47+
);
48+
testCase "Multicategory bar layout" ( fun () ->
49+
emptyLayout multiCategoryBar
50+
);
51+
]
52+
53+
let multiCategoryColumn =
54+
Chart.Column(
55+
values = [1; 2; -1; -2],
56+
MultiKeys = [["A";"A";"B";"B"];["AA"; "AB"; "BA"; "BB"]],
57+
UseDefaults = false
58+
)
59+
60+
[<Tests>]
61+
let ``Multicategory column tests`` =
62+
testList "MulticategoryData.Column" [
63+
testCase "Multicategory column data" ( fun () ->
64+
"""var data = [{"type":"bar","x":[["A","A","B","B"],["AA","AB","BA","BB"]],"y":[1,2,-1,-2],"orientation":"v","marker":{"pattern":{}}}];"""
65+
|> chartGeneratedContains multiCategoryColumn
66+
);
67+
testCase "Multicategory column layout" ( fun () ->
68+
emptyLayout multiCategoryColumn
69+
);
70+
]
71+
72+
let multicategoryHistogram =
73+
Chart.Histogram(
74+
MultiX = [["A";"A";"A";"B";"B"];["AA"; "AA"; "AB"; "BA"; "BB"]],
75+
UseDefaults = false
76+
)
77+
78+
[<Tests>]
79+
let ``Multicategory histogram tests`` =
80+
testList "MulticategoryData.Histogram" [
81+
testCase "Multicategory histogram data" ( fun () ->
82+
"""var data = [{"type":"histogram","x":[["A","A","A","B","B"],["AA","AA","AB","BA","BB"]],"marker":{"pattern":{}}}];"""
83+
|> chartGeneratedContains multicategoryHistogram
84+
);
85+
testCase "Multicategory histogram layout" ( fun () ->
86+
emptyLayout multicategoryHistogram
87+
);
88+
]
89+
90+
let multicategoryHistogram2D =
91+
Chart.Histogram2D(
92+
MultiX = [["A";"A";"A";"B";"B"];["AA"; "AA"; "AB"; "BA"; "BB"]],
93+
MultiY = [["A";"A";"A";"B";"B"];["AA"; "AA"; "AB"; "BA"; "BB"]],
94+
UseDefaults = false
95+
)
96+
97+
[<Tests>]
98+
let ``Multicategory histogram2D tests`` =
99+
testList "MulticategoryData.Histogram2D" [
100+
testCase "Multicategory histogram2D data" ( fun () ->
101+
"""var data = [{"type":"histogram2d","x":[["A","A","A","B","B"],["AA","AA","AB","BA","BB"]],"y":[["A","A","A","B","B"],["AA","AA","AB","BA","BB"]]}];"""
102+
|> chartGeneratedContains multicategoryHistogram2D
103+
);
104+
testCase "Multicategory histogram2D layout" ( fun () ->
105+
emptyLayout multicategoryHistogram2D
106+
);
107+
]
108+
109+
let multicategoryBoxPlot =
110+
[
111+
Chart.BoxPlot(
112+
Y = [1;1;2;3;4;3;2],
113+
MultiX = [["A"; "A"; "A"; "A"; "A"; "A"; "A"];["AA"; "AA"; "AA"; "AA"; "AA"; "AA"; "AA"]],
114+
UseDefaults = false
115+
)
116+
Chart.BoxPlot(
117+
Y = [1;1;2;3;4;3;2],
118+
MultiX = [["A"; "A"; "A"; "A"; "A"; "A"; "A"];["AB"; "AB"; "AB"; "AB"; "AB"; "AB"; "AB"]],
119+
UseDefaults = false
120+
)
121+
]
122+
|> Chart.combine
123+
124+
[<Tests>]
125+
let ``Multicategory boxplot tests`` =
126+
testList "MulticategoryData.BoxPlot" [
127+
testCase "Multicategory boxplot data" ( fun () ->
128+
"""var data = [{"type":"box","x":[["A","A","A","A","A","A","A"],["AA","AA","AA","AA","AA","AA","AA"]],"y":[1,1,2,3,4,3,2],"marker":{},"line":{}},{"type":"box","x":[["A","A","A","A","A","A","A"],["AB","AB","AB","AB","AB","AB","AB"]],"y":[1,1,2,3,4,3,2],"marker":{},"line":{}}];"""
129+
|> chartGeneratedContains multicategoryBoxPlot
130+
);
131+
testCase "Multicategory boxplot layout" ( fun () ->
132+
emptyLayout multicategoryBoxPlot
133+
);
134+
]
135+
136+
let multicategoryViolin =
137+
[
138+
Chart.Violin(
139+
Y = [1;1;2;3;4;3;2],
140+
MultiX = [["A"; "A"; "A"; "A"; "A"; "A"; "A"];["AA"; "AA"; "AA"; "AA"; "AA"; "AA"; "AA"]],
141+
UseDefaults = false
142+
)
143+
Chart.Violin(
144+
Y = [1;1;2;3;4;3;2],
145+
MultiX = [["A"; "A"; "A"; "A"; "A"; "A"; "A"];["AB"; "AB"; "AB"; "AB"; "AB"; "AB"; "AB"]],
146+
UseDefaults = false
147+
)
148+
]
149+
|> Chart.combine
150+
151+
[<Tests>]
152+
let ``Multicategory violin tests`` =
153+
testList "MulticategoryData.Violin" [
154+
testCase "Multicategory violin data" ( fun () ->
155+
"""[{"type":"violin","x":[["A","A","A","A","A","A","A"],["AA","AA","AA","AA","AA","AA","AA"]],"y":[1,1,2,3,4,3,2],"marker":{},"line":{},"box":{}},{"type":"violin","x":[["A","A","A","A","A","A","A"],["AB","AB","AB","AB","AB","AB","AB"]],"y":[1,1,2,3,4,3,2],"marker":{},"line":{},"box":{}}];"""
156+
|> chartGeneratedContains multicategoryViolin
157+
);
158+
testCase "Multicategory violin layout" ( fun () ->
159+
emptyLayout multicategoryViolin
160+
);
161+
]
162+
163+
let multicategoryHistogram2DContour =
164+
Chart.Histogram2DContour(
165+
MultiX = [["A";"A";"A";"B";"B"];["AA"; "AA"; "AB"; "BA"; "BB"]],
166+
MultiY = [["A";"A";"A";"B";"B"];["AA"; "AA"; "AB"; "BA"; "BB"]],
167+
UseDefaults = false
168+
)
169+
170+
[<Tests>]
171+
let ``Multicategory histogram2Dcontour tests`` =
172+
testList "MulticategoryData.Histogram2DContour" [
173+
testCase "Multicategory histogram2Dcontour data" ( fun () ->
174+
"""var data = [{"type":"histogram2dcontour","x":[["A","A","A","B","B"],["AA","AA","AB","BA","BB"]],"y":[["A","A","A","B","B"],["AA","AA","AB","BA","BB"]],"line":{}}];"""
175+
|> chartGeneratedContains multicategoryHistogram2DContour
176+
);
177+
testCase "Multicategory histogram2Dcontour layout" ( fun () ->
178+
emptyLayout multicategoryHistogram2DContour
179+
);
180+
]
181+
182+
let multicategoryHeatmap =
183+
Chart.Heatmap(
184+
zData = [
185+
[1;2;3]
186+
[2;3;1]
187+
[3;1;2]
188+
],
189+
MultiX = [["A";"A";"B"];["AA";"AB";"BA"]],
190+
MultiY = [["A";"A";"B"];["AA";"AB";"BA"]],
191+
UseDefaults = false
192+
)
193+
194+
[<Tests>]
195+
let ``Multicategory heatmap tests`` =
196+
testList "Multicategory.Heatmap" [
197+
testCase "Multicategory heatmap data" ( fun () ->
198+
"""var data = [{"type":"heatmap","x":[["A","A","B"],["AA","AB","BA"]],"y":[["A","A","B"],["AA","AB","BA"]],"z":[[1,2,3],[2,3,1],[3,1,2]]}];"""
199+
|> chartGeneratedContains multicategoryHeatmap
200+
);
201+
testCase "Multicategory heatmap layout" ( fun () ->
202+
emptyLayout multicategoryHeatmap
203+
);
204+
]
205+
206+
let multicategoryAnnotatedHeatmap =
207+
Chart.AnnotatedHeatmap(
208+
zData = [
209+
[1;2;3]
210+
[2;3;1]
211+
[3;1;2]
212+
],
213+
annotationText = [
214+
["A;AA x A;AA";"A;AA x A;AB";"A;AA x B;BA"]
215+
["A;AB x A;AA";"A;AB x A;AB";"A;AB x B;BA"]
216+
["B;BA x A;AA";"B;BA x A;AB";"B;BA x B;BA"]
217+
],
218+
MultiX = [["A";"A";"B"];["AA";"AB";"BA"]],
219+
MultiY = [["A";"A";"B"];["AA";"AB";"BA"]],
220+
UseDefaults = false
221+
)
222+
223+
[<Tests>]
224+
let ``Multicategory annotated heatmap tests`` =
225+
testList "MulticategoryData.AnnotatedHeatmap" [
226+
testCase "Multicategory annotated heatmap data" ( fun () ->
227+
"""var data = [{"type":"heatmap","x":[["A","A","B"],["AA","AB","BA"]],"y":[["A","A","B"],["AA","AB","BA"]],"z":[[1,2,3],[2,3,1],[3,1,2]]}];"""
228+
|> chartGeneratedContains multicategoryAnnotatedHeatmap
229+
);
230+
testCase "Multicategory annotated heatmap layout" ( fun () ->
231+
"""var layout = {"annotations":[{"x":0,"y":0,"showarrow":false,"text":"A;AA x A;AA"},{"x":1,"y":0,"showarrow":false,"text":"A;AA x A;AB"},{"x":2,"y":0,"showarrow":false,"text":"A;AA x B;BA"},{"x":0,"y":1,"showarrow":false,"text":"A;AB x A;AA"},{"x":1,"y":1,"showarrow":false,"text":"A;AB x A;AB"},{"x":2,"y":1,"showarrow":false,"text":"A;AB x B;BA"},{"x":0,"y":2,"showarrow":false,"text":"B;BA x A;AA"},{"x":1,"y":2,"showarrow":false,"text":"B;BA x A;AB"},{"x":2,"y":2,"showarrow":false,"text":"B;BA x B;BA"}]};"""
232+
|> chartGeneratedContains multicategoryAnnotatedHeatmap
233+
);
234+
]
235+
236+
let multicategoryContour =
237+
Chart.Contour(
238+
zData = [
239+
[1;2;3]
240+
[2;3;1]
241+
[3;1;2]
242+
],
243+
MultiX = [["A";"A";"B"];["AA";"AB";"BA"]],
244+
MultiY = [["A";"A";"B"];["AA";"AB";"BA"]],
245+
UseDefaults = false
246+
)
247+
248+
[<Tests>]
249+
let ``Multicategory contour tests`` =
250+
testList "MulticategoryData.Contour" [
251+
testCase "Multicategory contour data" ( fun () ->
252+
"""var data = [{"type":"contour","x":[["A","A","B"],["AA","AB","BA"]],"y":[["A","A","B"],["AA","AB","BA"]],"z":[[1,2,3],[2,3,1],[3,1,2]],"line":{},"contours":{}}];"""
253+
|> chartGeneratedContains multicategoryContour
254+
);
255+
testCase "Multicategory contour layout" ( fun () ->
256+
emptyLayout multicategoryContour
257+
);
258+
]
259+
260+
let multicategoryOHLC =
261+
Chart.OHLC(
262+
``open`` = [1;2],
263+
high = [3;4],
264+
low = [0;1],
265+
close = [0.5;1.],
266+
MultiX = [["A";"A"];["AA";"AB"]],
267+
UseDefaults = false
268+
)
269+
270+
[<Tests>]
271+
let ``Multicategory ohlc tests`` =
272+
testList "MulticategoryData.OHLC" [
273+
testCase "Multicategory ohlc data" ( fun () ->
274+
"""var data = [{"type":"ohlc","x":[["A","A"],["AA","AB"]],"close":[0.5,1.0],"open":[1,2],"high":[3,4],"low":[0,1],"increasing":{"marker":{},"line":{}},"decreasing":{"marker":{},"line":{}}}];"""
275+
|> chartGeneratedContains multicategoryOHLC
276+
);
277+
testCase "Multicategory ohlc layout" ( fun () ->
278+
emptyLayout multicategoryOHLC
279+
);
280+
]
281+
282+
let multicategoryCandlestick =
283+
Chart.Candlestick(
284+
``open`` = [1;2],
285+
high = [3;4],
286+
low = [0;1],
287+
close = [0.5;1.],
288+
MultiX = [["A";"A"];["AA";"AB"]],
289+
UseDefaults = false
290+
)
291+
292+
[<Tests>]
293+
let ``Multicategory candlestick tests`` =
294+
testList "MulticategoryData.Candlestick" [
295+
testCase "Multicategory candlestick data" ( fun () ->
296+
"""var data = [{"type":"candlestick","x":[["A","A"],["AA","AB"]],"close":[0.5,1.0],"open":[1,2],"high":[3,4],"low":[0,1],"increasing":{"marker":{},"line":{}},"decreasing":{"marker":{},"line":{}}}];"""
297+
|> chartGeneratedContains multicategoryCandlestick
298+
);
299+
testCase "Multicategory candlestick layout" ( fun () ->
300+
emptyLayout multicategoryCandlestick
301+
);
302+
]

tests/Plotly.NET.Tests/Plotly.NET.Tests.fsproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
<Compile Include="HtmlCodegen\CarpetCharts.fs" />
3333
<Compile Include="HtmlCodegen\CategoricalCharts.fs" />
3434
<Compile Include="HtmlCodegen\SmithCharts.fs" />
35+
<Compile Include="HtmlCodegen\MulticategoryData.fs" />
3536
<Compile Include="Main.fs" />
3637
</ItemGroup>
3738

0 commit comments

Comments
 (0)