-
-
Notifications
You must be signed in to change notification settings - Fork 194
/
ComputationExpressionTests.fs
115 lines (107 loc) · 2.71 KB
/
ComputationExpressionTests.fs
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
module Fantomas.Tests.CodeFormatterExtTests
open NUnit.Framework
open FsUnit
open Fantomas.Tests.TestHelper
[<Test>]
let ``async workflows``() =
formatSourceString false """
let fetchAsync(name, url:string) =
async {
try
let uri = new System.Uri(url)
let webClient = new WebClient()
let! html = webClient.AsyncDownloadString(uri)
printfn "Read %d characters for %s" html.Length name
with
| :? Exception -> ()
| ex -> printfn "%s" (ex.Message);
}
""" config
|> prepend newline
|> should equal """
let fetchAsync (name, url: string) =
async {
try
let uri = new System.Uri(url)
let webClient = new WebClient()
let! html = webClient.AsyncDownloadString(uri)
printfn "Read %d characters for %s" html.Length name
with
| :? Exception -> ()
| ex -> printfn "%s" (ex.Message)
}
"""
[<Test>]
let ``computation expressions``() =
formatSourceString false """
let comp =
eventually { for x in 1 .. 2 do
printfn " x = %d" x
return 3 + 4 }""" config
|> prepend newline
|> should equal """
let comp =
eventually {
for x in 1 .. 2 do
printfn " x = %d" x
return 3 + 4
}
"""
[<Test>]
let ``sequence expressions``() =
formatSourceString false """
let s1 = seq { for i in 1 .. 10 -> i * i }
let s2 = seq { 0 .. 10 .. 100 }
let rec inorder tree =
seq {
match tree with
| Tree(x, left, right) ->
yield! inorder left
yield x
yield! inorder right
| Leaf x -> yield x
}
""" config
|> prepend newline
|> should equal """
let s1 =
seq {
for i in 1 .. 10 -> i * i
}
let s2 = seq { 0 .. 10 .. 100 }
let rec inorder tree =
seq {
match tree with
| Tree(x, left, right) ->
yield! inorder left
yield x
yield! inorder right
| Leaf x -> yield x
}
"""
[<Test>]
let ``range expressions``() =
formatSourceString false """
let factors number =
{2L .. number / 2L}
|> Seq.filter (fun x -> number % x = 0L)""" config
|> prepend newline
|> should equal """
let factors number = { 2L .. number / 2L } |> Seq.filter (fun x -> number % x = 0L)
"""
[<Test>]
let ``match bang``() =
formatSourceString false """
async {
match! myAsyncFunction() with
| Some x -> printfn "%A" x
| None -> printfn "Function returned None!"
}""" config
|> prepend newline
|> should equal """
async {
match! myAsyncFunction() with
| Some x -> printfn "%A" x
| None -> printfn "Function returned None!"
}
"""