1
+ module SpiralOSS.FsShell.Testing.Command.SortTests
2
+
3
+ open Xunit
4
+ open System.Linq
5
+ open SpiralOSS.FsShell .Command .Sort
6
+
7
+ [<Fact>]
8
+ let ``Test Sort`` () =
9
+ let input = seq { " C" ; " B" ; " A" }
10
+ let expect = seq { " A" ; " B" ; " C" }
11
+ let actual = sort input
12
+ Assert.True( expect.SequenceEqual( actual))
13
+
14
+ [<Fact>]
15
+ let ``Test Sort Ignore Case`` () =
16
+ let input = seq { " C" ; " b" ; " A" }
17
+ let expect = seq { " A" ; " b" ; " C" }
18
+ let actual = sort input
19
+ Assert.True( expect.SequenceEqual( actual))
20
+
21
+ [<Fact>]
22
+ let ``Test Sort Range`` () =
23
+ let input = seq { " AC" ; " BB" ; " CA" }
24
+ let expect = seq { " CA" ; " BB" ; " AC" }
25
+ let actual = sort_ k ( Some 1 , Some 1 ) input
26
+ Assert.True( expect.SequenceEqual( actual))
27
+
28
+ [<Fact>]
29
+ let ``Test Sort Range Ignore Case`` () =
30
+ let input = seq { " AC" ; " Bb" ; " Ca" }
31
+ let expect = seq { " Ca" ; " Bb" ; " AC" }
32
+ let actual = sort_ k ( Some 1 , Some 1 ) input
33
+ Assert.True( expect.SequenceEqual( actual))
34
+
35
+ [<Fact>]
36
+ let ``Test Sort Number Range`` () =
37
+ let input = seq { " A31" ; " B21" ; " C11" }
38
+ let expect = seq { " C11" ; " B21" ; " A31" }
39
+ let actual = sort_ kn ( Some 1 , Some 2 ) input
40
+ Assert.True( expect.SequenceEqual( actual))
41
+
42
+ [<Fact>]
43
+ let ``Test XSort`` () =
44
+ let input = seq {
45
+ [| " Val 1-3" ; " Val 2-3" ; " Val 3-3" |]
46
+ [| " Col 1" ; " Col 2" ; " Col 3" |]
47
+ [| " Val 1-2" ; " Val 2-2" ; " Val 3-2" |]
48
+ [| " Val 1-1" ; " Val 2-1" ; " Val 3-1" |]
49
+ }
50
+ let expect = seq {
51
+ [| " Col 1" ; " Col 2" ; " Col 3" |]
52
+ [| " Val 1-1" ; " Val 2-1" ; " Val 3-1" |]
53
+ [| " Val 1-2" ; " Val 2-2" ; " Val 3-2" |]
54
+ [| " Val 1-3" ; " Val 2-3" ; " Val 3-3" |]
55
+ }
56
+ let actual = xsort [ 1 ] input
57
+ for ( expectRow, actualRow) in ( expect |> Seq.zip actual) do
58
+ Assert.True( expectRow.SequenceEqual( actualRow))
59
+
60
+ [<Fact>]
61
+ let ``Test XSort Multiple`` () =
62
+ let input = seq {
63
+ [| " Val 1-3" ; " Val B" ; " Val 3" |]
64
+ [| " Val 1-2" ; " Val A" ; " Val 2" |]
65
+ [| " Val 1-1" ; " Val A" ; " Val 1" |]
66
+ [| " Col 1" ; " Col 2" ; " Col 3" |]
67
+ }
68
+ let expect = seq {
69
+ [| " Col 1" ; " Col 2" ; " Col 3" |]
70
+ [| " Val 1-1" ; " Val A" ; " Val 1" |]
71
+ [| " Val 1-2" ; " Val A" ; " Val 2" |]
72
+ [| " Val 1-3" ; " Val B" ; " Val 3" |]
73
+ }
74
+ let actual = xsort [ 1 ; 2 ] input
75
+ for ( expectRow, actualRow) in ( expect |> Seq.zip actual) do
76
+ Assert.True( expectRow.SequenceEqual( actualRow))
77
+
78
+ [<Fact>]
79
+ let ``Test XSort Ignore Case`` () =
80
+ let input = [
81
+ [| " Col 1" ; " Col 2" ; " Col 3" |]
82
+ [| " Val 1-1" ; " val 1-1" ; " Val 3-1" |]
83
+ [| " Val 1-3" ; " val 2-3" ; " Val 3-3" |]
84
+ [| " Val 1-2" ; " Val 2-2" ; " Val 3-2" |]
85
+ ]
86
+ let expect = [
87
+ [| " Col 1" ; " Col 2" ; " Col 3" |]
88
+ [| " Val 1-1" ; " val 1-1" ; " Val 3-1" |]
89
+ [| " Val 1-2" ; " Val 2-2" ; " Val 3-2" |]
90
+ [| " Val 1-3" ; " val 2-3" ; " Val 3-3" |]
91
+ ]
92
+ let actual = xsort [ 1 ] input |> Seq.toList
93
+ for ( expectRow, actualRow) in ( expect |> Seq.zip actual) do
94
+ //printfn "YES:%A %A" expectRow actualRow
95
+ Assert.True( expectRow.SequenceEqual( actualRow))
96
+
97
+ [<Fact>]
98
+ let ``Test XSort Numeric`` () =
99
+ let input = seq {
100
+ [| " 3" ; " 3" |]
101
+ [| " 4" ; " 4" |]
102
+ [| " 1" ; " 1" |]
103
+ [| " 2" ; " 2" |]
104
+ }
105
+ let expect = seq {
106
+ [| " 1" ; " 1" |]
107
+ [| " 2" ; " 2" |]
108
+ [| " 3" ; " 3" |]
109
+ [| " 4" ; " 4" |]
110
+ }
111
+ let actual = xsort_ n [ 1 ] input
112
+ for ( expectRow, actualRow) in ( expect |> Seq.zip actual) do
113
+ Assert.True( expectRow.SequenceEqual( actualRow))
114
+
115
+ [<Fact>]
116
+ let ``Test XSort Numeric Multiple`` () =
117
+ let input = [
118
+ [| " 4" ; " 3" ; " 10" |]
119
+ [| " 4" ; " 4" ; " 10" |]
120
+ [| " 1" ; " 1" ; " 00" |]
121
+ [| " 4" ; " 4" ; " 20" |]
122
+ [| " 2" ; " 1" ; " 10" |]
123
+ [| " 3" ; " 1" ; " 20" |]
124
+ [| " 4" ; " 2" ; " 00" |]
125
+ ]
126
+ let expect = [
127
+ [| " 1" ; " 1" ; " 00" |]
128
+ [| " 2" ; " 1" ; " 10" |]
129
+ [| " 3" ; " 1" ; " 20" |]
130
+ [| " 4" ; " 2" ; " 00" |]
131
+ [| " 4" ; " 3" ; " 10" |]
132
+ [| " 4" ; " 4" ; " 10" |]
133
+ [| " 4" ; " 4" ; " 20" |]
134
+ ]
135
+ let actual = xsort_ n [ 1 ; 2 ] input |> Seq.toArray
136
+ for ( expectRow, actualRow) in ( expect |> Seq.zip actual) do
137
+ Assert.True( expectRow.SequenceEqual( actualRow))
138
+
139
+ [<Fact>]
140
+ let ``Test XSort Mixed`` () =
141
+ let input = [
142
+ [| " 4" ; " C" ; " 10" |]
143
+ [| " 4" ; " D" ; " 10" |]
144
+ [| " 1" ; " A" ; " 00" |]
145
+ [| " 4" ; " D" ; " 20" |]
146
+ [| " 2" ; " A" ; " 10" |]
147
+ [| " 3" ; " A" ; " 20" |]
148
+ [| " 4" ; " B" ; " 00" |]
149
+ ]
150
+ let expect = [
151
+ [| " 1" ; " A" ; " 00" |]
152
+ [| " 2" ; " A" ; " 10" |]
153
+ [| " 3" ; " A" ; " 20" |]
154
+ [| " 4" ; " B" ; " 00" |]
155
+ [| " 4" ; " C" ; " 10" |]
156
+ [| " 4" ; " D" ; " 10" |]
157
+ [| " 4" ; " D" ; " 20" |]
158
+ ]
159
+ let actual = xsort' [ ( 1 , String); ( 2 , Numeric) ] input |> Seq.toArray
160
+ for ( expectRow, actualRow) in ( expect |> Seq.zip actual) do
161
+ Assert.True( expectRow.SequenceEqual( actualRow))
0 commit comments