1" Tests for the "sort()" function and for the ":sort" command. 2 3func Compare1(a, b) abort 4 call sort(range(3), 'Compare2') 5 return a:a - a:b 6endfunc 7 8func Compare2(a, b) abort 9 return a:a - a:b 10endfunc 11 12func Test_sort_strings() 13 " numbers compared as strings 14 call assert_equal([1, 2, 3], sort([3, 2, 1])) 15 call assert_equal([13, 28, 3], sort([3, 28, 13])) 16endfunc 17 18func Test_sort_numeric() 19 call assert_equal([1, 2, 3], sort([3, 2, 1], 'n')) 20 call assert_equal([3, 13, 28], sort([13, 28, 3], 'n')) 21 " strings are not sorted 22 call assert_equal(['13', '28', '3'], sort(['13', '28', '3'], 'n')) 23endfunc 24 25func Test_sort_numbers() 26 call assert_equal([3, 13, 28], sort([13, 28, 3], 'N')) 27 call assert_equal(['3', '13', '28'], sort(['13', '28', '3'], 'N')) 28endfunc 29 30func Test_sort_float() 31 call assert_equal([0.28, 3, 13.5], sort([13.5, 0.28, 3], 'f')) 32endfunc 33 34func Test_sort_nested() 35 " test ability to call sort() from a compare function 36 call assert_equal([1, 3, 5], sort([3, 1, 5], 'Compare1')) 37endfunc 38 39func Test_sort_default() 40 " docs say omitted, empty or zero argument sorts on string representation. 41 call assert_equal(['2', 'A', 'AA', 'a', 1, 3.3], sort([3.3, 1, "2", "A", "a", "AA"])) 42 call assert_equal(['2', 'A', 'AA', 'a', 1, 3.3], sort([3.3, 1, "2", "A", "a", "AA"], '')) 43 call assert_equal(['2', 'A', 'AA', 'a', 1, 3.3], sort([3.3, 1, "2", "A", "a", "AA"], 0)) 44 call assert_equal(['2', 'A', 'a', 'AA', 1, 3.3], sort([3.3, 1, "2", "A", "a", "AA"], 1)) 45 call assert_fails('call sort([3.3, 1, "2"], 3)', "E474") 46endfunc 47 48" Tests for the ":sort" command. 49func Test_sort_cmd() 50 let tests = [ 51 \ { 52 \ 'name' : 'Alphabetical sort', 53 \ 'cmd' : '%sort', 54 \ 'input' : [ 55 \ 'abc', 56 \ 'ab', 57 \ 'a', 58 \ 'a321', 59 \ 'a123', 60 \ 'a122', 61 \ 'b321', 62 \ 'b123', 63 \ 'c123d', 64 \ ' 123b', 65 \ 'c321d', 66 \ 'b322b', 67 \ 'b321', 68 \ 'b321b' 69 \ ], 70 \ 'expected' : [ 71 \ ' 123b', 72 \ 'a', 73 \ 'a122', 74 \ 'a123', 75 \ 'a321', 76 \ 'ab', 77 \ 'abc', 78 \ 'b123', 79 \ 'b321', 80 \ 'b321', 81 \ 'b321b', 82 \ 'b322b', 83 \ 'c123d', 84 \ 'c321d' 85 \ ] 86 \ }, 87 \ { 88 \ 'name' : 'Numeric sort', 89 \ 'cmd' : '%sort n', 90 \ 'input' : [ 91 \ 'abc', 92 \ 'ab', 93 \ 'a321', 94 \ 'a123', 95 \ 'a122', 96 \ 'a', 97 \ 'x-22', 98 \ 'b321', 99 \ 'b123', 100 \ '', 101 \ 'c123d', 102 \ '-24', 103 \ ' 123b', 104 \ 'c321d', 105 \ '0', 106 \ 'b322b', 107 \ 'b321', 108 \ 'b321b' 109 \ ], 110 \ 'expected' : [ 111 \ 'abc', 112 \ 'ab', 113 \ 'a', 114 \ '', 115 \ '-24', 116 \ 'x-22', 117 \ '0', 118 \ 'a122', 119 \ 'a123', 120 \ 'b123', 121 \ 'c123d', 122 \ ' 123b', 123 \ 'a321', 124 \ 'b321', 125 \ 'c321d', 126 \ 'b321', 127 \ 'b321b', 128 \ 'b322b' 129 \ ] 130 \ }, 131 \ { 132 \ 'name' : 'Hexadecimal sort', 133 \ 'cmd' : '%sort x', 134 \ 'input' : [ 135 \ 'abc', 136 \ 'ab', 137 \ 'a', 138 \ 'a321', 139 \ 'a123', 140 \ 'a122', 141 \ 'b321', 142 \ 'b123', 143 \ 'c123d', 144 \ ' 123b', 145 \ 'c321d', 146 \ 'b322b', 147 \ 'b321', 148 \ 'b321b' 149 \ ], 150 \ 'expected' : [ 151 \ 'a', 152 \ 'ab', 153 \ 'abc', 154 \ ' 123b', 155 \ 'a122', 156 \ 'a123', 157 \ 'a321', 158 \ 'b123', 159 \ 'b321', 160 \ 'b321', 161 \ 'b321b', 162 \ 'b322b', 163 \ 'c123d', 164 \ 'c321d' 165 \ ] 166 \ }, 167 \ { 168 \ 'name' : 'Alphabetical unique sort', 169 \ 'cmd' : '%sort u', 170 \ 'input' : [ 171 \ 'abc', 172 \ 'ab', 173 \ 'a', 174 \ 'a321', 175 \ 'a123', 176 \ 'a122', 177 \ 'b321', 178 \ 'b123', 179 \ 'c123d', 180 \ ' 123b', 181 \ 'c321d', 182 \ 'b322b', 183 \ 'b321', 184 \ 'b321b' 185 \ ], 186 \ 'expected' : [ 187 \ ' 123b', 188 \ 'a', 189 \ 'a122', 190 \ 'a123', 191 \ 'a321', 192 \ 'ab', 193 \ 'abc', 194 \ 'b123', 195 \ 'b321', 196 \ 'b321b', 197 \ 'b322b', 198 \ 'c123d', 199 \ 'c321d' 200 \ ] 201 \ }, 202 \ { 203 \ 'name' : 'Alphabetical reverse sort', 204 \ 'cmd' : '%sort!', 205 \ 'input' : [ 206 \ 'abc', 207 \ 'ab', 208 \ 'a', 209 \ 'a321', 210 \ 'a123', 211 \ 'a122', 212 \ 'b321', 213 \ 'b123', 214 \ 'c123d', 215 \ ' 123b', 216 \ 'c321d', 217 \ 'b322b', 218 \ 'b321', 219 \ 'b321b' 220 \ ], 221 \ 'expected' : [ 222 \ 'c321d', 223 \ 'c123d', 224 \ 'b322b', 225 \ 'b321b', 226 \ 'b321', 227 \ 'b321', 228 \ 'b123', 229 \ 'abc', 230 \ 'ab', 231 \ 'a321', 232 \ 'a123', 233 \ 'a122', 234 \ 'a', 235 \ ' 123b', 236 \ ] 237 \ }, 238 \ { 239 \ 'name' : 'Numeric reverse sort', 240 \ 'cmd' : '%sort! n', 241 \ 'input' : [ 242 \ 'abc', 243 \ 'ab', 244 \ 'a', 245 \ 'a321', 246 \ 'a123', 247 \ 'a122', 248 \ 'b321', 249 \ 'b123', 250 \ 'c123d', 251 \ ' 123b', 252 \ 'c321d', 253 \ 'b322b', 254 \ 'b321', 255 \ 'b321b' 256 \ ], 257 \ 'expected' : [ 258 \ 'b322b', 259 \ 'b321b', 260 \ 'b321', 261 \ 'c321d', 262 \ 'b321', 263 \ 'a321', 264 \ ' 123b', 265 \ 'c123d', 266 \ 'b123', 267 \ 'a123', 268 \ 'a122', 269 \ 'a', 270 \ 'ab', 271 \ 'abc' 272 \ ] 273 \ }, 274 \ { 275 \ 'name' : 'Unique reverse sort', 276 \ 'cmd' : 'sort! u', 277 \ 'input' : [ 278 \ 'abc', 279 \ 'ab', 280 \ 'a', 281 \ 'a321', 282 \ 'a123', 283 \ 'a122', 284 \ 'b321', 285 \ 'b123', 286 \ 'c123d', 287 \ ' 123b', 288 \ 'c321d', 289 \ 'b322b', 290 \ 'b321', 291 \ 'b321b' 292 \ ], 293 \ 'expected' : [ 294 \ 'c321d', 295 \ 'c123d', 296 \ 'b322b', 297 \ 'b321b', 298 \ 'b321', 299 \ 'b123', 300 \ 'abc', 301 \ 'ab', 302 \ 'a321', 303 \ 'a123', 304 \ 'a122', 305 \ 'a', 306 \ ' 123b', 307 \ ] 308 \ }, 309 \ { 310 \ 'name' : 'Octal sort', 311 \ 'cmd' : 'sort o', 312 \ 'input' : [ 313 \ 'abc', 314 \ 'ab', 315 \ 'a', 316 \ 'a321', 317 \ 'a123', 318 \ 'a122', 319 \ 'b321', 320 \ 'b123', 321 \ 'c123d', 322 \ ' 123b', 323 \ 'c321d', 324 \ 'b322b', 325 \ 'b321', 326 \ 'b321b', 327 \ '', 328 \ '' 329 \ ], 330 \ 'expected' : [ 331 \ 'abc', 332 \ 'ab', 333 \ 'a', 334 \ '', 335 \ '', 336 \ 'a122', 337 \ 'a123', 338 \ 'b123', 339 \ 'c123d', 340 \ ' 123b', 341 \ 'a321', 342 \ 'b321', 343 \ 'c321d', 344 \ 'b321', 345 \ 'b321b', 346 \ 'b322b' 347 \ ] 348 \ }, 349 \ { 350 \ 'name' : 'Reverse hexadecimal sort', 351 \ 'cmd' : 'sort! x', 352 \ 'input' : [ 353 \ 'abc', 354 \ 'ab', 355 \ 'a', 356 \ 'a321', 357 \ 'a123', 358 \ 'a122', 359 \ 'b321', 360 \ 'b123', 361 \ 'c123d', 362 \ ' 123b', 363 \ 'c321d', 364 \ 'b322b', 365 \ 'b321', 366 \ 'b321b', 367 \ '', 368 \ '' 369 \ ], 370 \ 'expected' : [ 371 \ 'c321d', 372 \ 'c123d', 373 \ 'b322b', 374 \ 'b321b', 375 \ 'b321', 376 \ 'b321', 377 \ 'b123', 378 \ 'a321', 379 \ 'a123', 380 \ 'a122', 381 \ ' 123b', 382 \ 'abc', 383 \ 'ab', 384 \ 'a', 385 \ '', 386 \ '' 387 \ ] 388 \ }, 389 \ { 390 \ 'name' : 'Alpha (skip first character) sort', 391 \ 'cmd' : 'sort/./', 392 \ 'input' : [ 393 \ 'abc', 394 \ 'ab', 395 \ 'a', 396 \ 'a321', 397 \ 'a123', 398 \ 'a122', 399 \ 'b321', 400 \ 'b123', 401 \ 'c123d', 402 \ ' 123b', 403 \ 'c321d', 404 \ 'b322b', 405 \ 'b321', 406 \ 'b321b', 407 \ '', 408 \ '' 409 \ ], 410 \ 'expected' : [ 411 \ 'a', 412 \ '', 413 \ '', 414 \ 'a122', 415 \ 'a123', 416 \ 'b123', 417 \ ' 123b', 418 \ 'c123d', 419 \ 'a321', 420 \ 'b321', 421 \ 'b321', 422 \ 'b321b', 423 \ 'c321d', 424 \ 'b322b', 425 \ 'ab', 426 \ 'abc' 427 \ ] 428 \ }, 429 \ { 430 \ 'name' : 'Alpha (skip first 2 characters) sort', 431 \ 'cmd' : 'sort/../', 432 \ 'input' : [ 433 \ 'abc', 434 \ 'ab', 435 \ 'a', 436 \ 'a321', 437 \ 'a123', 438 \ 'a122', 439 \ 'b321', 440 \ 'b123', 441 \ 'c123d', 442 \ ' 123b', 443 \ 'c321d', 444 \ 'b322b', 445 \ 'b321', 446 \ 'b321b', 447 \ '', 448 \ '' 449 \ ], 450 \ 'expected' : [ 451 \ 'ab', 452 \ 'a', 453 \ '', 454 \ '', 455 \ 'a321', 456 \ 'b321', 457 \ 'b321', 458 \ 'b321b', 459 \ 'c321d', 460 \ 'a122', 461 \ 'b322b', 462 \ 'a123', 463 \ 'b123', 464 \ ' 123b', 465 \ 'c123d', 466 \ 'abc' 467 \ ] 468 \ }, 469 \ { 470 \ 'name' : 'alpha, unique, skip first 2 characters', 471 \ 'cmd' : 'sort/../u', 472 \ 'input' : [ 473 \ 'abc', 474 \ 'ab', 475 \ 'a', 476 \ 'a321', 477 \ 'a123', 478 \ 'a122', 479 \ 'b321', 480 \ 'b123', 481 \ 'c123d', 482 \ ' 123b', 483 \ 'c321d', 484 \ 'b322b', 485 \ 'b321', 486 \ 'b321b', 487 \ '', 488 \ '' 489 \ ], 490 \ 'expected' : [ 491 \ 'ab', 492 \ 'a', 493 \ '', 494 \ 'a321', 495 \ 'b321', 496 \ 'b321b', 497 \ 'c321d', 498 \ 'a122', 499 \ 'b322b', 500 \ 'a123', 501 \ 'b123', 502 \ ' 123b', 503 \ 'c123d', 504 \ 'abc' 505 \ ] 506 \ }, 507 \ { 508 \ 'name' : 'numeric, skip first character', 509 \ 'cmd' : 'sort/./n', 510 \ 'input' : [ 511 \ 'abc', 512 \ 'ab', 513 \ 'a', 514 \ 'a321', 515 \ 'a123', 516 \ 'a122', 517 \ 'b321', 518 \ 'b123', 519 \ 'c123d', 520 \ ' 123b', 521 \ 'c321d', 522 \ 'b322b', 523 \ 'b321', 524 \ 'b321b', 525 \ '', 526 \ '' 527 \ ], 528 \ 'expected' : [ 529 \ 'abc', 530 \ 'ab', 531 \ 'a', 532 \ '', 533 \ '', 534 \ 'a122', 535 \ 'a123', 536 \ 'b123', 537 \ 'c123d', 538 \ ' 123b', 539 \ 'a321', 540 \ 'b321', 541 \ 'c321d', 542 \ 'b321', 543 \ 'b321b', 544 \ 'b322b' 545 \ ] 546 \ }, 547 \ { 548 \ 'name' : 'alpha, sort on first character', 549 \ 'cmd' : 'sort/./r', 550 \ 'input' : [ 551 \ 'abc', 552 \ 'ab', 553 \ 'a', 554 \ 'a321', 555 \ 'a123', 556 \ 'a122', 557 \ 'b321', 558 \ 'b123', 559 \ 'c123d', 560 \ ' 123b', 561 \ 'c321d', 562 \ 'b322b', 563 \ 'b321', 564 \ 'b321b', 565 \ '', 566 \ '' 567 \ ], 568 \ 'expected' : [ 569 \ '', 570 \ '', 571 \ ' 123b', 572 \ 'abc', 573 \ 'ab', 574 \ 'a', 575 \ 'a321', 576 \ 'a123', 577 \ 'a122', 578 \ 'b321', 579 \ 'b123', 580 \ 'b322b', 581 \ 'b321', 582 \ 'b321b', 583 \ 'c123d', 584 \ 'c321d' 585 \ ] 586 \ }, 587 \ { 588 \ 'name' : 'alpha, sort on first 2 characters', 589 \ 'cmd' : 'sort/../r', 590 \ 'input' : [ 591 \ 'abc', 592 \ 'ab', 593 \ 'a', 594 \ 'a321', 595 \ 'a123', 596 \ 'a122', 597 \ 'b321', 598 \ 'b123', 599 \ 'c123d', 600 \ ' 123b', 601 \ 'c321d', 602 \ 'b322b', 603 \ 'b321', 604 \ 'b321b', 605 \ '', 606 \ '' 607 \ ], 608 \ 'expected' : [ 609 \ 'a', 610 \ '', 611 \ '', 612 \ ' 123b', 613 \ 'a123', 614 \ 'a122', 615 \ 'a321', 616 \ 'abc', 617 \ 'ab', 618 \ 'b123', 619 \ 'b321', 620 \ 'b322b', 621 \ 'b321', 622 \ 'b321b', 623 \ 'c123d', 624 \ 'c321d' 625 \ ] 626 \ }, 627 \ { 628 \ 'name' : 'numeric, sort on first character', 629 \ 'cmd' : 'sort/./rn', 630 \ 'input' : [ 631 \ 'abc', 632 \ 'ab', 633 \ 'a', 634 \ 'a321', 635 \ 'a123', 636 \ 'a122', 637 \ 'b321', 638 \ 'b123', 639 \ 'c123d', 640 \ ' 123b', 641 \ 'c321d', 642 \ 'b322b', 643 \ 'b321', 644 \ 'b321b', 645 \ '', 646 \ '' 647 \ ], 648 \ 'expected' : [ 649 \ 'abc', 650 \ 'ab', 651 \ 'a', 652 \ 'a321', 653 \ 'a123', 654 \ 'a122', 655 \ 'b321', 656 \ 'b123', 657 \ 'c123d', 658 \ ' 123b', 659 \ 'c321d', 660 \ 'b322b', 661 \ 'b321', 662 \ 'b321b', 663 \ '', 664 \ '' 665 \ ] 666 \ }, 667 \ { 668 \ 'name' : 'alpha, skip past first digit', 669 \ 'cmd' : 'sort/\d/', 670 \ 'input' : [ 671 \ 'abc', 672 \ 'ab', 673 \ 'a', 674 \ 'a321', 675 \ 'a123', 676 \ 'a122', 677 \ 'b321', 678 \ 'b123', 679 \ 'c123d', 680 \ ' 123b', 681 \ 'c321d', 682 \ 'b322b', 683 \ 'b321', 684 \ 'b321b', 685 \ '', 686 \ '' 687 \ ], 688 \ 'expected' : [ 689 \ 'abc', 690 \ 'ab', 691 \ 'a', 692 \ '', 693 \ '', 694 \ 'a321', 695 \ 'b321', 696 \ 'b321', 697 \ 'b321b', 698 \ 'c321d', 699 \ 'a122', 700 \ 'b322b', 701 \ 'a123', 702 \ 'b123', 703 \ ' 123b', 704 \ 'c123d' 705 \ ] 706 \ }, 707 \ { 708 \ 'name' : 'alpha, sort on first digit', 709 \ 'cmd' : 'sort/\d/r', 710 \ 'input' : [ 711 \ 'abc', 712 \ 'ab', 713 \ 'a', 714 \ 'a321', 715 \ 'a123', 716 \ 'a122', 717 \ 'b321', 718 \ 'b123', 719 \ 'c123d', 720 \ ' 123b', 721 \ 'c321d', 722 \ 'b322b', 723 \ 'b321', 724 \ 'b321b', 725 \ '', 726 \ '' 727 \ ], 728 \ 'expected' : [ 729 \ 'abc', 730 \ 'ab', 731 \ 'a', 732 \ '', 733 \ '', 734 \ 'a123', 735 \ 'a122', 736 \ 'b123', 737 \ 'c123d', 738 \ ' 123b', 739 \ 'a321', 740 \ 'b321', 741 \ 'c321d', 742 \ 'b322b', 743 \ 'b321', 744 \ 'b321b' 745 \ ] 746 \ }, 747 \ { 748 \ 'name' : 'numeric, skip past first digit', 749 \ 'cmd' : 'sort/\d/n', 750 \ 'input' : [ 751 \ 'abc', 752 \ 'ab', 753 \ 'a', 754 \ 'a321', 755 \ 'a123', 756 \ 'a122', 757 \ 'b321', 758 \ 'b123', 759 \ 'c123d', 760 \ ' 123b', 761 \ 'c321d', 762 \ 'b322b', 763 \ 'b321', 764 \ 'b321b', 765 \ '', 766 \ '' 767 \ ], 768 \ 'expected' : [ 769 \ 'abc', 770 \ 'ab', 771 \ 'a', 772 \ '', 773 \ '', 774 \ 'a321', 775 \ 'b321', 776 \ 'c321d', 777 \ 'b321', 778 \ 'b321b', 779 \ 'a122', 780 \ 'b322b', 781 \ 'a123', 782 \ 'b123', 783 \ 'c123d', 784 \ ' 123b' 785 \ ] 786 \ }, 787 \ { 788 \ 'name' : 'numeric, sort on first digit', 789 \ 'cmd' : 'sort/\d/rn', 790 \ 'input' : [ 791 \ 'abc', 792 \ 'ab', 793 \ 'a', 794 \ 'a321', 795 \ 'a123', 796 \ 'a122', 797 \ 'b321', 798 \ 'b123', 799 \ 'c123d', 800 \ ' 123b', 801 \ 'c321d', 802 \ 'b322b', 803 \ 'b321', 804 \ 'b321b', 805 \ '', 806 \ '' 807 \ ], 808 \ 'expected' : [ 809 \ 'abc', 810 \ 'ab', 811 \ 'a', 812 \ '', 813 \ '', 814 \ 'a123', 815 \ 'a122', 816 \ 'b123', 817 \ 'c123d', 818 \ ' 123b', 819 \ 'a321', 820 \ 'b321', 821 \ 'c321d', 822 \ 'b322b', 823 \ 'b321', 824 \ 'b321b' 825 \ ] 826 \ }, 827 \ { 828 \ 'name' : 'alpha, skip past first 2 digits', 829 \ 'cmd' : 'sort/\d\d/', 830 \ 'input' : [ 831 \ 'abc', 832 \ 'ab', 833 \ 'a', 834 \ 'a321', 835 \ 'a123', 836 \ 'a122', 837 \ 'b321', 838 \ 'b123', 839 \ 'c123d', 840 \ ' 123b', 841 \ 'c321d', 842 \ 'b322b', 843 \ 'b321', 844 \ 'b321b', 845 \ '', 846 \ '' 847 \ ], 848 \ 'expected' : [ 849 \ 'abc', 850 \ 'ab', 851 \ 'a', 852 \ '', 853 \ '', 854 \ 'a321', 855 \ 'b321', 856 \ 'b321', 857 \ 'b321b', 858 \ 'c321d', 859 \ 'a122', 860 \ 'b322b', 861 \ 'a123', 862 \ 'b123', 863 \ ' 123b', 864 \ 'c123d' 865 \ ] 866 \ }, 867 \ { 868 \ 'name' : 'numeric, skip past first 2 digits', 869 \ 'cmd' : 'sort/\d\d/n', 870 \ 'input' : [ 871 \ 'abc', 872 \ 'ab', 873 \ 'a', 874 \ 'a321', 875 \ 'a123', 876 \ 'a122', 877 \ 'b321', 878 \ 'b123', 879 \ 'c123d', 880 \ ' 123b', 881 \ 'c321d', 882 \ 'b322b', 883 \ 'b321', 884 \ 'b321b', 885 \ '', 886 \ '' 887 \ ], 888 \ 'expected' : [ 889 \ 'abc', 890 \ 'ab', 891 \ 'a', 892 \ '', 893 \ '', 894 \ 'a321', 895 \ 'b321', 896 \ 'c321d', 897 \ 'b321', 898 \ 'b321b', 899 \ 'a122', 900 \ 'b322b', 901 \ 'a123', 902 \ 'b123', 903 \ 'c123d', 904 \ ' 123b' 905 \ ] 906 \ }, 907 \ { 908 \ 'name' : 'hexadecimal, skip past first 2 digits', 909 \ 'cmd' : 'sort/\d\d/x', 910 \ 'input' : [ 911 \ 'abc', 912 \ 'ab', 913 \ 'a', 914 \ 'a321', 915 \ 'a123', 916 \ 'a122', 917 \ 'b321', 918 \ 'b123', 919 \ 'c123d', 920 \ ' 123b', 921 \ 'c321d', 922 \ 'b322b', 923 \ 'b321', 924 \ 'b321b', 925 \ '', 926 \ '' 927 \ ], 928 \ 'expected' : [ 929 \ 'abc', 930 \ 'ab', 931 \ 'a', 932 \ '', 933 \ '', 934 \ 'a321', 935 \ 'b321', 936 \ 'b321', 937 \ 'a122', 938 \ 'a123', 939 \ 'b123', 940 \ 'b321b', 941 \ 'c321d', 942 \ 'b322b', 943 \ ' 123b', 944 \ 'c123d' 945 \ ] 946 \ }, 947 \ { 948 \ 'name' : 'alpha, sort on first 2 digits', 949 \ 'cmd' : 'sort/\d\d/r', 950 \ 'input' : [ 951 \ 'abc', 952 \ 'ab', 953 \ 'a', 954 \ 'a321', 955 \ 'a123', 956 \ 'a122', 957 \ 'b321', 958 \ 'b123', 959 \ 'c123d', 960 \ ' 123b', 961 \ 'c321d', 962 \ 'b322b', 963 \ 'b321', 964 \ 'b321b', 965 \ '', 966 \ '' 967 \ ], 968 \ 'expected' : [ 969 \ 'abc', 970 \ 'ab', 971 \ 'a', 972 \ '', 973 \ '', 974 \ 'a123', 975 \ 'a122', 976 \ 'b123', 977 \ 'c123d', 978 \ ' 123b', 979 \ 'a321', 980 \ 'b321', 981 \ 'c321d', 982 \ 'b322b', 983 \ 'b321', 984 \ 'b321b' 985 \ ] 986 \ }, 987 \ { 988 \ 'name' : 'numeric, sort on first 2 digits', 989 \ 'cmd' : 'sort/\d\d/rn', 990 \ 'input' : [ 991 \ 'abc', 992 \ 'ab', 993 \ 'a', 994 \ 'a321', 995 \ 'a123', 996 \ 'a122', 997 \ 'b321', 998 \ 'b123', 999 \ 'c123d', 1000 \ ' 123b', 1001 \ 'c321d', 1002 \ 'b322b', 1003 \ 'b321', 1004 \ 'b321b', 1005 \ '', 1006 \ '' 1007 \ ], 1008 \ 'expected' : [ 1009 \ 'abc', 1010 \ 'ab', 1011 \ 'a', 1012 \ '', 1013 \ '', 1014 \ 'a123', 1015 \ 'a122', 1016 \ 'b123', 1017 \ 'c123d', 1018 \ ' 123b', 1019 \ 'a321', 1020 \ 'b321', 1021 \ 'c321d', 1022 \ 'b322b', 1023 \ 'b321', 1024 \ 'b321b' 1025 \ ] 1026 \ }, 1027 \ { 1028 \ 'name' : 'hexadecimal, sort on first 2 digits', 1029 \ 'cmd' : 'sort/\d\d/rx', 1030 \ 'input' : [ 1031 \ 'abc', 1032 \ 'ab', 1033 \ 'a', 1034 \ 'a321', 1035 \ 'a123', 1036 \ 'a122', 1037 \ 'b321', 1038 \ 'b123', 1039 \ 'c123d', 1040 \ ' 123b', 1041 \ 'c321d', 1042 \ 'b322b', 1043 \ 'b321', 1044 \ 'b321b', 1045 \ '', 1046 \ '' 1047 \ ], 1048 \ 'expected' : [ 1049 \ 'abc', 1050 \ 'ab', 1051 \ 'a', 1052 \ '', 1053 \ '', 1054 \ 'a123', 1055 \ 'a122', 1056 \ 'b123', 1057 \ 'c123d', 1058 \ ' 123b', 1059 \ 'a321', 1060 \ 'b321', 1061 \ 'c321d', 1062 \ 'b322b', 1063 \ 'b321', 1064 \ 'b321b' 1065 \ ] 1066 \ }, 1067 \ { 1068 \ 'name' : 'binary', 1069 \ 'cmd' : 'sort b', 1070 \ 'input' : [ 1071 \ '0b111000', 1072 \ '0b101100', 1073 \ '0b101001', 1074 \ '0b101001', 1075 \ '0b101000', 1076 \ '0b000000', 1077 \ '0b001000', 1078 \ '0b010000', 1079 \ '0b101000', 1080 \ '0b100000', 1081 \ '0b101010', 1082 \ '0b100010', 1083 \ '0b100100', 1084 \ '0b100010', 1085 \ '', 1086 \ '' 1087 \ ], 1088 \ 'expected' : [ 1089 \ '', 1090 \ '', 1091 \ '0b000000', 1092 \ '0b001000', 1093 \ '0b010000', 1094 \ '0b100000', 1095 \ '0b100010', 1096 \ '0b100010', 1097 \ '0b100100', 1098 \ '0b101000', 1099 \ '0b101000', 1100 \ '0b101001', 1101 \ '0b101001', 1102 \ '0b101010', 1103 \ '0b101100', 1104 \ '0b111000' 1105 \ ] 1106 \ }, 1107 \ { 1108 \ 'name' : 'binary with leading characters', 1109 \ 'cmd' : 'sort b', 1110 \ 'input' : [ 1111 \ '0b100010', 1112 \ '0b010000', 1113 \ ' 0b101001', 1114 \ 'b0b101100', 1115 \ '0b100010', 1116 \ ' 0b100100', 1117 \ 'a0b001000', 1118 \ '0b101000', 1119 \ '0b101000', 1120 \ 'a0b101001', 1121 \ 'ab0b100000', 1122 \ '0b101010', 1123 \ '0b000000', 1124 \ 'b0b111000', 1125 \ '', 1126 \ '' 1127 \ ], 1128 \ 'expected' : [ 1129 \ '', 1130 \ '', 1131 \ '0b000000', 1132 \ 'a0b001000', 1133 \ '0b010000', 1134 \ 'ab0b100000', 1135 \ '0b100010', 1136 \ '0b100010', 1137 \ ' 0b100100', 1138 \ '0b101000', 1139 \ '0b101000', 1140 \ ' 0b101001', 1141 \ 'a0b101001', 1142 \ '0b101010', 1143 \ 'b0b101100', 1144 \ 'b0b111000' 1145 \ ] 1146 \ }, 1147 \ { 1148 \ 'name' : 'float', 1149 \ 'cmd' : 'sort f', 1150 \ 'input' : [ 1151 \ '1.234', 1152 \ '0.88', 1153 \ '123.456', 1154 \ '1.15e-6', 1155 \ '-1.1e3', 1156 \ '-1.01e3', 1157 \ '', 1158 \ '' 1159 \ ], 1160 \ 'expected' : [ 1161 \ '', 1162 \ '', 1163 \ '-1.1e3', 1164 \ '-1.01e3', 1165 \ '1.15e-6', 1166 \ '0.88', 1167 \ '1.234', 1168 \ '123.456' 1169 \ ] 1170 \ }, 1171 \ { 1172 \ 'name' : 'alphabetical, sorted input', 1173 \ 'cmd' : 'sort', 1174 \ 'input' : [ 1175 \ 'a', 1176 \ 'b', 1177 \ 'c', 1178 \ ], 1179 \ 'expected' : [ 1180 \ 'a', 1181 \ 'b', 1182 \ 'c', 1183 \ ] 1184 \ }, 1185 \ { 1186 \ 'name' : 'alphabetical, sorted input, unique at end', 1187 \ 'cmd' : 'sort u', 1188 \ 'input' : [ 1189 \ 'aa', 1190 \ 'bb', 1191 \ 'cc', 1192 \ 'cc', 1193 \ ], 1194 \ 'expected' : [ 1195 \ 'aa', 1196 \ 'bb', 1197 \ 'cc', 1198 \ ] 1199 \ }, 1200 \ ] 1201 1202 for t in tests 1203 enew! 1204 call append(0, t.input) 1205 $delete _ 1206 setlocal nomodified 1207 execute t.cmd 1208 1209 call assert_equal(t.expected, getline(1, '$'), t.name) 1210 1211 " Previously, the ":sort" command would set 'modified' even if the buffer 1212 " contents did not change. Here, we check that this problem is fixed. 1213 if t.input == t.expected 1214 call assert_false(&modified, t.name . ': &mod is not correct') 1215 else 1216 call assert_true(&modified, t.name . ': &mod is not correct') 1217 endif 1218 endfor 1219 1220 call assert_fails('sort no', 'E474') 1221 1222 enew! 1223endfunc 1224 1225func Test_sort_cmd_report() 1226 enew! 1227 call append(0, repeat([1], 3) + repeat([2], 3) + repeat([3], 3)) 1228 $delete _ 1229 setlocal nomodified 1230 let res = execute('%sort u') 1231 1232 call assert_equal([1,2,3], map(getline(1, '$'), 'v:val+0')) 1233 call assert_match("6 fewer lines", res) 1234 enew! 1235 call append(0, repeat([1], 3) + repeat([2], 3) + repeat([3], 3)) 1236 $delete _ 1237 setlocal nomodified report=10 1238 let res = execute('%sort u') 1239 1240 call assert_equal([1,2,3], map(getline(1, '$'), 'v:val+0')) 1241 call assert_equal("", res) 1242 enew! 1243 call append(0, repeat([1], 3) + repeat([2], 3) + repeat([3], 3)) 1244 $delete _ 1245 setl report&vim 1246 setlocal nomodified 1247 let res = execute('1g/^/%sort u') 1248 1249 call assert_equal([1,2,3], map(getline(1, '$'), 'v:val+0')) 1250 " the output comes from the :g command, not from the :sort 1251 call assert_match("6 fewer lines", res) 1252 enew! 1253 endfunc 1254