-
Notifications
You must be signed in to change notification settings - Fork 11
Expand file tree
/
Copy pathTaskSeq.FirstLastDefault.Tests.fs
More file actions
93 lines (76 loc) · 2.7 KB
/
TaskSeq.FirstLastDefault.Tests.fs
File metadata and controls
93 lines (76 loc) · 2.7 KB
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
module TaskSeq.Tests.FirstLastDefault
open Xunit
open FsUnit.Xunit
open FSharp.Control
//
// TaskSeq.firstOrDefault
// TaskSeq.lastOrDefault
//
module EmptySeq =
[<Fact>]
let ``Null source is invalid`` () =
assertNullArg <| fun () -> TaskSeq.firstOrDefault 0 null
assertNullArg <| fun () -> TaskSeq.lastOrDefault 0 null
[<Theory; ClassData(typeof<TestEmptyVariants>)>]
let ``TaskSeq-firstOrDefault returns default for empty`` variant = task {
let! result = Gen.getEmptyVariant variant |> TaskSeq.firstOrDefault 42
result |> should equal 42
}
[<Theory; ClassData(typeof<TestEmptyVariants>)>]
let ``TaskSeq-lastOrDefault returns default for empty`` variant = task {
let! result = Gen.getEmptyVariant variant |> TaskSeq.lastOrDefault 99
result |> should equal 99
}
[<Fact>]
let ``TaskSeq-firstOrDefault returns default with reference type`` () = task {
let! result = TaskSeq.empty<string> |> TaskSeq.firstOrDefault "hello"
result |> should equal "hello"
}
[<Fact>]
let ``TaskSeq-lastOrDefault returns default with reference type`` () = task {
let! result = TaskSeq.empty<string> |> TaskSeq.lastOrDefault "world"
result |> should equal "world"
}
module Immutable =
[<Theory; ClassData(typeof<TestImmTaskSeq>)>]
let ``TaskSeq-firstOrDefault returns first element`` variant = task {
let ts = Gen.getSeqImmutable variant
let! result = TaskSeq.firstOrDefault 0 ts
result |> should equal 1
}
[<Theory; ClassData(typeof<TestImmTaskSeq>)>]
let ``TaskSeq-lastOrDefault returns last element`` variant = task {
let ts = Gen.getSeqImmutable variant
let! result = TaskSeq.lastOrDefault 0 ts
result |> should equal 10
}
[<Fact>]
let ``TaskSeq-firstOrDefault does not use default when non-empty`` () = task {
let! result =
taskSeq {
yield 5
yield 6
}
|> TaskSeq.firstOrDefault -1
result |> should equal 5
}
[<Fact>]
let ``TaskSeq-lastOrDefault does not use default when non-empty`` () = task {
let! result =
taskSeq {
yield 5
yield 6
}
|> TaskSeq.lastOrDefault -1
result |> should equal 6
}
[<Fact>]
let ``TaskSeq-firstOrDefault with singleton`` () = task {
let! result = TaskSeq.singleton 42 |> TaskSeq.firstOrDefault 0
result |> should equal 42
}
[<Fact>]
let ``TaskSeq-lastOrDefault with singleton`` () = task {
let! result = TaskSeq.singleton 42 |> TaskSeq.lastOrDefault 0
result |> should equal 42
}