@@ -4,7 +4,6 @@ module Unison.Test.Util.Text where
4
4
5
5
import Control.Monad
6
6
import Data.List (foldl' , unfoldr )
7
- import Data.Maybe (isNothing )
8
7
import Data.Text qualified as T
9
8
import EasyTest
10
9
import Unison.Util.Rope qualified as R
@@ -14,20 +13,20 @@ import Unison.Util.Text.Pattern qualified as P
14
13
test :: Test ()
15
14
test =
16
15
scope " util.text" . tests $
17
- [ scope " empty ==" . expect $ Text. empty == Text. empty,
18
- scope " empty `compare`" . expect $ Text. empty `compare` Text. empty == EQ ,
16
+ [ scope " empty ==" $ expectEqual Text. empty Text. empty,
17
+ scope " empty `compare`" . expectEqual EQ $ Text. empty `compare` Text. empty,
19
18
scope " ==" . expect $
20
19
let a = join (replicate 100 [' a' .. ' z' ])
21
20
b = join (replicate 45 [' A' .. ' Z' ])
22
21
in (Text. pack a <> Text. pack b) == Text. pack (a ++ b),
23
22
scope " at" $ do
24
- expect ' (Text. at 0 (Text. pack " abc" ) == Just ' a ' )
25
- expect' ( Text. at 0 mempty == Nothing )
23
+ expectEqual ' (Just ' a ' ) $ Text. at 0 (Text. pack " abc" )
24
+ expectEqual' Nothing $ Text. at 0 mempty
26
25
ok,
27
26
scope " at.cornerCases" $ do
28
27
let b = Text. drop 3 $ " abc" <> " def"
29
- expect ' (Text. at 0 b == Just ' d ' )
30
- expect ' (Text. at 0 (mempty <> " abc" ) == Just ' a ' )
28
+ expectEqual ' (Just ' d ' ) $ Text. at 0 b
29
+ expectEqual ' (Just ' a ' ) $ Text. at 0 (mempty <> " abc" )
31
30
ok,
32
31
scope " consistency with Text" $ do
33
32
forM_ [(1 :: Int ) .. 100 ] $ \ _ -> do
62
61
let bs = t1s <> t2s <> t3s
63
62
b = t1 <> t2 <> t3
64
63
in forM_ [0 .. (T. length b - 1 )] $ \ ind ->
65
- expect' $ Just (T. index b ind) == Text. at ind bs
64
+ expectEqual' ( Just (T. index b ind)) $ Text. at ind bs
66
65
ok,
67
66
scope " lots of chunks" $ do
68
67
forM_ [(0 :: Int ) .. 25 ] $ \ _ -> do
74
73
b3 = foldl' (<>) mempty (Text. pack <$> chunks)
75
74
b = T. concat (T. pack <$> chunks)
76
75
expect' $ b1 == b2 && b2 == b3
77
- expect' $ Text. toText b1 == b
78
- expect' $ Text. toText b2 == b
79
- expect' $ Text. toText b3 == b
76
+ expectEqual' b $ Text. toText b1
77
+ expectEqual' b $ Text. toText b2
78
+ expectEqual' b $ Text. toText b3
80
79
ok,
81
80
scope " depth checks" $ do
82
81
chunk <- Text. pack <$> replicateM 1000 char
@@ -102,38 +101,58 @@ test =
102
101
expect' (maxDepth < log2 (i * n) * 2 )
103
102
ok,
104
103
scope " patterns" $ do
105
- expect ' (P. run P. Eof " " == Just ([] , " " ))
106
- expect ' (P. run (P. Char P. Any ) " a" == Just ( [] , " " ))
107
- expect ' (P. run (P. Char (P. CharRange ' a' ' z' )) " a" == Just ( [] , " " ))
108
- expect' . isNothing $ P. run (P. Char (P. Not (P. CharRange ' a' ' z' ))) " a"
109
- expect ' (P. run (P. Or (P. Char (P. Not (P. CharRange ' a' ' z' ))) (P. Char P. Any )) " abc" == Just ( [] , " bc " ))
104
+ expectEqual ' (Just ([] , " " )) $ P. run P. Eof " "
105
+ expectEqual ' (Just ( [] , " " )) $ P. run (P. Char P. Any ) " a"
106
+ expectEqual ' (Just ( [] , " " )) $ P. run (P. Char (P. CharRange ' a' ' z' )) " a"
107
+ expectEqual' Nothing $ P. run (P. Char (P. Not (P. CharRange ' a' ' z' ))) " a"
108
+ expectEqual ' (Just ( [] , " bc " )) $ P. run (P. Or (P. Char (P. Not (P. CharRange ' a' ' z' ))) (P. Char P. Any )) " abc"
110
109
-- this shows that we ignore subcaptures
111
- expect' (P. run (P. Join [P. Capture (P. Join [P. Capture (P. Char P. Any ), P. Capture (P. Char P. Any )]), P. Char P. Any ]) " abcdef" == Just ([" ab" ], " def" ))
112
- expect' (P. run (P. Char (P. CharSet " 0123" )) " 3ab" == Just ([] , " ab" ))
113
- expect' (P. run (P. Char (P. Not (P. CharSet " 0123" ))) " a3b" == Just ([] , " 3b" ))
114
- expect' (P. run (P. Capture (P. Char (P. Not (P. CharSet " 0123" )))) " a3b" == Just ([" a" ], " 3b" ))
115
- expect' (P. run (P. Many True (P. Char (P. CharSet " abcd" ))) " babbababac123" == Just ([] , " 123" ))
116
- expect' (P. run (P. Capture (P. Many True (P. Char (P. CharSet " abcd" )))) " babbababac123" == Just ([" babbababac" ], " 123" ))
117
- expect' (P. run (P. Capture (P. Many True (P. Char (P. CharClass P. Number )))) " 012345abc" == Just ([" 012345" ], " abc" ))
118
- expect' (P. run (P. Join [P. Capture (P. Many True (P. Char (P. CharClass P. Number ))), P. Literal " ," , P. Capture (P. Many True (P. Char P. Any ))]) " 012345,abc" == Just ([" 012345" , " abc" ], " " ))
119
- expect'
120
- ( P. run (P. Many True (P. Join [P. Capture (P. Many True (P. Char (P. CharClass P. Number ))), P. Many True (P. Char (P. CharClass P. Whitespace ))])) " 01 10 20 1123 292 110 10"
121
- == Just ([" 01" , " 10" , " 20" , " 1123" , " 292" , " 110" , " 10" ], " " )
122
- )
123
- expect' $
110
+ expectEqual' (Just ([" ab" ], " def" )) $
111
+ P. run
112
+ (P. Join [P. Capture (P. Join [P. Capture (P. Char P. Any ), P. Capture (P. Char P. Any )]), P. Char P. Any ])
113
+ " abcdef"
114
+ expectEqual' (Just ([] , " ab" )) $ P. run (P. Char (P. CharSet " 0123" )) " 3ab"
115
+ expectEqual' (Just ([] , " 3b" )) $ P. run (P. Char (P. Not (P. CharSet " 0123" ))) " a3b"
116
+ expectEqual' (Just ([" a" ], " 3b" )) $ P. run (P. Capture (P. Char (P. Not (P. CharSet " 0123" )))) " a3b"
117
+ expectEqual' (Just ([] , " 123" )) $ P. run (P. Many True (P. Char (P. CharSet " abcd" ))) " babbababac123"
118
+ expectEqual' (Just ([" babbababac" ], " 123" )) $
119
+ P. run (P. Capture (P. Many True (P. Char (P. CharSet " abcd" )))) " babbababac123"
120
+ expectEqual' (Just ([" 012345" ], " abc" )) $
121
+ P. run (P. Capture (P. Many True (P. Char (P. CharClass P. Number )))) " 012345abc"
122
+ expectEqual' (Just ([" 012345" , " abc" ], " " )) $
123
+ P. run
124
+ ( P. Join
125
+ [ P. Capture (P. Many True (P. Char (P. CharClass P. Number ))),
126
+ P. Literal " ," ,
127
+ P. Capture (P. Many True (P. Char P. Any ))
128
+ ]
129
+ )
130
+ " 012345,abc"
131
+ expectEqual' (Just ([" 01" , " 10" , " 20" , " 1123" , " 292" , " 110" , " 10" ], " " )) $
132
+ P. run
133
+ ( P. Many
134
+ True
135
+ ( P. Join
136
+ [ P. Capture (P. Many True (P. Char (P. CharClass P. Number ))),
137
+ P. Many True (P. Char (P. CharClass P. Whitespace ))
138
+ ]
139
+ )
140
+ )
141
+ " 01 10 20 1123 292 110 10"
142
+ expectEqual' (Just ([" 127" , " 0" , " 0" , " 1" ], " " )) $
124
143
let part = P. Capture (P. Replicate 1 3 (P. Char (P. CharClass P. Number )))
125
144
dpart = P. Join [P. Literal " ." , part]
126
145
ip = P. Join [part, P. Replicate 3 3 dpart, P. Eof ]
127
- in P. run ip " 127.0.0.1" == Just ([ " 127 " , " 0 " , " 0 " , " 1 " ], " " )
128
- expect' $
146
+ in P. run ip " 127.0.0.1"
147
+ expectEqual' ( Just ([ " 1 " , " 2 " , " 3 " , " 4 " , " 5 " ], " " )) $
129
148
let p = P. Replicate 5 8 (P. Capture (P. Char (P. CharClass P. Number )))
130
- in P. run p " 12345" == Just ([ " 1 " , " 2 " , " 3 " , " 4 " , " 5 " ], " " )
131
- expect' $
149
+ in P. run p " 12345"
150
+ expectEqual' ( Just ( [] , " 1234 " )) $
132
151
let p = P. Replicate 5 8 (P. Capture (P. Char (P. CharClass P. Number ))) `P. Or ` P. Join []
133
- in P. run p " 1234" == Just ( [] , " 1234 " )
134
- expect' $
152
+ in P. run p " 1234"
153
+ expectEqual' ( Just ([ " 1z " , " 2z " , " 3z " , " 4z " , " 5z " ], " 6a " )) $
135
154
let p = P. Replicate 5 8 (P. Capture (P. Join [P. Char (P. CharClass P. Number ), P. Literal " z" ])) `P. Or ` P. Join []
136
- in P. run p " 1z2z3z4z5z6a" == Just ([ " 1z " , " 2z " , " 3z " , " 4z " , " 5z " ], " 6a " )
155
+ in P. run p " 1z2z3z4z5z6a"
137
156
-- https://github.com/unisonweb/unison/issues/3530
138
157
expectEqual Nothing $
139
158
let p =
@@ -178,26 +197,27 @@ test =
178
197
in P. run p " zzzaaa!!!"
179
198
ok,
180
199
scope " ordinal" do
181
- expectEqual (Text. ordinal 1 ) (" 1st" :: String )
182
- expectEqual (Text. ordinal 2 ) (" 2nd" :: String )
183
- expectEqual (Text. ordinal 3 ) (" 3rd" :: String )
184
- expectEqual (Text. ordinal 4 ) (" 4th" :: String )
185
- expectEqual (Text. ordinal 5 ) (" 5th" :: String )
186
- expectEqual (Text. ordinal 10 ) (" 10th" :: String )
187
- expectEqual (Text. ordinal 11 ) (" 11th" :: String )
188
- expectEqual (Text. ordinal 12 ) (" 12th" :: String )
189
- expectEqual (Text. ordinal 13 ) (" 13th" :: String )
190
- expectEqual (Text. ordinal 14 ) (" 14th" :: String )
191
- expectEqual (Text. ordinal 21 ) (" 21st" :: String )
192
- expectEqual (Text. ordinal 22 ) (" 22nd" :: String )
193
- expectEqual (Text. ordinal 23 ) (" 23rd" :: String )
194
- expectEqual (Text. ordinal 24 ) (" 24th" :: String )
195
- expectEqual (Text. ordinal 111 ) (" 111th" :: String )
196
- expectEqual (Text. ordinal 112 ) (" 112th" :: String )
197
- expectEqual (Text. ordinal 113 ) (" 113th" :: String )
198
- expectEqual (Text. ordinal 121 ) (" 121st" :: String )
199
- expectEqual (Text. ordinal 122 ) (" 122nd" :: String )
200
- expectEqual (Text. ordinal 123 ) (" 123rd" :: String )
200
+ let expectOrdinal = \ ord -> expectEqual @ String ord . Text. ordinal
201
+ expectOrdinal " 1st" 1
202
+ expectOrdinal " 2nd" 2
203
+ expectOrdinal " 3rd" 3
204
+ expectOrdinal " 4th" 4
205
+ expectOrdinal " 5th" 5
206
+ expectOrdinal " 10th" 10
207
+ expectOrdinal " 11th" 11
208
+ expectOrdinal " 12th" 12
209
+ expectOrdinal " 13th" 13
210
+ expectOrdinal " 14th" 14
211
+ expectOrdinal " 21st" 21
212
+ expectOrdinal " 22nd" 22
213
+ expectOrdinal " 23rd" 23
214
+ expectOrdinal " 24th" 24
215
+ expectOrdinal " 111th" 111
216
+ expectOrdinal " 112th" 112
217
+ expectOrdinal " 113th" 113
218
+ expectOrdinal " 121st" 121
219
+ expectOrdinal " 122nd" 122
220
+ expectOrdinal " 123rd" 123
201
221
]
202
222
where
203
223
log2 :: Int -> Int
0 commit comments