xref: /vim-8.2.3635/src/testdir/test_sort.vim (revision c04f6234)
1dc9e955fSBram Moolenaar" Tests for the "sort()" function and for the ":sort" command.
2b00da1d6SBram Moolenaar
35feabe00SBram Moolenaarsource check.vim
45feabe00SBram Moolenaar
5dc9e955fSBram Moolenaarfunc Compare1(a, b) abort
60b962473SBram Moolenaar  call sort(range(3), 'Compare2')
70bb6108eSBram Moolenaar  return a:a - a:b
8dc9e955fSBram Moolenaarendfunc
90b962473SBram Moolenaar
10dc9e955fSBram Moolenaarfunc Compare2(a, b) abort
110bb6108eSBram Moolenaar  return a:a - a:b
12dc9e955fSBram Moolenaarendfunc
130b962473SBram Moolenaar
14b00da1d6SBram Moolenaarfunc Test_sort_strings()
15b00da1d6SBram Moolenaar  " numbers compared as strings
16b00da1d6SBram Moolenaar  call assert_equal([1, 2, 3], sort([3, 2, 1]))
17b00da1d6SBram Moolenaar  call assert_equal([13, 28, 3], sort([3, 28, 13]))
1855e29611SBram Moolenaar
19cec77d45SBram Moolenaar  call assert_equal(['A', 'O', 'P', 'a', 'o', 'p', 'Ä', 'Ô', 'ä', 'ô', 'Œ', 'œ'],
20cec77d45SBram Moolenaar  \            sort(['A', 'O', 'P', 'a', 'o', 'p', 'Ä', 'Ô', 'ä', 'ô', 'œ', 'Œ']))
2155e29611SBram Moolenaar
22cec77d45SBram Moolenaar  call assert_equal(['A', 'a', 'o', 'O', 'p', 'P', 'Ä', 'Ô', 'ä', 'ô', 'Œ', 'œ'],
23cec77d45SBram Moolenaar  \            sort(['A', 'a', 'o', 'O', 'œ', 'Œ', 'p', 'P', 'Ä', 'ä', 'ô', 'Ô'], 'i'))
2455e29611SBram Moolenaar
25578f4cc7SBram Moolenaar  " This does not appear to work correctly on Mac.
26578f4cc7SBram Moolenaar  if !has('mac')
27cec77d45SBram Moolenaar    if v:collate =~? '^\(en\|fr\)_ca.utf-\?8$'
28fefa6c34SBram Moolenaar      " with Canadian English capitals come before lower case.
29cec77d45SBram Moolenaar      " 'Œ' is omitted because it can sort before or after 'œ'
30cec77d45SBram Moolenaar      call assert_equal(['A', 'a', 'Ä', 'ä', 'O', 'o', 'Ô', 'ô', 'œ', 'P', 'p'],
31cec77d45SBram Moolenaar      \            sort(['A', 'a', 'o', 'O', 'œ', 'p', 'P', 'Ä', 'ä', 'ô', 'Ô'], 'l'))
32fefa6c34SBram Moolenaar    elseif v:collate =~? '^\(en\|es\|de\|fr\|it\|nl\).*\.utf-\?8$'
3355e29611SBram Moolenaar      " With the following locales, the accentuated letters are ordered
3455e29611SBram Moolenaar      " similarly to the non-accentuated letters...
35cec77d45SBram Moolenaar      call assert_equal(['a', 'A', 'ä', 'Ä', 'o', 'O', 'ô', 'Ô', 'œ', 'Œ', 'p', 'P'],
36cec77d45SBram Moolenaar      \            sort(['A', 'a', 'o', 'O', 'œ', 'Œ', 'p', 'P', 'Ä', 'ä', 'ô', 'Ô'], 'l'))
37fefa6c34SBram Moolenaar    elseif v:collate =~? '^sv.*utf-\?8$'
3855e29611SBram Moolenaar      " ... whereas with a Swedish locale, the accentuated letters are ordered
3955e29611SBram Moolenaar      " after Z.
4055e29611SBram Moolenaar      call assert_equal(['a', 'A', 'o', 'O', 'p', 'P', 'ä', 'Ä', 'œ', 'œ', 'ô', 'Ô'],
4155e29611SBram Moolenaar      \            sort(['A', 'a', 'o', 'O', 'œ', 'œ', 'p', 'P', 'Ä', 'ä', 'ô', 'Ô'], 'l'))
4255e29611SBram Moolenaar    endif
43578f4cc7SBram Moolenaar  endif
44b00da1d6SBram Moolenaarendfunc
45b00da1d6SBram Moolenaar
4635efa22fSBram Moolenaarfunc Test_sort_null_string()
4735efa22fSBram Moolenaar  " null strings are sorted as empty strings.
4835efa22fSBram Moolenaar  call assert_equal(['', 'a', 'b'], sort(['b', test_null_string(), 'a']))
4935efa22fSBram Moolenaarendfunc
5035efa22fSBram Moolenaar
51b00da1d6SBram Moolenaarfunc Test_sort_numeric()
52b00da1d6SBram Moolenaar  call assert_equal([1, 2, 3], sort([3, 2, 1], 'n'))
53b00da1d6SBram Moolenaar  call assert_equal([3, 13, 28], sort([13, 28, 3], 'n'))
54b00da1d6SBram Moolenaar  " strings are not sorted
55b00da1d6SBram Moolenaar  call assert_equal(['13', '28', '3'], sort(['13', '28', '3'], 'n'))
56b00da1d6SBram Moolenaarendfunc
57b00da1d6SBram Moolenaar
58b00da1d6SBram Moolenaarfunc Test_sort_numbers()
59b00da1d6SBram Moolenaar  call assert_equal([3, 13, 28], sort([13, 28, 3], 'N'))
60b00da1d6SBram Moolenaar  call assert_equal(['3', '13', '28'], sort(['13', '28', '3'], 'N'))
61*c04f6234SYasuhiro Matsumoto  call assert_equal([3997, 4996], sort([4996, 3997], 'Compare1'))
62b00da1d6SBram Moolenaarendfunc
63f7edf404SBram Moolenaar
64f7edf404SBram Moolenaarfunc Test_sort_float()
655feabe00SBram Moolenaar  CheckFeature float
66f7edf404SBram Moolenaar  call assert_equal([0.28, 3, 13.5], sort([13.5, 0.28, 3], 'f'))
67f7edf404SBram Moolenaarendfunc
680b962473SBram Moolenaar
690b962473SBram Moolenaarfunc Test_sort_nested()
700b962473SBram Moolenaar  " test ability to call sort() from a compare function
710b962473SBram Moolenaar  call assert_equal([1, 3, 5], sort([3, 1, 5], 'Compare1'))
720b962473SBram Moolenaarendfunc
735131c144SBram Moolenaar
745131c144SBram Moolenaarfunc Test_sort_default()
755feabe00SBram Moolenaar  CheckFeature float
765feabe00SBram Moolenaar
775131c144SBram Moolenaar  " docs say omitted, empty or zero argument sorts on string representation.
7851d1d536SBram Moolenaar  call assert_equal(['2', 'A', 'AA', 'a', 1, 3.3], sort([3.3, 1, "2", "A", "a", "AA"]))
7951d1d536SBram Moolenaar  call assert_equal(['2', 'A', 'AA', 'a', 1, 3.3], sort([3.3, 1, "2", "A", "a", "AA"], ''))
8051d1d536SBram Moolenaar  call assert_equal(['2', 'A', 'AA', 'a', 1, 3.3], sort([3.3, 1, "2", "A", "a", "AA"], 0))
8151d1d536SBram Moolenaar  call assert_equal(['2', 'A', 'a', 'AA', 1, 3.3], sort([3.3, 1, "2", "A", "a", "AA"], 1))
8208f4157cSBram Moolenaar  call assert_fails('call sort([3.3, 1, "2"], 3)', "E474:")
835131c144SBram Moolenaarendfunc
84bb3e6416SBram Moolenaar
85dc9e955fSBram Moolenaar" Tests for the ":sort" command.
86bb3e6416SBram Moolenaarfunc Test_sort_cmd()
87bb3e6416SBram Moolenaar  let tests = [
88bb3e6416SBram Moolenaar	\ {
89bb3e6416SBram Moolenaar	\    'name' : 'Alphabetical sort',
90bb3e6416SBram Moolenaar	\    'cmd' : '%sort',
91bb3e6416SBram Moolenaar	\    'input' : [
92bb3e6416SBram Moolenaar	\	'abc',
93bb3e6416SBram Moolenaar	\	'ab',
94bb3e6416SBram Moolenaar	\	'a',
95bb3e6416SBram Moolenaar	\	'a321',
96bb3e6416SBram Moolenaar	\	'a123',
97bb3e6416SBram Moolenaar	\	'a122',
98bb3e6416SBram Moolenaar	\	'b321',
99bb3e6416SBram Moolenaar	\	'b123',
100bb3e6416SBram Moolenaar	\	'c123d',
101bb3e6416SBram Moolenaar	\	' 123b',
102bb3e6416SBram Moolenaar	\	'c321d',
103bb3e6416SBram Moolenaar	\	'b322b',
104bb3e6416SBram Moolenaar	\	'b321',
105bb3e6416SBram Moolenaar	\	'b321b'
106bb3e6416SBram Moolenaar	\    ],
107bb3e6416SBram Moolenaar	\    'expected' : [
108bb3e6416SBram Moolenaar	\	' 123b',
109bb3e6416SBram Moolenaar	\	'a',
110bb3e6416SBram Moolenaar	\	'a122',
111bb3e6416SBram Moolenaar	\	'a123',
112bb3e6416SBram Moolenaar	\	'a321',
113bb3e6416SBram Moolenaar	\	'ab',
114bb3e6416SBram Moolenaar	\	'abc',
115bb3e6416SBram Moolenaar	\	'b123',
116bb3e6416SBram Moolenaar	\	'b321',
117bb3e6416SBram Moolenaar	\	'b321',
118bb3e6416SBram Moolenaar	\	'b321b',
119bb3e6416SBram Moolenaar	\	'b322b',
120bb3e6416SBram Moolenaar	\	'c123d',
121bb3e6416SBram Moolenaar	\	'c321d'
122bb3e6416SBram Moolenaar	\    ]
123bb3e6416SBram Moolenaar	\ },
124bb3e6416SBram Moolenaar	\ {
125bb3e6416SBram Moolenaar	\    'name' : 'Numeric sort',
126bb3e6416SBram Moolenaar	\    'cmd' : '%sort n',
127bb3e6416SBram Moolenaar	\    'input' : [
128bb3e6416SBram Moolenaar	\	'abc',
129bb3e6416SBram Moolenaar	\	'ab',
130bb3e6416SBram Moolenaar	\	'a321',
131bb3e6416SBram Moolenaar	\	'a123',
132bb3e6416SBram Moolenaar	\	'a122',
133bb3e6416SBram Moolenaar	\	'a',
134bb3e6416SBram Moolenaar	\	'x-22',
135bb3e6416SBram Moolenaar	\	'b321',
136bb3e6416SBram Moolenaar	\	'b123',
137bb3e6416SBram Moolenaar	\	'',
138bb3e6416SBram Moolenaar	\	'c123d',
139bb3e6416SBram Moolenaar	\	'-24',
140bb3e6416SBram Moolenaar	\	' 123b',
141bb3e6416SBram Moolenaar	\	'c321d',
142bb3e6416SBram Moolenaar	\	'0',
143bb3e6416SBram Moolenaar	\	'b322b',
144bb3e6416SBram Moolenaar	\	'b321',
145bb3e6416SBram Moolenaar	\	'b321b'
146bb3e6416SBram Moolenaar	\    ],
147bb3e6416SBram Moolenaar	\    'expected' : [
148bb3e6416SBram Moolenaar	\	'abc',
149bb3e6416SBram Moolenaar	\	'ab',
150bb3e6416SBram Moolenaar	\	'a',
151bb3e6416SBram Moolenaar	\	'',
152bb3e6416SBram Moolenaar	\	'-24',
153bb3e6416SBram Moolenaar	\	'x-22',
154bb3e6416SBram Moolenaar	\	'0',
155bb3e6416SBram Moolenaar	\	'a122',
156bb3e6416SBram Moolenaar	\	'a123',
157bb3e6416SBram Moolenaar	\	'b123',
158bb3e6416SBram Moolenaar	\	'c123d',
159bb3e6416SBram Moolenaar	\	' 123b',
160bb3e6416SBram Moolenaar	\	'a321',
161bb3e6416SBram Moolenaar	\	'b321',
162bb3e6416SBram Moolenaar	\	'c321d',
163bb3e6416SBram Moolenaar	\	'b321',
164bb3e6416SBram Moolenaar	\	'b321b',
165bb3e6416SBram Moolenaar	\	'b322b'
166bb3e6416SBram Moolenaar	\    ]
167bb3e6416SBram Moolenaar	\ },
168bb3e6416SBram Moolenaar	\ {
169bb3e6416SBram Moolenaar	\    'name' : 'Hexadecimal sort',
170bb3e6416SBram Moolenaar	\    'cmd' : '%sort x',
171bb3e6416SBram Moolenaar	\    'input' : [
172bb3e6416SBram Moolenaar	\	'abc',
173bb3e6416SBram Moolenaar	\	'ab',
174bb3e6416SBram Moolenaar	\	'a',
175bb3e6416SBram Moolenaar	\	'a321',
176bb3e6416SBram Moolenaar	\	'a123',
177bb3e6416SBram Moolenaar	\	'a122',
178bb3e6416SBram Moolenaar	\	'b321',
179bb3e6416SBram Moolenaar	\	'b123',
180bb3e6416SBram Moolenaar	\	'c123d',
181bb3e6416SBram Moolenaar	\	' 123b',
182bb3e6416SBram Moolenaar	\	'c321d',
183bb3e6416SBram Moolenaar	\	'b322b',
184bb3e6416SBram Moolenaar	\	'b321',
185bb3e6416SBram Moolenaar	\	'b321b'
186bb3e6416SBram Moolenaar	\    ],
187bb3e6416SBram Moolenaar	\    'expected' : [
188bb3e6416SBram Moolenaar	\	'a',
189bb3e6416SBram Moolenaar	\	'ab',
190bb3e6416SBram Moolenaar	\	'abc',
191bb3e6416SBram Moolenaar	\	' 123b',
192bb3e6416SBram Moolenaar	\	'a122',
193bb3e6416SBram Moolenaar	\	'a123',
194bb3e6416SBram Moolenaar	\	'a321',
195bb3e6416SBram Moolenaar	\	'b123',
196bb3e6416SBram Moolenaar	\	'b321',
197bb3e6416SBram Moolenaar	\	'b321',
198bb3e6416SBram Moolenaar	\	'b321b',
199bb3e6416SBram Moolenaar	\	'b322b',
200bb3e6416SBram Moolenaar	\	'c123d',
201bb3e6416SBram Moolenaar	\	'c321d'
202bb3e6416SBram Moolenaar	\    ]
203bb3e6416SBram Moolenaar	\ },
204bb3e6416SBram Moolenaar	\ {
205bb3e6416SBram Moolenaar	\    'name' : 'Alphabetical unique sort',
206bb3e6416SBram Moolenaar	\    'cmd' : '%sort u',
207bb3e6416SBram Moolenaar	\    'input' : [
208bb3e6416SBram Moolenaar	\	'abc',
209bb3e6416SBram Moolenaar	\	'ab',
210bb3e6416SBram Moolenaar	\	'a',
211bb3e6416SBram Moolenaar	\	'a321',
212bb3e6416SBram Moolenaar	\	'a123',
213bb3e6416SBram Moolenaar	\	'a122',
214bb3e6416SBram Moolenaar	\	'b321',
215bb3e6416SBram Moolenaar	\	'b123',
216bb3e6416SBram Moolenaar	\	'c123d',
217bb3e6416SBram Moolenaar	\	' 123b',
218bb3e6416SBram Moolenaar	\	'c321d',
219bb3e6416SBram Moolenaar	\	'b322b',
220bb3e6416SBram Moolenaar	\	'b321',
221bb3e6416SBram Moolenaar	\	'b321b'
222bb3e6416SBram Moolenaar	\    ],
223bb3e6416SBram Moolenaar	\    'expected' : [
224bb3e6416SBram Moolenaar	\	' 123b',
225bb3e6416SBram Moolenaar	\	'a',
226bb3e6416SBram Moolenaar	\	'a122',
227bb3e6416SBram Moolenaar	\	'a123',
228bb3e6416SBram Moolenaar	\	'a321',
229bb3e6416SBram Moolenaar	\	'ab',
230bb3e6416SBram Moolenaar	\	'abc',
231bb3e6416SBram Moolenaar	\	'b123',
232bb3e6416SBram Moolenaar	\	'b321',
233bb3e6416SBram Moolenaar	\	'b321b',
234bb3e6416SBram Moolenaar	\	'b322b',
235bb3e6416SBram Moolenaar	\	'c123d',
236bb3e6416SBram Moolenaar	\	'c321d'
237bb3e6416SBram Moolenaar	\    ]
238bb3e6416SBram Moolenaar	\ },
239bb3e6416SBram Moolenaar	\ {
240bb3e6416SBram Moolenaar	\    'name' : 'Alphabetical reverse sort',
241bb3e6416SBram Moolenaar	\    'cmd' : '%sort!',
242bb3e6416SBram Moolenaar	\    'input' : [
243bb3e6416SBram Moolenaar	\	'abc',
244bb3e6416SBram Moolenaar	\	'ab',
245bb3e6416SBram Moolenaar	\	'a',
246bb3e6416SBram Moolenaar	\	'a321',
247bb3e6416SBram Moolenaar	\	'a123',
248bb3e6416SBram Moolenaar	\	'a122',
249bb3e6416SBram Moolenaar	\	'b321',
250bb3e6416SBram Moolenaar	\	'b123',
251bb3e6416SBram Moolenaar	\	'c123d',
252bb3e6416SBram Moolenaar	\	' 123b',
253bb3e6416SBram Moolenaar	\	'c321d',
254bb3e6416SBram Moolenaar	\	'b322b',
255bb3e6416SBram Moolenaar	\	'b321',
256bb3e6416SBram Moolenaar	\	'b321b'
257bb3e6416SBram Moolenaar	\    ],
258bb3e6416SBram Moolenaar	\    'expected' : [
259bb3e6416SBram Moolenaar	\	'c321d',
260bb3e6416SBram Moolenaar	\	'c123d',
261bb3e6416SBram Moolenaar	\	'b322b',
262bb3e6416SBram Moolenaar	\	'b321b',
263bb3e6416SBram Moolenaar	\	'b321',
264bb3e6416SBram Moolenaar	\	'b321',
265bb3e6416SBram Moolenaar	\	'b123',
266bb3e6416SBram Moolenaar	\	'abc',
267bb3e6416SBram Moolenaar	\	'ab',
268bb3e6416SBram Moolenaar	\	'a321',
269bb3e6416SBram Moolenaar	\	'a123',
270bb3e6416SBram Moolenaar	\	'a122',
271bb3e6416SBram Moolenaar	\	'a',
272bb3e6416SBram Moolenaar	\	' 123b',
273bb3e6416SBram Moolenaar	\    ]
274bb3e6416SBram Moolenaar	\ },
275bb3e6416SBram Moolenaar	\ {
276bb3e6416SBram Moolenaar	\    'name' : 'Numeric reverse sort',
277bb3e6416SBram Moolenaar	\    'cmd' : '%sort! n',
278bb3e6416SBram Moolenaar	\    'input' : [
279bb3e6416SBram Moolenaar	\	'abc',
280bb3e6416SBram Moolenaar	\	'ab',
281bb3e6416SBram Moolenaar	\	'a',
282bb3e6416SBram Moolenaar	\	'a321',
283bb3e6416SBram Moolenaar	\	'a123',
284bb3e6416SBram Moolenaar	\	'a122',
285bb3e6416SBram Moolenaar	\	'b321',
286bb3e6416SBram Moolenaar	\	'b123',
287bb3e6416SBram Moolenaar	\	'c123d',
288bb3e6416SBram Moolenaar	\	' 123b',
289bb3e6416SBram Moolenaar	\	'c321d',
290bb3e6416SBram Moolenaar	\	'b322b',
291bb3e6416SBram Moolenaar	\	'b321',
292bb3e6416SBram Moolenaar	\	'b321b'
293bb3e6416SBram Moolenaar	\    ],
294bb3e6416SBram Moolenaar	\    'expected' : [
295bb3e6416SBram Moolenaar	\	'b322b',
296bb3e6416SBram Moolenaar	\	'b321b',
297bb3e6416SBram Moolenaar	\	'b321',
298bb3e6416SBram Moolenaar	\	'c321d',
299bb3e6416SBram Moolenaar	\	'b321',
300bb3e6416SBram Moolenaar	\	'a321',
301bb3e6416SBram Moolenaar	\	' 123b',
302bb3e6416SBram Moolenaar	\	'c123d',
303bb3e6416SBram Moolenaar	\	'b123',
304bb3e6416SBram Moolenaar	\	'a123',
305bb3e6416SBram Moolenaar	\	'a122',
306bb3e6416SBram Moolenaar	\	'a',
307bb3e6416SBram Moolenaar	\	'ab',
308bb3e6416SBram Moolenaar	\	'abc'
309bb3e6416SBram Moolenaar	\    ]
310bb3e6416SBram Moolenaar	\ },
311bb3e6416SBram Moolenaar	\ {
312bb3e6416SBram Moolenaar	\    'name' : 'Unique reverse sort',
313bb3e6416SBram Moolenaar	\    'cmd' : 'sort! u',
314bb3e6416SBram Moolenaar	\    'input' : [
315bb3e6416SBram Moolenaar	\	'abc',
316bb3e6416SBram Moolenaar	\	'ab',
317bb3e6416SBram Moolenaar	\	'a',
318bb3e6416SBram Moolenaar	\	'a321',
319bb3e6416SBram Moolenaar	\	'a123',
320bb3e6416SBram Moolenaar	\	'a122',
321bb3e6416SBram Moolenaar	\	'b321',
322bb3e6416SBram Moolenaar	\	'b123',
323bb3e6416SBram Moolenaar	\	'c123d',
324bb3e6416SBram Moolenaar	\	' 123b',
325bb3e6416SBram Moolenaar	\	'c321d',
326bb3e6416SBram Moolenaar	\	'b322b',
327bb3e6416SBram Moolenaar	\	'b321',
328bb3e6416SBram Moolenaar	\	'b321b'
329bb3e6416SBram Moolenaar	\    ],
330bb3e6416SBram Moolenaar	\    'expected' : [
331bb3e6416SBram Moolenaar	\	'c321d',
332bb3e6416SBram Moolenaar	\	'c123d',
333bb3e6416SBram Moolenaar	\	'b322b',
334bb3e6416SBram Moolenaar	\	'b321b',
335bb3e6416SBram Moolenaar	\	'b321',
336bb3e6416SBram Moolenaar	\	'b123',
337bb3e6416SBram Moolenaar	\	'abc',
338bb3e6416SBram Moolenaar	\	'ab',
339bb3e6416SBram Moolenaar	\	'a321',
340bb3e6416SBram Moolenaar	\	'a123',
341bb3e6416SBram Moolenaar	\	'a122',
342bb3e6416SBram Moolenaar	\	'a',
343bb3e6416SBram Moolenaar	\	' 123b',
344bb3e6416SBram Moolenaar	\    ]
345bb3e6416SBram Moolenaar	\ },
346bb3e6416SBram Moolenaar	\ {
347bb3e6416SBram Moolenaar	\    'name' : 'Octal sort',
348bb3e6416SBram Moolenaar	\    'cmd' : 'sort o',
349bb3e6416SBram Moolenaar	\    'input' : [
350bb3e6416SBram Moolenaar	\	'abc',
351bb3e6416SBram Moolenaar	\	'ab',
352bb3e6416SBram Moolenaar	\	'a',
353bb3e6416SBram Moolenaar	\	'a321',
354bb3e6416SBram Moolenaar	\	'a123',
355bb3e6416SBram Moolenaar	\	'a122',
356bb3e6416SBram Moolenaar	\	'b321',
357bb3e6416SBram Moolenaar	\	'b123',
358bb3e6416SBram Moolenaar	\	'c123d',
359bb3e6416SBram Moolenaar	\	' 123b',
360bb3e6416SBram Moolenaar	\	'c321d',
361bb3e6416SBram Moolenaar	\	'b322b',
362bb3e6416SBram Moolenaar	\	'b321',
363bb3e6416SBram Moolenaar	\	'b321b',
364bb3e6416SBram Moolenaar	\	'',
365bb3e6416SBram Moolenaar	\	''
366bb3e6416SBram Moolenaar	\    ],
367bb3e6416SBram Moolenaar	\    'expected' : [
368bb3e6416SBram Moolenaar	\	'abc',
369bb3e6416SBram Moolenaar	\	'ab',
370bb3e6416SBram Moolenaar	\	'a',
371bb3e6416SBram Moolenaar	\	'',
372bb3e6416SBram Moolenaar	\	'',
373bb3e6416SBram Moolenaar	\	'a122',
374bb3e6416SBram Moolenaar	\	'a123',
375bb3e6416SBram Moolenaar	\	'b123',
376bb3e6416SBram Moolenaar	\	'c123d',
377bb3e6416SBram Moolenaar	\	' 123b',
378bb3e6416SBram Moolenaar	\	'a321',
379bb3e6416SBram Moolenaar	\	'b321',
380bb3e6416SBram Moolenaar	\	'c321d',
381bb3e6416SBram Moolenaar	\	'b321',
382bb3e6416SBram Moolenaar	\	'b321b',
383bb3e6416SBram Moolenaar	\	'b322b'
384bb3e6416SBram Moolenaar	\    ]
385bb3e6416SBram Moolenaar	\ },
386bb3e6416SBram Moolenaar	\ {
387bb3e6416SBram Moolenaar	\    'name' : 'Reverse hexadecimal sort',
388bb3e6416SBram Moolenaar	\    'cmd' : 'sort! x',
389bb3e6416SBram Moolenaar	\    'input' : [
390bb3e6416SBram Moolenaar	\	'abc',
391bb3e6416SBram Moolenaar	\	'ab',
392bb3e6416SBram Moolenaar	\	'a',
393bb3e6416SBram Moolenaar	\	'a321',
394bb3e6416SBram Moolenaar	\	'a123',
395bb3e6416SBram Moolenaar	\	'a122',
396bb3e6416SBram Moolenaar	\	'b321',
397bb3e6416SBram Moolenaar	\	'b123',
398bb3e6416SBram Moolenaar	\	'c123d',
399bb3e6416SBram Moolenaar	\	' 123b',
400bb3e6416SBram Moolenaar	\	'c321d',
401bb3e6416SBram Moolenaar	\	'b322b',
402bb3e6416SBram Moolenaar	\	'b321',
403bb3e6416SBram Moolenaar	\	'b321b',
404bb3e6416SBram Moolenaar	\	'',
405bb3e6416SBram Moolenaar	\	''
406bb3e6416SBram Moolenaar	\    ],
407bb3e6416SBram Moolenaar	\    'expected' : [
408bb3e6416SBram Moolenaar	\	'c321d',
409bb3e6416SBram Moolenaar	\	'c123d',
410bb3e6416SBram Moolenaar	\	'b322b',
411bb3e6416SBram Moolenaar	\	'b321b',
412bb3e6416SBram Moolenaar	\	'b321',
413bb3e6416SBram Moolenaar	\	'b321',
414bb3e6416SBram Moolenaar	\	'b123',
415bb3e6416SBram Moolenaar	\	'a321',
416bb3e6416SBram Moolenaar	\	'a123',
417bb3e6416SBram Moolenaar	\	'a122',
418bb3e6416SBram Moolenaar	\	' 123b',
419bb3e6416SBram Moolenaar	\	'abc',
420bb3e6416SBram Moolenaar	\	'ab',
421bb3e6416SBram Moolenaar	\	'a',
422bb3e6416SBram Moolenaar	\	'',
423bb3e6416SBram Moolenaar	\	''
424bb3e6416SBram Moolenaar	\    ]
425bb3e6416SBram Moolenaar	\ },
426bb3e6416SBram Moolenaar	\ {
427bb3e6416SBram Moolenaar	\    'name' : 'Alpha (skip first character) sort',
428bb3e6416SBram Moolenaar	\    'cmd' : 'sort/./',
429bb3e6416SBram Moolenaar	\    'input' : [
430bb3e6416SBram Moolenaar	\	'abc',
431bb3e6416SBram Moolenaar	\	'ab',
432bb3e6416SBram Moolenaar	\	'a',
433bb3e6416SBram Moolenaar	\	'a321',
434bb3e6416SBram Moolenaar	\	'a123',
435bb3e6416SBram Moolenaar	\	'a122',
436bb3e6416SBram Moolenaar	\	'b321',
437bb3e6416SBram Moolenaar	\	'b123',
438bb3e6416SBram Moolenaar	\	'c123d',
439bb3e6416SBram Moolenaar	\	' 123b',
440bb3e6416SBram Moolenaar	\	'c321d',
441bb3e6416SBram Moolenaar	\	'b322b',
442bb3e6416SBram Moolenaar	\	'b321',
443bb3e6416SBram Moolenaar	\	'b321b',
444bb3e6416SBram Moolenaar	\	'',
445bb3e6416SBram Moolenaar	\	''
446bb3e6416SBram Moolenaar	\    ],
447bb3e6416SBram Moolenaar	\    'expected' : [
448bb3e6416SBram Moolenaar	\	'a',
449bb3e6416SBram Moolenaar	\	'',
450bb3e6416SBram Moolenaar	\	'',
451bb3e6416SBram Moolenaar	\	'a122',
452bb3e6416SBram Moolenaar	\	'a123',
453bb3e6416SBram Moolenaar	\	'b123',
454bb3e6416SBram Moolenaar	\	' 123b',
455bb3e6416SBram Moolenaar	\	'c123d',
456bb3e6416SBram Moolenaar	\	'a321',
457bb3e6416SBram Moolenaar	\	'b321',
458bb3e6416SBram Moolenaar	\	'b321',
459bb3e6416SBram Moolenaar	\	'b321b',
460bb3e6416SBram Moolenaar	\	'c321d',
461bb3e6416SBram Moolenaar	\	'b322b',
462bb3e6416SBram Moolenaar	\	'ab',
463bb3e6416SBram Moolenaar	\	'abc'
464bb3e6416SBram Moolenaar	\    ]
465bb3e6416SBram Moolenaar	\ },
466bb3e6416SBram Moolenaar	\ {
467bb3e6416SBram Moolenaar	\    'name' : 'Alpha (skip first 2 characters) sort',
468bb3e6416SBram Moolenaar	\    'cmd' : 'sort/../',
469bb3e6416SBram Moolenaar	\    'input' : [
470bb3e6416SBram Moolenaar	\	'abc',
471bb3e6416SBram Moolenaar	\	'ab',
472bb3e6416SBram Moolenaar	\	'a',
473bb3e6416SBram Moolenaar	\	'a321',
474bb3e6416SBram Moolenaar	\	'a123',
475bb3e6416SBram Moolenaar	\	'a122',
476bb3e6416SBram Moolenaar	\	'b321',
477bb3e6416SBram Moolenaar	\	'b123',
478bb3e6416SBram Moolenaar	\	'c123d',
479bb3e6416SBram Moolenaar	\	' 123b',
480bb3e6416SBram Moolenaar	\	'c321d',
481bb3e6416SBram Moolenaar	\	'b322b',
482bb3e6416SBram Moolenaar	\	'b321',
483bb3e6416SBram Moolenaar	\	'b321b',
484bb3e6416SBram Moolenaar	\	'',
485bb3e6416SBram Moolenaar	\	''
486bb3e6416SBram Moolenaar	\    ],
487bb3e6416SBram Moolenaar	\    'expected' : [
488bb3e6416SBram Moolenaar	\	'ab',
489bb3e6416SBram Moolenaar	\	'a',
490bb3e6416SBram Moolenaar	\	'',
491bb3e6416SBram Moolenaar	\	'',
492bb3e6416SBram Moolenaar	\	'a321',
493bb3e6416SBram Moolenaar	\	'b321',
494bb3e6416SBram Moolenaar	\	'b321',
495bb3e6416SBram Moolenaar	\	'b321b',
496bb3e6416SBram Moolenaar	\	'c321d',
497bb3e6416SBram Moolenaar	\	'a122',
498bb3e6416SBram Moolenaar	\	'b322b',
499bb3e6416SBram Moolenaar	\	'a123',
500bb3e6416SBram Moolenaar	\	'b123',
501bb3e6416SBram Moolenaar	\	' 123b',
502bb3e6416SBram Moolenaar	\	'c123d',
503bb3e6416SBram Moolenaar	\	'abc'
504bb3e6416SBram Moolenaar	\    ]
505bb3e6416SBram Moolenaar	\ },
506bb3e6416SBram Moolenaar	\ {
507bb3e6416SBram Moolenaar	\    'name' : 'alpha, unique, skip first 2 characters',
508bb3e6416SBram Moolenaar	\    'cmd' : 'sort/../u',
509bb3e6416SBram Moolenaar	\    'input' : [
510bb3e6416SBram Moolenaar	\	'abc',
511bb3e6416SBram Moolenaar	\	'ab',
512bb3e6416SBram Moolenaar	\	'a',
513bb3e6416SBram Moolenaar	\	'a321',
514bb3e6416SBram Moolenaar	\	'a123',
515bb3e6416SBram Moolenaar	\	'a122',
516bb3e6416SBram Moolenaar	\	'b321',
517bb3e6416SBram Moolenaar	\	'b123',
518bb3e6416SBram Moolenaar	\	'c123d',
519bb3e6416SBram Moolenaar	\	' 123b',
520bb3e6416SBram Moolenaar	\	'c321d',
521bb3e6416SBram Moolenaar	\	'b322b',
522bb3e6416SBram Moolenaar	\	'b321',
523bb3e6416SBram Moolenaar	\	'b321b',
524bb3e6416SBram Moolenaar	\	'',
525bb3e6416SBram Moolenaar	\	''
526bb3e6416SBram Moolenaar	\    ],
527bb3e6416SBram Moolenaar	\    'expected' : [
528bb3e6416SBram Moolenaar	\	'ab',
529bb3e6416SBram Moolenaar	\	'a',
530bb3e6416SBram Moolenaar	\	'',
531bb3e6416SBram Moolenaar	\	'a321',
532bb3e6416SBram Moolenaar	\	'b321',
533bb3e6416SBram Moolenaar	\	'b321b',
534bb3e6416SBram Moolenaar	\	'c321d',
535bb3e6416SBram Moolenaar	\	'a122',
536bb3e6416SBram Moolenaar	\	'b322b',
537bb3e6416SBram Moolenaar	\	'a123',
538bb3e6416SBram Moolenaar	\	'b123',
539bb3e6416SBram Moolenaar	\	' 123b',
540bb3e6416SBram Moolenaar	\	'c123d',
541bb3e6416SBram Moolenaar	\	'abc'
542bb3e6416SBram Moolenaar	\    ]
543bb3e6416SBram Moolenaar	\ },
544bb3e6416SBram Moolenaar	\ {
545bb3e6416SBram Moolenaar	\    'name' : 'numeric, skip first character',
546bb3e6416SBram Moolenaar	\    'cmd' : 'sort/./n',
547bb3e6416SBram Moolenaar	\    'input' : [
548bb3e6416SBram Moolenaar	\	'abc',
549bb3e6416SBram Moolenaar	\	'ab',
550bb3e6416SBram Moolenaar	\	'a',
551bb3e6416SBram Moolenaar	\	'a321',
552bb3e6416SBram Moolenaar	\	'a123',
553bb3e6416SBram Moolenaar	\	'a122',
554bb3e6416SBram Moolenaar	\	'b321',
555bb3e6416SBram Moolenaar	\	'b123',
556bb3e6416SBram Moolenaar	\	'c123d',
557bb3e6416SBram Moolenaar	\	' 123b',
558bb3e6416SBram Moolenaar	\	'c321d',
559bb3e6416SBram Moolenaar	\	'b322b',
560bb3e6416SBram Moolenaar	\	'b321',
561bb3e6416SBram Moolenaar	\	'b321b',
562bb3e6416SBram Moolenaar	\	'',
563bb3e6416SBram Moolenaar	\	''
564bb3e6416SBram Moolenaar	\    ],
565bb3e6416SBram Moolenaar	\    'expected' : [
566bb3e6416SBram Moolenaar	\	'abc',
567bb3e6416SBram Moolenaar	\	'ab',
568bb3e6416SBram Moolenaar	\	'a',
569bb3e6416SBram Moolenaar	\	'',
570bb3e6416SBram Moolenaar	\	'',
571bb3e6416SBram Moolenaar	\	'a122',
572bb3e6416SBram Moolenaar	\	'a123',
573bb3e6416SBram Moolenaar	\	'b123',
574bb3e6416SBram Moolenaar	\	'c123d',
575bb3e6416SBram Moolenaar	\	' 123b',
576bb3e6416SBram Moolenaar	\	'a321',
577bb3e6416SBram Moolenaar	\	'b321',
578bb3e6416SBram Moolenaar	\	'c321d',
579bb3e6416SBram Moolenaar	\	'b321',
580bb3e6416SBram Moolenaar	\	'b321b',
581bb3e6416SBram Moolenaar	\	'b322b'
582bb3e6416SBram Moolenaar	\    ]
583bb3e6416SBram Moolenaar	\ },
584bb3e6416SBram Moolenaar	\ {
585bb3e6416SBram Moolenaar	\    'name' : 'alpha, sort on first character',
586bb3e6416SBram Moolenaar	\    'cmd' : 'sort/./r',
587bb3e6416SBram Moolenaar	\    'input' : [
588bb3e6416SBram Moolenaar	\	'abc',
589bb3e6416SBram Moolenaar	\	'ab',
590bb3e6416SBram Moolenaar	\	'a',
591bb3e6416SBram Moolenaar	\	'a321',
592bb3e6416SBram Moolenaar	\	'a123',
593bb3e6416SBram Moolenaar	\	'a122',
594bb3e6416SBram Moolenaar	\	'b321',
595bb3e6416SBram Moolenaar	\	'b123',
596bb3e6416SBram Moolenaar	\	'c123d',
597bb3e6416SBram Moolenaar	\	' 123b',
598bb3e6416SBram Moolenaar	\	'c321d',
599bb3e6416SBram Moolenaar	\	'b322b',
600bb3e6416SBram Moolenaar	\	'b321',
601bb3e6416SBram Moolenaar	\	'b321b',
602bb3e6416SBram Moolenaar	\	'',
603bb3e6416SBram Moolenaar	\	''
604bb3e6416SBram Moolenaar	\    ],
605bb3e6416SBram Moolenaar	\    'expected' : [
606bb3e6416SBram Moolenaar	\	'',
607bb3e6416SBram Moolenaar	\	'',
608bb3e6416SBram Moolenaar	\	' 123b',
609bb3e6416SBram Moolenaar	\	'abc',
610bb3e6416SBram Moolenaar	\	'ab',
611bb3e6416SBram Moolenaar	\	'a',
612bb3e6416SBram Moolenaar	\	'a321',
613bb3e6416SBram Moolenaar	\	'a123',
614bb3e6416SBram Moolenaar	\	'a122',
615bb3e6416SBram Moolenaar	\	'b321',
616bb3e6416SBram Moolenaar	\	'b123',
617bb3e6416SBram Moolenaar	\	'b322b',
618bb3e6416SBram Moolenaar	\	'b321',
619bb3e6416SBram Moolenaar	\	'b321b',
620bb3e6416SBram Moolenaar	\	'c123d',
621bb3e6416SBram Moolenaar	\	'c321d'
622bb3e6416SBram Moolenaar	\    ]
623bb3e6416SBram Moolenaar	\ },
624bb3e6416SBram Moolenaar	\ {
625bb3e6416SBram Moolenaar	\    'name' : 'alpha, sort on first 2 characters',
626bb3e6416SBram Moolenaar	\    'cmd' : 'sort/../r',
627bb3e6416SBram Moolenaar	\    'input' : [
628bb3e6416SBram Moolenaar	\	'abc',
629bb3e6416SBram Moolenaar	\	'ab',
630bb3e6416SBram Moolenaar	\	'a',
631bb3e6416SBram Moolenaar	\	'a321',
632bb3e6416SBram Moolenaar	\	'a123',
633bb3e6416SBram Moolenaar	\	'a122',
634bb3e6416SBram Moolenaar	\	'b321',
635bb3e6416SBram Moolenaar	\	'b123',
636bb3e6416SBram Moolenaar	\	'c123d',
637bb3e6416SBram Moolenaar	\	' 123b',
638bb3e6416SBram Moolenaar	\	'c321d',
639bb3e6416SBram Moolenaar	\	'b322b',
640bb3e6416SBram Moolenaar	\	'b321',
641bb3e6416SBram Moolenaar	\	'b321b',
642bb3e6416SBram Moolenaar	\	'',
643bb3e6416SBram Moolenaar	\	''
644bb3e6416SBram Moolenaar	\    ],
645bb3e6416SBram Moolenaar	\    'expected' : [
646bb3e6416SBram Moolenaar	\	'a',
647bb3e6416SBram Moolenaar	\	'',
648bb3e6416SBram Moolenaar	\	'',
649bb3e6416SBram Moolenaar	\	' 123b',
650bb3e6416SBram Moolenaar	\	'a123',
651bb3e6416SBram Moolenaar	\	'a122',
652bb3e6416SBram Moolenaar	\	'a321',
653bb3e6416SBram Moolenaar	\	'abc',
654bb3e6416SBram Moolenaar	\	'ab',
655bb3e6416SBram Moolenaar	\	'b123',
656bb3e6416SBram Moolenaar	\	'b321',
657bb3e6416SBram Moolenaar	\	'b322b',
658bb3e6416SBram Moolenaar	\	'b321',
659bb3e6416SBram Moolenaar	\	'b321b',
660bb3e6416SBram Moolenaar	\	'c123d',
661bb3e6416SBram Moolenaar	\	'c321d'
662bb3e6416SBram Moolenaar	\    ]
663bb3e6416SBram Moolenaar	\ },
664bb3e6416SBram Moolenaar	\ {
665bb3e6416SBram Moolenaar	\    'name' : 'numeric, sort on first character',
666bb3e6416SBram Moolenaar	\    'cmd' : 'sort/./rn',
667bb3e6416SBram Moolenaar	\    'input' : [
668bb3e6416SBram Moolenaar	\	'abc',
669bb3e6416SBram Moolenaar	\	'ab',
670bb3e6416SBram Moolenaar	\	'a',
671bb3e6416SBram Moolenaar	\	'a321',
672bb3e6416SBram Moolenaar	\	'a123',
673bb3e6416SBram Moolenaar	\	'a122',
674bb3e6416SBram Moolenaar	\	'b321',
675bb3e6416SBram Moolenaar	\	'b123',
676bb3e6416SBram Moolenaar	\	'c123d',
677bb3e6416SBram Moolenaar	\	' 123b',
678bb3e6416SBram Moolenaar	\	'c321d',
679bb3e6416SBram Moolenaar	\	'b322b',
680bb3e6416SBram Moolenaar	\	'b321',
681bb3e6416SBram Moolenaar	\	'b321b',
682bb3e6416SBram Moolenaar	\	'',
683bb3e6416SBram Moolenaar	\	''
684bb3e6416SBram Moolenaar	\    ],
685bb3e6416SBram Moolenaar	\    'expected' : [
686bb3e6416SBram Moolenaar	\	'abc',
687bb3e6416SBram Moolenaar	\	'ab',
688bb3e6416SBram Moolenaar	\	'a',
689bb3e6416SBram Moolenaar	\	'a321',
690bb3e6416SBram Moolenaar	\	'a123',
691bb3e6416SBram Moolenaar	\	'a122',
692bb3e6416SBram Moolenaar	\	'b321',
693bb3e6416SBram Moolenaar	\	'b123',
694bb3e6416SBram Moolenaar	\	'c123d',
695bb3e6416SBram Moolenaar	\	' 123b',
696bb3e6416SBram Moolenaar	\	'c321d',
697bb3e6416SBram Moolenaar	\	'b322b',
698bb3e6416SBram Moolenaar	\	'b321',
699bb3e6416SBram Moolenaar	\	'b321b',
700bb3e6416SBram Moolenaar	\	'',
701bb3e6416SBram Moolenaar	\	''
702bb3e6416SBram Moolenaar	\    ]
703bb3e6416SBram Moolenaar	\ },
704bb3e6416SBram Moolenaar	\ {
705bb3e6416SBram Moolenaar	\    'name' : 'alpha, skip past first digit',
706bb3e6416SBram Moolenaar	\    'cmd' : 'sort/\d/',
707bb3e6416SBram Moolenaar	\    'input' : [
708bb3e6416SBram Moolenaar	\	'abc',
709bb3e6416SBram Moolenaar	\	'ab',
710bb3e6416SBram Moolenaar	\	'a',
711bb3e6416SBram Moolenaar	\	'a321',
712bb3e6416SBram Moolenaar	\	'a123',
713bb3e6416SBram Moolenaar	\	'a122',
714bb3e6416SBram Moolenaar	\	'b321',
715bb3e6416SBram Moolenaar	\	'b123',
716bb3e6416SBram Moolenaar	\	'c123d',
717bb3e6416SBram Moolenaar	\	' 123b',
718bb3e6416SBram Moolenaar	\	'c321d',
719bb3e6416SBram Moolenaar	\	'b322b',
720bb3e6416SBram Moolenaar	\	'b321',
721bb3e6416SBram Moolenaar	\	'b321b',
722bb3e6416SBram Moolenaar	\	'',
723bb3e6416SBram Moolenaar	\	''
724bb3e6416SBram Moolenaar	\    ],
725bb3e6416SBram Moolenaar	\    'expected' : [
726bb3e6416SBram Moolenaar	\	'abc',
727bb3e6416SBram Moolenaar	\	'ab',
728bb3e6416SBram Moolenaar	\	'a',
729bb3e6416SBram Moolenaar	\	'',
730bb3e6416SBram Moolenaar	\	'',
731bb3e6416SBram Moolenaar	\	'a321',
732bb3e6416SBram Moolenaar	\	'b321',
733bb3e6416SBram Moolenaar	\	'b321',
734bb3e6416SBram Moolenaar	\	'b321b',
735bb3e6416SBram Moolenaar	\	'c321d',
736bb3e6416SBram Moolenaar	\	'a122',
737bb3e6416SBram Moolenaar	\	'b322b',
738bb3e6416SBram Moolenaar	\	'a123',
739bb3e6416SBram Moolenaar	\	'b123',
740bb3e6416SBram Moolenaar	\	' 123b',
741bb3e6416SBram Moolenaar	\	'c123d'
742bb3e6416SBram Moolenaar	\    ]
743bb3e6416SBram Moolenaar	\ },
744bb3e6416SBram Moolenaar	\ {
745bb3e6416SBram Moolenaar	\    'name' : 'alpha, sort on first digit',
746bb3e6416SBram Moolenaar	\    'cmd' : 'sort/\d/r',
747bb3e6416SBram Moolenaar	\    'input' : [
748bb3e6416SBram Moolenaar	\	'abc',
749bb3e6416SBram Moolenaar	\	'ab',
750bb3e6416SBram Moolenaar	\	'a',
751bb3e6416SBram Moolenaar	\	'a321',
752bb3e6416SBram Moolenaar	\	'a123',
753bb3e6416SBram Moolenaar	\	'a122',
754bb3e6416SBram Moolenaar	\	'b321',
755bb3e6416SBram Moolenaar	\	'b123',
756bb3e6416SBram Moolenaar	\	'c123d',
757bb3e6416SBram Moolenaar	\	' 123b',
758bb3e6416SBram Moolenaar	\	'c321d',
759bb3e6416SBram Moolenaar	\	'b322b',
760bb3e6416SBram Moolenaar	\	'b321',
761bb3e6416SBram Moolenaar	\	'b321b',
762bb3e6416SBram Moolenaar	\	'',
763bb3e6416SBram Moolenaar	\	''
764bb3e6416SBram Moolenaar	\    ],
765bb3e6416SBram Moolenaar	\    'expected' : [
766bb3e6416SBram Moolenaar	\	'abc',
767bb3e6416SBram Moolenaar	\	'ab',
768bb3e6416SBram Moolenaar	\	'a',
769bb3e6416SBram Moolenaar	\	'',
770bb3e6416SBram Moolenaar	\	'',
771bb3e6416SBram Moolenaar	\	'a123',
772bb3e6416SBram Moolenaar	\	'a122',
773bb3e6416SBram Moolenaar	\	'b123',
774bb3e6416SBram Moolenaar	\	'c123d',
775bb3e6416SBram Moolenaar	\	' 123b',
776bb3e6416SBram Moolenaar	\	'a321',
777bb3e6416SBram Moolenaar	\	'b321',
778bb3e6416SBram Moolenaar	\	'c321d',
779bb3e6416SBram Moolenaar	\	'b322b',
780bb3e6416SBram Moolenaar	\	'b321',
781bb3e6416SBram Moolenaar	\	'b321b'
782bb3e6416SBram Moolenaar	\    ]
783bb3e6416SBram Moolenaar	\ },
784bb3e6416SBram Moolenaar	\ {
785bb3e6416SBram Moolenaar	\    'name' : 'numeric, skip past first digit',
786bb3e6416SBram Moolenaar	\    'cmd' : 'sort/\d/n',
787bb3e6416SBram Moolenaar	\    'input' : [
788bb3e6416SBram Moolenaar	\	'abc',
789bb3e6416SBram Moolenaar	\	'ab',
790bb3e6416SBram Moolenaar	\	'a',
791bb3e6416SBram Moolenaar	\	'a321',
792bb3e6416SBram Moolenaar	\	'a123',
793bb3e6416SBram Moolenaar	\	'a122',
794bb3e6416SBram Moolenaar	\	'b321',
795bb3e6416SBram Moolenaar	\	'b123',
796bb3e6416SBram Moolenaar	\	'c123d',
797bb3e6416SBram Moolenaar	\	' 123b',
798bb3e6416SBram Moolenaar	\	'c321d',
799bb3e6416SBram Moolenaar	\	'b322b',
800bb3e6416SBram Moolenaar	\	'b321',
801bb3e6416SBram Moolenaar	\	'b321b',
802bb3e6416SBram Moolenaar	\	'',
803bb3e6416SBram Moolenaar	\	''
804bb3e6416SBram Moolenaar	\    ],
805bb3e6416SBram Moolenaar	\    'expected' : [
806bb3e6416SBram Moolenaar	\	'abc',
807bb3e6416SBram Moolenaar	\	'ab',
808bb3e6416SBram Moolenaar	\	'a',
809bb3e6416SBram Moolenaar	\	'',
810bb3e6416SBram Moolenaar	\	'',
811bb3e6416SBram Moolenaar	\	'a321',
812bb3e6416SBram Moolenaar	\	'b321',
813bb3e6416SBram Moolenaar	\	'c321d',
814bb3e6416SBram Moolenaar	\	'b321',
815bb3e6416SBram Moolenaar	\	'b321b',
816bb3e6416SBram Moolenaar	\	'a122',
817bb3e6416SBram Moolenaar	\	'b322b',
818bb3e6416SBram Moolenaar	\	'a123',
819bb3e6416SBram Moolenaar	\	'b123',
820bb3e6416SBram Moolenaar	\	'c123d',
821bb3e6416SBram Moolenaar	\	' 123b'
822bb3e6416SBram Moolenaar	\    ]
823bb3e6416SBram Moolenaar	\ },
824bb3e6416SBram Moolenaar	\ {
825bb3e6416SBram Moolenaar	\    'name' : 'numeric, sort on first digit',
826bb3e6416SBram Moolenaar	\    'cmd' : 'sort/\d/rn',
827bb3e6416SBram Moolenaar	\    'input' : [
828bb3e6416SBram Moolenaar	\	'abc',
829bb3e6416SBram Moolenaar	\	'ab',
830bb3e6416SBram Moolenaar	\	'a',
831bb3e6416SBram Moolenaar	\	'a321',
832bb3e6416SBram Moolenaar	\	'a123',
833bb3e6416SBram Moolenaar	\	'a122',
834bb3e6416SBram Moolenaar	\	'b321',
835bb3e6416SBram Moolenaar	\	'b123',
836bb3e6416SBram Moolenaar	\	'c123d',
837bb3e6416SBram Moolenaar	\	' 123b',
838bb3e6416SBram Moolenaar	\	'c321d',
839bb3e6416SBram Moolenaar	\	'b322b',
840bb3e6416SBram Moolenaar	\	'b321',
841bb3e6416SBram Moolenaar	\	'b321b',
842bb3e6416SBram Moolenaar	\	'',
843bb3e6416SBram Moolenaar	\	''
844bb3e6416SBram Moolenaar	\    ],
845bb3e6416SBram Moolenaar	\    'expected' : [
846bb3e6416SBram Moolenaar	\	'abc',
847bb3e6416SBram Moolenaar	\	'ab',
848bb3e6416SBram Moolenaar	\	'a',
849bb3e6416SBram Moolenaar	\	'',
850bb3e6416SBram Moolenaar	\	'',
851bb3e6416SBram Moolenaar	\	'a123',
852bb3e6416SBram Moolenaar	\	'a122',
853bb3e6416SBram Moolenaar	\	'b123',
854bb3e6416SBram Moolenaar	\	'c123d',
855bb3e6416SBram Moolenaar	\	' 123b',
856bb3e6416SBram Moolenaar	\	'a321',
857bb3e6416SBram Moolenaar	\	'b321',
858bb3e6416SBram Moolenaar	\	'c321d',
859bb3e6416SBram Moolenaar	\	'b322b',
860bb3e6416SBram Moolenaar	\	'b321',
861bb3e6416SBram Moolenaar	\	'b321b'
862bb3e6416SBram Moolenaar	\    ]
863bb3e6416SBram Moolenaar	\ },
864bb3e6416SBram Moolenaar	\ {
865bb3e6416SBram Moolenaar	\    'name' : 'alpha, skip past first 2 digits',
866bb3e6416SBram Moolenaar	\    'cmd' : 'sort/\d\d/',
867bb3e6416SBram Moolenaar	\    'input' : [
868bb3e6416SBram Moolenaar	\	'abc',
869bb3e6416SBram Moolenaar	\	'ab',
870bb3e6416SBram Moolenaar	\	'a',
871bb3e6416SBram Moolenaar	\	'a321',
872bb3e6416SBram Moolenaar	\	'a123',
873bb3e6416SBram Moolenaar	\	'a122',
874bb3e6416SBram Moolenaar	\	'b321',
875bb3e6416SBram Moolenaar	\	'b123',
876bb3e6416SBram Moolenaar	\	'c123d',
877bb3e6416SBram Moolenaar	\	' 123b',
878bb3e6416SBram Moolenaar	\	'c321d',
879bb3e6416SBram Moolenaar	\	'b322b',
880bb3e6416SBram Moolenaar	\	'b321',
881bb3e6416SBram Moolenaar	\	'b321b',
882bb3e6416SBram Moolenaar	\	'',
883bb3e6416SBram Moolenaar	\	''
884bb3e6416SBram Moolenaar	\    ],
885bb3e6416SBram Moolenaar	\    'expected' : [
886bb3e6416SBram Moolenaar	\	'abc',
887bb3e6416SBram Moolenaar	\	'ab',
888bb3e6416SBram Moolenaar	\	'a',
889bb3e6416SBram Moolenaar	\	'',
890bb3e6416SBram Moolenaar	\	'',
891bb3e6416SBram Moolenaar	\	'a321',
892bb3e6416SBram Moolenaar	\	'b321',
893bb3e6416SBram Moolenaar	\	'b321',
894bb3e6416SBram Moolenaar	\	'b321b',
895bb3e6416SBram Moolenaar	\	'c321d',
896bb3e6416SBram Moolenaar	\	'a122',
897bb3e6416SBram Moolenaar	\	'b322b',
898bb3e6416SBram Moolenaar	\	'a123',
899bb3e6416SBram Moolenaar	\	'b123',
900bb3e6416SBram Moolenaar	\	' 123b',
901bb3e6416SBram Moolenaar	\	'c123d'
902bb3e6416SBram Moolenaar	\    ]
903bb3e6416SBram Moolenaar	\ },
904bb3e6416SBram Moolenaar	\ {
905bb3e6416SBram Moolenaar	\    'name' : 'numeric, skip past first 2 digits',
906bb3e6416SBram Moolenaar	\    'cmd' : 'sort/\d\d/n',
907bb3e6416SBram Moolenaar	\    'input' : [
908bb3e6416SBram Moolenaar	\	'abc',
909bb3e6416SBram Moolenaar	\	'ab',
910bb3e6416SBram Moolenaar	\	'a',
911bb3e6416SBram Moolenaar	\	'a321',
912bb3e6416SBram Moolenaar	\	'a123',
913bb3e6416SBram Moolenaar	\	'a122',
914bb3e6416SBram Moolenaar	\	'b321',
915bb3e6416SBram Moolenaar	\	'b123',
916bb3e6416SBram Moolenaar	\	'c123d',
917bb3e6416SBram Moolenaar	\	' 123b',
918bb3e6416SBram Moolenaar	\	'c321d',
919bb3e6416SBram Moolenaar	\	'b322b',
920bb3e6416SBram Moolenaar	\	'b321',
921bb3e6416SBram Moolenaar	\	'b321b',
922bb3e6416SBram Moolenaar	\	'',
923bb3e6416SBram Moolenaar	\	''
924bb3e6416SBram Moolenaar	\    ],
925bb3e6416SBram Moolenaar	\    'expected' : [
926bb3e6416SBram Moolenaar	\	'abc',
927bb3e6416SBram Moolenaar	\	'ab',
928bb3e6416SBram Moolenaar	\	'a',
929bb3e6416SBram Moolenaar	\	'',
930bb3e6416SBram Moolenaar	\	'',
931bb3e6416SBram Moolenaar	\	'a321',
932bb3e6416SBram Moolenaar	\	'b321',
933bb3e6416SBram Moolenaar	\	'c321d',
934bb3e6416SBram Moolenaar	\	'b321',
935bb3e6416SBram Moolenaar	\	'b321b',
936bb3e6416SBram Moolenaar	\	'a122',
937bb3e6416SBram Moolenaar	\	'b322b',
938bb3e6416SBram Moolenaar	\	'a123',
939bb3e6416SBram Moolenaar	\	'b123',
940bb3e6416SBram Moolenaar	\	'c123d',
941bb3e6416SBram Moolenaar	\	' 123b'
942bb3e6416SBram Moolenaar	\    ]
943bb3e6416SBram Moolenaar	\ },
944bb3e6416SBram Moolenaar	\ {
945bb3e6416SBram Moolenaar	\    'name' : 'hexadecimal, skip past first 2 digits',
946bb3e6416SBram Moolenaar	\    'cmd' : 'sort/\d\d/x',
947bb3e6416SBram Moolenaar	\    'input' : [
948bb3e6416SBram Moolenaar	\	'abc',
949bb3e6416SBram Moolenaar	\	'ab',
950bb3e6416SBram Moolenaar	\	'a',
951bb3e6416SBram Moolenaar	\	'a321',
952bb3e6416SBram Moolenaar	\	'a123',
953bb3e6416SBram Moolenaar	\	'a122',
954bb3e6416SBram Moolenaar	\	'b321',
955bb3e6416SBram Moolenaar	\	'b123',
956bb3e6416SBram Moolenaar	\	'c123d',
957bb3e6416SBram Moolenaar	\	' 123b',
958bb3e6416SBram Moolenaar	\	'c321d',
959bb3e6416SBram Moolenaar	\	'b322b',
960bb3e6416SBram Moolenaar	\	'b321',
961bb3e6416SBram Moolenaar	\	'b321b',
962bb3e6416SBram Moolenaar	\	'',
963bb3e6416SBram Moolenaar	\	''
964bb3e6416SBram Moolenaar	\    ],
965bb3e6416SBram Moolenaar	\    'expected' : [
966bb3e6416SBram Moolenaar	\	'abc',
967bb3e6416SBram Moolenaar	\	'ab',
968bb3e6416SBram Moolenaar	\	'a',
969bb3e6416SBram Moolenaar	\	'',
970bb3e6416SBram Moolenaar	\	'',
971bb3e6416SBram Moolenaar	\	'a321',
972bb3e6416SBram Moolenaar	\	'b321',
973bb3e6416SBram Moolenaar	\	'b321',
974bb3e6416SBram Moolenaar	\	'a122',
975bb3e6416SBram Moolenaar	\	'a123',
976bb3e6416SBram Moolenaar	\	'b123',
977bb3e6416SBram Moolenaar	\	'b321b',
978bb3e6416SBram Moolenaar	\	'c321d',
979bb3e6416SBram Moolenaar	\	'b322b',
980bb3e6416SBram Moolenaar	\	' 123b',
981bb3e6416SBram Moolenaar	\	'c123d'
982bb3e6416SBram Moolenaar	\    ]
983bb3e6416SBram Moolenaar	\ },
984bb3e6416SBram Moolenaar	\ {
985bb3e6416SBram Moolenaar	\    'name' : 'alpha, sort on first 2 digits',
986bb3e6416SBram Moolenaar	\    'cmd' : 'sort/\d\d/r',
987bb3e6416SBram Moolenaar	\    'input' : [
988bb3e6416SBram Moolenaar	\	'abc',
989bb3e6416SBram Moolenaar	\	'ab',
990bb3e6416SBram Moolenaar	\	'a',
991bb3e6416SBram Moolenaar	\	'a321',
992bb3e6416SBram Moolenaar	\	'a123',
993bb3e6416SBram Moolenaar	\	'a122',
994bb3e6416SBram Moolenaar	\	'b321',
995bb3e6416SBram Moolenaar	\	'b123',
996bb3e6416SBram Moolenaar	\	'c123d',
997bb3e6416SBram Moolenaar	\	' 123b',
998bb3e6416SBram Moolenaar	\	'c321d',
999bb3e6416SBram Moolenaar	\	'b322b',
1000bb3e6416SBram Moolenaar	\	'b321',
1001bb3e6416SBram Moolenaar	\	'b321b',
1002bb3e6416SBram Moolenaar	\	'',
1003bb3e6416SBram Moolenaar	\	''
1004bb3e6416SBram Moolenaar	\    ],
1005bb3e6416SBram Moolenaar	\    'expected' : [
1006bb3e6416SBram Moolenaar	\	'abc',
1007bb3e6416SBram Moolenaar	\	'ab',
1008bb3e6416SBram Moolenaar	\	'a',
1009bb3e6416SBram Moolenaar	\	'',
1010bb3e6416SBram Moolenaar	\	'',
1011bb3e6416SBram Moolenaar	\	'a123',
1012bb3e6416SBram Moolenaar	\	'a122',
1013bb3e6416SBram Moolenaar	\	'b123',
1014bb3e6416SBram Moolenaar	\	'c123d',
1015bb3e6416SBram Moolenaar	\	' 123b',
1016bb3e6416SBram Moolenaar	\	'a321',
1017bb3e6416SBram Moolenaar	\	'b321',
1018bb3e6416SBram Moolenaar	\	'c321d',
1019bb3e6416SBram Moolenaar	\	'b322b',
1020bb3e6416SBram Moolenaar	\	'b321',
1021bb3e6416SBram Moolenaar	\	'b321b'
1022bb3e6416SBram Moolenaar	\    ]
1023bb3e6416SBram Moolenaar	\ },
1024bb3e6416SBram Moolenaar	\ {
1025bb3e6416SBram Moolenaar	\    'name' : 'numeric, sort on first 2 digits',
1026bb3e6416SBram Moolenaar	\    'cmd' : 'sort/\d\d/rn',
1027bb3e6416SBram Moolenaar	\    'input' : [
1028bb3e6416SBram Moolenaar	\	'abc',
1029bb3e6416SBram Moolenaar	\	'ab',
1030bb3e6416SBram Moolenaar	\	'a',
1031bb3e6416SBram Moolenaar	\	'a321',
1032bb3e6416SBram Moolenaar	\	'a123',
1033bb3e6416SBram Moolenaar	\	'a122',
1034bb3e6416SBram Moolenaar	\	'b321',
1035bb3e6416SBram Moolenaar	\	'b123',
1036bb3e6416SBram Moolenaar	\	'c123d',
1037bb3e6416SBram Moolenaar	\	' 123b',
1038bb3e6416SBram Moolenaar	\	'c321d',
1039bb3e6416SBram Moolenaar	\	'b322b',
1040bb3e6416SBram Moolenaar	\	'b321',
1041bb3e6416SBram Moolenaar	\	'b321b',
1042bb3e6416SBram Moolenaar	\	'',
1043bb3e6416SBram Moolenaar	\	''
1044bb3e6416SBram Moolenaar	\    ],
1045bb3e6416SBram Moolenaar	\    'expected' : [
1046bb3e6416SBram Moolenaar	\	'abc',
1047bb3e6416SBram Moolenaar	\	'ab',
1048bb3e6416SBram Moolenaar	\	'a',
1049bb3e6416SBram Moolenaar	\	'',
1050bb3e6416SBram Moolenaar	\	'',
1051bb3e6416SBram Moolenaar	\	'a123',
1052bb3e6416SBram Moolenaar	\	'a122',
1053bb3e6416SBram Moolenaar	\	'b123',
1054bb3e6416SBram Moolenaar	\	'c123d',
1055bb3e6416SBram Moolenaar	\	' 123b',
1056bb3e6416SBram Moolenaar	\	'a321',
1057bb3e6416SBram Moolenaar	\	'b321',
1058bb3e6416SBram Moolenaar	\	'c321d',
1059bb3e6416SBram Moolenaar	\	'b322b',
1060bb3e6416SBram Moolenaar	\	'b321',
1061bb3e6416SBram Moolenaar	\	'b321b'
1062bb3e6416SBram Moolenaar	\    ]
1063bb3e6416SBram Moolenaar	\ },
1064bb3e6416SBram Moolenaar	\ {
1065bb3e6416SBram Moolenaar	\    'name' : 'hexadecimal, sort on first 2 digits',
1066bb3e6416SBram Moolenaar	\    'cmd' : 'sort/\d\d/rx',
1067bb3e6416SBram Moolenaar	\    'input' : [
1068bb3e6416SBram Moolenaar	\	'abc',
1069bb3e6416SBram Moolenaar	\	'ab',
1070bb3e6416SBram Moolenaar	\	'a',
1071bb3e6416SBram Moolenaar	\	'a321',
1072bb3e6416SBram Moolenaar	\	'a123',
1073bb3e6416SBram Moolenaar	\	'a122',
1074bb3e6416SBram Moolenaar	\	'b321',
1075bb3e6416SBram Moolenaar	\	'b123',
1076bb3e6416SBram Moolenaar	\	'c123d',
1077bb3e6416SBram Moolenaar	\	' 123b',
1078bb3e6416SBram Moolenaar	\	'c321d',
1079bb3e6416SBram Moolenaar	\	'b322b',
1080bb3e6416SBram Moolenaar	\	'b321',
1081bb3e6416SBram Moolenaar	\	'b321b',
1082bb3e6416SBram Moolenaar	\	'',
1083bb3e6416SBram Moolenaar	\	''
1084bb3e6416SBram Moolenaar	\    ],
1085bb3e6416SBram Moolenaar	\    'expected' : [
1086bb3e6416SBram Moolenaar	\	'abc',
1087bb3e6416SBram Moolenaar	\	'ab',
1088bb3e6416SBram Moolenaar	\	'a',
1089bb3e6416SBram Moolenaar	\	'',
1090bb3e6416SBram Moolenaar	\	'',
1091bb3e6416SBram Moolenaar	\	'a123',
1092bb3e6416SBram Moolenaar	\	'a122',
1093bb3e6416SBram Moolenaar	\	'b123',
1094bb3e6416SBram Moolenaar	\	'c123d',
1095bb3e6416SBram Moolenaar	\	' 123b',
1096bb3e6416SBram Moolenaar	\	'a321',
1097bb3e6416SBram Moolenaar	\	'b321',
1098bb3e6416SBram Moolenaar	\	'c321d',
1099bb3e6416SBram Moolenaar	\	'b322b',
1100bb3e6416SBram Moolenaar	\	'b321',
1101bb3e6416SBram Moolenaar	\	'b321b'
1102bb3e6416SBram Moolenaar	\    ]
1103bb3e6416SBram Moolenaar	\ },
1104bb3e6416SBram Moolenaar	\ {
1105bb3e6416SBram Moolenaar	\    'name' : 'binary',
1106bb3e6416SBram Moolenaar	\    'cmd' : 'sort b',
1107bb3e6416SBram Moolenaar	\    'input' : [
1108bb3e6416SBram Moolenaar	\	'0b111000',
1109bb3e6416SBram Moolenaar	\	'0b101100',
1110bb3e6416SBram Moolenaar	\	'0b101001',
1111bb3e6416SBram Moolenaar	\	'0b101001',
1112bb3e6416SBram Moolenaar	\	'0b101000',
1113bb3e6416SBram Moolenaar	\	'0b000000',
1114bb3e6416SBram Moolenaar	\	'0b001000',
1115bb3e6416SBram Moolenaar	\	'0b010000',
1116bb3e6416SBram Moolenaar	\	'0b101000',
1117bb3e6416SBram Moolenaar	\	'0b100000',
1118bb3e6416SBram Moolenaar	\	'0b101010',
1119bb3e6416SBram Moolenaar	\	'0b100010',
1120bb3e6416SBram Moolenaar	\	'0b100100',
1121bb3e6416SBram Moolenaar	\	'0b100010',
1122bb3e6416SBram Moolenaar	\	'',
1123bb3e6416SBram Moolenaar	\	''
1124bb3e6416SBram Moolenaar	\    ],
1125bb3e6416SBram Moolenaar	\    'expected' : [
1126bb3e6416SBram Moolenaar	\	'',
1127bb3e6416SBram Moolenaar	\	'',
1128bb3e6416SBram Moolenaar	\	'0b000000',
1129bb3e6416SBram Moolenaar	\	'0b001000',
1130bb3e6416SBram Moolenaar	\	'0b010000',
1131bb3e6416SBram Moolenaar	\	'0b100000',
1132bb3e6416SBram Moolenaar	\	'0b100010',
1133bb3e6416SBram Moolenaar	\	'0b100010',
1134bb3e6416SBram Moolenaar	\	'0b100100',
1135bb3e6416SBram Moolenaar	\	'0b101000',
1136bb3e6416SBram Moolenaar	\	'0b101000',
1137bb3e6416SBram Moolenaar	\	'0b101001',
1138bb3e6416SBram Moolenaar	\	'0b101001',
1139bb3e6416SBram Moolenaar	\	'0b101010',
1140bb3e6416SBram Moolenaar	\	'0b101100',
1141bb3e6416SBram Moolenaar	\	'0b111000'
1142bb3e6416SBram Moolenaar	\    ]
1143bb3e6416SBram Moolenaar	\ },
1144bb3e6416SBram Moolenaar	\ {
1145bb3e6416SBram Moolenaar	\    'name' : 'binary with leading characters',
1146bb3e6416SBram Moolenaar	\    'cmd' : 'sort b',
1147bb3e6416SBram Moolenaar	\    'input' : [
1148bb3e6416SBram Moolenaar	\	'0b100010',
1149bb3e6416SBram Moolenaar	\	'0b010000',
1150bb3e6416SBram Moolenaar	\	' 0b101001',
1151bb3e6416SBram Moolenaar	\	'b0b101100',
1152bb3e6416SBram Moolenaar	\	'0b100010',
1153bb3e6416SBram Moolenaar	\	' 0b100100',
1154bb3e6416SBram Moolenaar	\	'a0b001000',
1155bb3e6416SBram Moolenaar	\	'0b101000',
1156bb3e6416SBram Moolenaar	\	'0b101000',
1157bb3e6416SBram Moolenaar	\	'a0b101001',
1158bb3e6416SBram Moolenaar	\	'ab0b100000',
1159bb3e6416SBram Moolenaar	\	'0b101010',
1160bb3e6416SBram Moolenaar	\	'0b000000',
1161bb3e6416SBram Moolenaar	\	'b0b111000',
1162bb3e6416SBram Moolenaar	\	'',
1163bb3e6416SBram Moolenaar	\	''
1164bb3e6416SBram Moolenaar	\    ],
1165bb3e6416SBram Moolenaar	\    'expected' : [
1166bb3e6416SBram Moolenaar	\	'',
1167bb3e6416SBram Moolenaar	\	'',
1168bb3e6416SBram Moolenaar	\	'0b000000',
1169bb3e6416SBram Moolenaar	\	'a0b001000',
1170bb3e6416SBram Moolenaar	\	'0b010000',
1171bb3e6416SBram Moolenaar	\	'ab0b100000',
1172bb3e6416SBram Moolenaar	\	'0b100010',
1173bb3e6416SBram Moolenaar	\	'0b100010',
1174bb3e6416SBram Moolenaar	\	' 0b100100',
1175bb3e6416SBram Moolenaar	\	'0b101000',
1176bb3e6416SBram Moolenaar	\	'0b101000',
1177bb3e6416SBram Moolenaar	\	' 0b101001',
1178bb3e6416SBram Moolenaar	\	'a0b101001',
1179bb3e6416SBram Moolenaar	\	'0b101010',
1180bb3e6416SBram Moolenaar	\	'b0b101100',
1181bb3e6416SBram Moolenaar	\	'b0b111000'
1182bb3e6416SBram Moolenaar	\    ]
1183bb3e6416SBram Moolenaar	\ },
1184bb3e6416SBram Moolenaar	\ {
1185dc9e955fSBram Moolenaar	\    'name' : 'alphabetical, sorted input',
1186dc9e955fSBram Moolenaar	\    'cmd' : 'sort',
1187dc9e955fSBram Moolenaar	\    'input' : [
1188dc9e955fSBram Moolenaar	\	'a',
1189dc9e955fSBram Moolenaar	\	'b',
1190dc9e955fSBram Moolenaar	\	'c',
1191dc9e955fSBram Moolenaar	\    ],
1192dc9e955fSBram Moolenaar	\    'expected' : [
1193dc9e955fSBram Moolenaar	\	'a',
1194dc9e955fSBram Moolenaar	\	'b',
1195dc9e955fSBram Moolenaar	\	'c',
1196dc9e955fSBram Moolenaar	\    ]
1197dc9e955fSBram Moolenaar	\ },
1198dc9e955fSBram Moolenaar	\ {
1199dc9e955fSBram Moolenaar	\    'name' : 'alphabetical, sorted input, unique at end',
1200dc9e955fSBram Moolenaar	\    'cmd' : 'sort u',
1201dc9e955fSBram Moolenaar	\    'input' : [
1202dc9e955fSBram Moolenaar	\	'aa',
1203dc9e955fSBram Moolenaar	\	'bb',
1204dc9e955fSBram Moolenaar	\	'cc',
1205dc9e955fSBram Moolenaar	\	'cc',
1206dc9e955fSBram Moolenaar	\    ],
1207dc9e955fSBram Moolenaar	\    'expected' : [
1208dc9e955fSBram Moolenaar	\	'aa',
1209dc9e955fSBram Moolenaar	\	'bb',
1210dc9e955fSBram Moolenaar	\	'cc',
1211dc9e955fSBram Moolenaar	\    ]
1212dc9e955fSBram Moolenaar	\ },
12135d98dc2aSBram Moolenaar	\ {
12145d98dc2aSBram Moolenaar	\    'name' : 'sort one line buffer',
12155d98dc2aSBram Moolenaar	\    'cmd' : 'sort',
12165d98dc2aSBram Moolenaar	\    'input' : [
12175d98dc2aSBram Moolenaar	\	'single line'
12185d98dc2aSBram Moolenaar	\    ],
12195d98dc2aSBram Moolenaar	\    'expected' : [
12205d98dc2aSBram Moolenaar	\	'single line'
12215d98dc2aSBram Moolenaar	\    ]
12225d98dc2aSBram Moolenaar	\ },
12235d98dc2aSBram Moolenaar	\ {
12245d98dc2aSBram Moolenaar	\    'name' : 'sort ignoring case',
12255d98dc2aSBram Moolenaar	\    'cmd' : '%sort i',
12265d98dc2aSBram Moolenaar	\    'input' : [
12275d98dc2aSBram Moolenaar	\	'BB',
12285d98dc2aSBram Moolenaar	\	'Cc',
12295d98dc2aSBram Moolenaar	\	'aa'
12305d98dc2aSBram Moolenaar	\    ],
12315d98dc2aSBram Moolenaar	\    'expected' : [
12325d98dc2aSBram Moolenaar	\	'aa',
12335d98dc2aSBram Moolenaar	\	'BB',
12345d98dc2aSBram Moolenaar	\	'Cc'
12355d98dc2aSBram Moolenaar	\    ]
12365d98dc2aSBram Moolenaar	\ },
1237bb3e6416SBram Moolenaar	\ ]
1238bb3e6416SBram Moolenaar
1239fefa6c34SBram Moolenaar    " This does not appear to work correctly on Mac.
1240fefa6c34SBram Moolenaar    if !has('mac')
1241cec77d45SBram Moolenaar      if v:collate =~? '^\(en\|fr\)_ca.utf-\?8$'
1242fefa6c34SBram Moolenaar        " en_CA.utf-8 sorts capitals before lower case
1243cec77d45SBram Moolenaar        " 'Œ' is omitted because it can sort before or after 'œ'
124455e29611SBram Moolenaar        let tests += [
124555e29611SBram Moolenaar          \ {
1246fefa6c34SBram Moolenaar          \    'name' : 'sort with locale ' .. v:collate,
1247fefa6c34SBram Moolenaar          \    'cmd' : '%sort l',
1248fefa6c34SBram Moolenaar          \    'input' : [
1249fefa6c34SBram Moolenaar          \	'A',
1250fefa6c34SBram Moolenaar          \	'E',
1251fefa6c34SBram Moolenaar          \	'O',
1252fefa6c34SBram Moolenaar          \	'À',
1253fefa6c34SBram Moolenaar          \	'È',
1254fefa6c34SBram Moolenaar          \	'É',
1255fefa6c34SBram Moolenaar          \	'Ô',
1256fefa6c34SBram Moolenaar          \	'Z',
1257fefa6c34SBram Moolenaar          \	'a',
1258fefa6c34SBram Moolenaar          \	'e',
1259fefa6c34SBram Moolenaar          \	'o',
1260fefa6c34SBram Moolenaar          \	'à',
1261fefa6c34SBram Moolenaar          \	'è',
1262fefa6c34SBram Moolenaar          \	'é',
1263fefa6c34SBram Moolenaar          \	'ô',
1264fefa6c34SBram Moolenaar          \	'œ',
1265fefa6c34SBram Moolenaar          \	'z'
1266fefa6c34SBram Moolenaar          \    ],
1267fefa6c34SBram Moolenaar          \    'expected' : [
1268fefa6c34SBram Moolenaar          \	'A',
1269fefa6c34SBram Moolenaar          \	'a',
1270fefa6c34SBram Moolenaar          \	'À',
1271fefa6c34SBram Moolenaar          \	'à',
1272fefa6c34SBram Moolenaar          \	'E',
1273fefa6c34SBram Moolenaar          \	'e',
1274fefa6c34SBram Moolenaar          \	'É',
1275fefa6c34SBram Moolenaar          \	'é',
1276fefa6c34SBram Moolenaar          \	'È',
1277fefa6c34SBram Moolenaar          \	'è',
1278fefa6c34SBram Moolenaar          \	'O',
1279fefa6c34SBram Moolenaar          \	'o',
1280fefa6c34SBram Moolenaar          \	'Ô',
1281fefa6c34SBram Moolenaar          \	'ô',
1282fefa6c34SBram Moolenaar          \	'œ',
1283fefa6c34SBram Moolenaar          \	'Z',
1284fefa6c34SBram Moolenaar          \	'z'
1285fefa6c34SBram Moolenaar          \    ]
1286fefa6c34SBram Moolenaar          \ },
1287fefa6c34SBram Moolenaar          \ ]
1288fefa6c34SBram Moolenaar      elseif v:collate =~? '^\(en\|es\|de\|fr\|it\|nl\).*\.utf-\?8$'
1289fefa6c34SBram Moolenaar      " With these locales, the accentuated letters are ordered
1290fefa6c34SBram Moolenaar      " similarly to the non-accentuated letters.
1291fefa6c34SBram Moolenaar        let tests += [
1292fefa6c34SBram Moolenaar          \ {
1293fefa6c34SBram Moolenaar          \    'name' : 'sort with locale ' .. v:collate,
129455e29611SBram Moolenaar          \    'cmd' : '%sort l',
129555e29611SBram Moolenaar          \    'input' : [
129655e29611SBram Moolenaar          \	'A',
129755e29611SBram Moolenaar          \	'E',
129855e29611SBram Moolenaar          \	'O',
129955e29611SBram Moolenaar          \	'À',
130055e29611SBram Moolenaar          \	'È',
130155e29611SBram Moolenaar          \	'É',
130255e29611SBram Moolenaar          \	'Ô',
130355e29611SBram Moolenaar          \	'Œ',
130455e29611SBram Moolenaar          \	'Z',
130555e29611SBram Moolenaar          \	'a',
130655e29611SBram Moolenaar          \	'e',
130755e29611SBram Moolenaar          \	'o',
130855e29611SBram Moolenaar          \	'à',
130955e29611SBram Moolenaar          \	'è',
131055e29611SBram Moolenaar          \	'é',
131155e29611SBram Moolenaar          \	'ô',
131255e29611SBram Moolenaar          \	'œ',
131355e29611SBram Moolenaar          \	'z'
131455e29611SBram Moolenaar          \    ],
131555e29611SBram Moolenaar          \    'expected' : [
131655e29611SBram Moolenaar          \	'a',
131755e29611SBram Moolenaar          \	'A',
131855e29611SBram Moolenaar          \	'à',
131955e29611SBram Moolenaar          \	'À',
132055e29611SBram Moolenaar          \	'e',
132155e29611SBram Moolenaar          \	'E',
132255e29611SBram Moolenaar          \	'é',
132355e29611SBram Moolenaar          \	'É',
132455e29611SBram Moolenaar          \	'è',
132555e29611SBram Moolenaar          \	'È',
132655e29611SBram Moolenaar          \	'o',
132755e29611SBram Moolenaar          \	'O',
132855e29611SBram Moolenaar          \	'ô',
132955e29611SBram Moolenaar          \	'Ô',
133055e29611SBram Moolenaar          \	'œ',
133155e29611SBram Moolenaar          \	'Œ',
133255e29611SBram Moolenaar          \	'z',
133355e29611SBram Moolenaar          \	'Z'
133455e29611SBram Moolenaar          \    ]
133555e29611SBram Moolenaar          \ },
133655e29611SBram Moolenaar          \ ]
133755e29611SBram Moolenaar    endif
1338fefa6c34SBram Moolenaar  endif
13395feabe00SBram Moolenaar  if has('float')
13405feabe00SBram Moolenaar    let tests += [
13415feabe00SBram Moolenaar          \ {
13425feabe00SBram Moolenaar          \    'name' : 'float',
13435feabe00SBram Moolenaar          \    'cmd' : 'sort f',
13445feabe00SBram Moolenaar          \    'input' : [
13455feabe00SBram Moolenaar          \	'1.234',
13465feabe00SBram Moolenaar          \	'0.88',
13475feabe00SBram Moolenaar          \	'  +  123.456',
13485feabe00SBram Moolenaar          \	'1.15e-6',
13495feabe00SBram Moolenaar          \	'-1.1e3',
13505feabe00SBram Moolenaar          \	'-1.01e3',
13515feabe00SBram Moolenaar          \	'',
13525feabe00SBram Moolenaar          \	''
13535feabe00SBram Moolenaar          \    ],
13545feabe00SBram Moolenaar          \    'expected' : [
13555feabe00SBram Moolenaar          \	'',
13565feabe00SBram Moolenaar          \	'',
13575feabe00SBram Moolenaar          \	'-1.1e3',
13585feabe00SBram Moolenaar          \	'-1.01e3',
13595feabe00SBram Moolenaar          \	'1.15e-6',
13605feabe00SBram Moolenaar          \	'0.88',
13615feabe00SBram Moolenaar          \	'1.234',
13625feabe00SBram Moolenaar          \	'  +  123.456'
13635feabe00SBram Moolenaar          \    ]
13645feabe00SBram Moolenaar          \ },
13655feabe00SBram Moolenaar          \ ]
13665feabe00SBram Moolenaar  endif
13675feabe00SBram Moolenaar
1368bb3e6416SBram Moolenaar  for t in tests
1369bb3e6416SBram Moolenaar    enew!
1370bb3e6416SBram Moolenaar    call append(0, t.input)
1371bb3e6416SBram Moolenaar    $delete _
1372dc9e955fSBram Moolenaar    setlocal nomodified
1373dc9e955fSBram Moolenaar    execute t.cmd
1374dc9e955fSBram Moolenaar
1375bb3e6416SBram Moolenaar    call assert_equal(t.expected, getline(1, '$'), t.name)
1376dc9e955fSBram Moolenaar
1377dc9e955fSBram Moolenaar    " Previously, the ":sort" command would set 'modified' even if the buffer
1378dc9e955fSBram Moolenaar    " contents did not change.  Here, we check that this problem is fixed.
1379dc9e955fSBram Moolenaar    if t.input == t.expected
1380dc9e955fSBram Moolenaar      call assert_false(&modified, t.name . ': &mod is not correct')
1381dc9e955fSBram Moolenaar    else
1382dc9e955fSBram Moolenaar      call assert_true(&modified, t.name . ': &mod is not correct')
1383dc9e955fSBram Moolenaar    endif
1384bb3e6416SBram Moolenaar  endfor
1385bb3e6416SBram Moolenaar
13865d98dc2aSBram Moolenaar  " Needs at least two lines for this test
13875d98dc2aSBram Moolenaar  call setline(1, ['line1', 'line2'])
13885d98dc2aSBram Moolenaar  call assert_fails('sort no', 'E474:')
13895d98dc2aSBram Moolenaar  call assert_fails('sort c', 'E475:')
13902c5ed4e3SBram Moolenaar  call assert_fails('sort #pat%', 'E654:')
1391531be47aSBram Moolenaar  call assert_fails('sort /\%(/', 'E53:')
1392bb3e6416SBram Moolenaar
1393bb3e6416SBram Moolenaar  enew!
1394bb3e6416SBram Moolenaarendfunc
1395b0e982bfSBram Moolenaar
1396a25e3d06SBram Moolenaarfunc Test_sort_large_num()
1397a25e3d06SBram Moolenaar  new
1398a25e3d06SBram Moolenaar  a
1399a25e3d06SBram Moolenaar-2147483648
1400a25e3d06SBram Moolenaar-2147483647
1401a25e3d06SBram Moolenaar
1402a25e3d06SBram Moolenaar-1
1403a25e3d06SBram Moolenaar0
1404a25e3d06SBram Moolenaar1
1405a25e3d06SBram Moolenaar-2147483646
1406a25e3d06SBram Moolenaar2147483646
1407a25e3d06SBram Moolenaar2147483647
1408a25e3d06SBram Moolenaar2147483647
1409a25e3d06SBram Moolenaar-2147483648
1410a25e3d06SBram Moolenaarabc
1411a25e3d06SBram Moolenaar
1412a25e3d06SBram Moolenaar.
1413a25e3d06SBram Moolenaar  " Numerical sort. Non-numeric lines are ordered before numerical lines.
1414a25e3d06SBram Moolenaar  " Ordering of non-numerical is stable.
1415a25e3d06SBram Moolenaar  sort n
1416a25e3d06SBram Moolenaar  call assert_equal(['',
1417a25e3d06SBram Moolenaar  \                  'abc',
1418a25e3d06SBram Moolenaar  \                  '',
1419a25e3d06SBram Moolenaar  \                  '-2147483648',
1420a25e3d06SBram Moolenaar  \                  '-2147483648',
1421a25e3d06SBram Moolenaar  \                  '-2147483647',
1422a25e3d06SBram Moolenaar  \                  '-2147483646',
1423a25e3d06SBram Moolenaar  \                  '-1',
1424a25e3d06SBram Moolenaar  \                  '0',
1425a25e3d06SBram Moolenaar  \                  '1',
1426a25e3d06SBram Moolenaar  \                  '2147483646',
1427a25e3d06SBram Moolenaar  \                  '2147483647',
1428a25e3d06SBram Moolenaar  \                  '2147483647'], getline(1, '$'))
1429a25e3d06SBram Moolenaar  bwipe!
1430a25e3d06SBram Moolenaar
1431a25e3d06SBram Moolenaar  new
1432a25e3d06SBram Moolenaar  a
1433a25e3d06SBram Moolenaar-9223372036854775808
1434a25e3d06SBram Moolenaar-9223372036854775807
1435a25e3d06SBram Moolenaar
1436a25e3d06SBram Moolenaar-1
1437a25e3d06SBram Moolenaar0
1438a25e3d06SBram Moolenaar1
1439a25e3d06SBram Moolenaar-9223372036854775806
1440a25e3d06SBram Moolenaar9223372036854775806
1441a25e3d06SBram Moolenaar9223372036854775807
1442a25e3d06SBram Moolenaar9223372036854775807
1443a25e3d06SBram Moolenaar-9223372036854775808
1444a25e3d06SBram Moolenaarabc
1445a25e3d06SBram Moolenaar
1446a25e3d06SBram Moolenaar.
1447a25e3d06SBram Moolenaar  sort n
1448a25e3d06SBram Moolenaar  call assert_equal(['',
1449a25e3d06SBram Moolenaar  \                  'abc',
1450a25e3d06SBram Moolenaar  \                  '',
1451a25e3d06SBram Moolenaar  \                  '-9223372036854775808',
1452a25e3d06SBram Moolenaar  \                  '-9223372036854775808',
1453a25e3d06SBram Moolenaar  \                  '-9223372036854775807',
1454a25e3d06SBram Moolenaar  \                  '-9223372036854775806',
1455a25e3d06SBram Moolenaar  \                  '-1',
1456a25e3d06SBram Moolenaar  \                  '0',
1457a25e3d06SBram Moolenaar  \                  '1',
1458a25e3d06SBram Moolenaar  \                  '9223372036854775806',
1459a25e3d06SBram Moolenaar  \                  '9223372036854775807',
1460a25e3d06SBram Moolenaar  \                  '9223372036854775807'], getline(1, '$'))
1461a25e3d06SBram Moolenaar  bwipe!
1462a25e3d06SBram Moolenaarendfunc
1463a25e3d06SBram Moolenaar
1464a25e3d06SBram Moolenaar
1465b0e982bfSBram Moolenaarfunc Test_sort_cmd_report()
1466b0e982bfSBram Moolenaar    enew!
1467b0e982bfSBram Moolenaar    call append(0, repeat([1], 3) + repeat([2], 3) + repeat([3], 3))
1468b0e982bfSBram Moolenaar    $delete _
1469b0e982bfSBram Moolenaar    setlocal nomodified
1470b0e982bfSBram Moolenaar    let res = execute('%sort u')
1471b0e982bfSBram Moolenaar
1472b0e982bfSBram Moolenaar    call assert_equal([1,2,3], map(getline(1, '$'), 'v:val+0'))
1473b0e982bfSBram Moolenaar    call assert_match("6 fewer lines", res)
1474b0e982bfSBram Moolenaar    enew!
1475b0e982bfSBram Moolenaar    call append(0, repeat([1], 3) + repeat([2], 3) + repeat([3], 3))
1476b0e982bfSBram Moolenaar    $delete _
1477b0e982bfSBram Moolenaar    setlocal nomodified report=10
1478b0e982bfSBram Moolenaar    let res = execute('%sort u')
1479b0e982bfSBram Moolenaar
1480b0e982bfSBram Moolenaar    call assert_equal([1,2,3], map(getline(1, '$'), 'v:val+0'))
1481b0e982bfSBram Moolenaar    call assert_equal("", res)
1482b0e982bfSBram Moolenaar    enew!
1483b0e982bfSBram Moolenaar    call append(0, repeat([1], 3) + repeat([2], 3) + repeat([3], 3))
1484b0e982bfSBram Moolenaar    $delete _
1485b0e982bfSBram Moolenaar    setl report&vim
1486b0e982bfSBram Moolenaar    setlocal nomodified
1487b0e982bfSBram Moolenaar    let res = execute('1g/^/%sort u')
1488b0e982bfSBram Moolenaar
1489b0e982bfSBram Moolenaar    call assert_equal([1,2,3], map(getline(1, '$'), 'v:val+0'))
1490b0e982bfSBram Moolenaar    " the output comes from the :g command, not from the :sort
1491b0e982bfSBram Moolenaar    call assert_match("6 fewer lines", res)
1492b0e982bfSBram Moolenaar    enew!
1493b0e982bfSBram Moolenaarendfunc
14945d98dc2aSBram Moolenaar
14955d98dc2aSBram Moolenaar" Test for a :sort command followed by another command
14965d98dc2aSBram Moolenaarfunc Test_sort_followed_by_cmd()
14975d98dc2aSBram Moolenaar  new
14985d98dc2aSBram Moolenaar  let var = ''
14995d98dc2aSBram Moolenaar  call setline(1, ['cc', 'aa', 'bb'])
15005d98dc2aSBram Moolenaar  %sort | let var = "sortcmdtest"
15015d98dc2aSBram Moolenaar  call assert_equal(var, "sortcmdtest")
15025d98dc2aSBram Moolenaar  call assert_equal(['aa', 'bb', 'cc'], getline(1, '$'))
15035d98dc2aSBram Moolenaar  " Test for :sort followed by a comment
15045d98dc2aSBram Moolenaar  call setline(1, ['3b', '1c', '2a'])
15055d98dc2aSBram Moolenaar  %sort /\d\+/ " sort alphabetically
15065d98dc2aSBram Moolenaar  call assert_equal(['2a', '3b', '1c'], getline(1, '$'))
15075d98dc2aSBram Moolenaar  close!
15085d98dc2aSBram Moolenaarendfunc
15095d98dc2aSBram Moolenaar
15105d98dc2aSBram Moolenaar" Test for :sort using last search pattern
15115d98dc2aSBram Moolenaarfunc Test_sort_last_search_pat()
15125d98dc2aSBram Moolenaar  new
15135d98dc2aSBram Moolenaar  let @/ = '\d\+'
15145d98dc2aSBram Moolenaar  call setline(1, ['3b', '1c', '2a'])
15155d98dc2aSBram Moolenaar  sort //
15165d98dc2aSBram Moolenaar  call assert_equal(['2a', '3b', '1c'], getline(1, '$'))
15175d98dc2aSBram Moolenaar  close!
15185d98dc2aSBram Moolenaarendfunc
15195d98dc2aSBram Moolenaar
15209f6277bdSBram Moolenaar" Test for :sort with no last search pattern
15219f6277bdSBram Moolenaarfunc Test_sort_with_no_last_search_pat()
15229f6277bdSBram Moolenaar  let lines =<< trim [SCRIPT]
15239f6277bdSBram Moolenaar    call setline(1, ['3b', '1c', '2a'])
15249f6277bdSBram Moolenaar    call assert_fails('sort //', 'E35:')
15259f6277bdSBram Moolenaar    call writefile(v:errors, 'Xresult')
15269f6277bdSBram Moolenaar    qall!
15279f6277bdSBram Moolenaar  [SCRIPT]
15289f6277bdSBram Moolenaar  call writefile(lines, 'Xscript')
15299f6277bdSBram Moolenaar  if RunVim([], [], '--clean -S Xscript')
15309f6277bdSBram Moolenaar    call assert_equal([], readfile('Xresult'))
15319f6277bdSBram Moolenaar  endif
15329f6277bdSBram Moolenaar  call delete('Xscript')
15339f6277bdSBram Moolenaar  call delete('Xresult')
15349f6277bdSBram Moolenaarendfunc
15359f6277bdSBram Moolenaar
15365d98dc2aSBram Moolenaar" Test for retaining marks across a :sort
15375d98dc2aSBram Moolenaarfunc Test_sort_with_marks()
15385d98dc2aSBram Moolenaar  new
15395d98dc2aSBram Moolenaar  call setline(1, ['cc', 'aa', 'bb'])
15405d98dc2aSBram Moolenaar  call setpos("'c", [0, 1, 0, 0])
15415d98dc2aSBram Moolenaar  call setpos("'a", [0, 2, 0, 0])
15425d98dc2aSBram Moolenaar  call setpos("'b", [0, 3, 0, 0])
15435d98dc2aSBram Moolenaar  %sort
15445d98dc2aSBram Moolenaar  call assert_equal(['aa', 'bb', 'cc'], getline(1, '$'))
15455d98dc2aSBram Moolenaar  call assert_equal(2, line("'a"))
15465d98dc2aSBram Moolenaar  call assert_equal(3, line("'b"))
15475d98dc2aSBram Moolenaar  call assert_equal(1, line("'c"))
15485d98dc2aSBram Moolenaar  close!
15495d98dc2aSBram Moolenaarendfunc
15505d98dc2aSBram Moolenaar
15515d98dc2aSBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab
1552