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