My dotfiles. Period.

list.vim 5.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. "=============================================================================
  2. " $Id: list.vim 520 2012-03-19 18:09:15Z luc.hermitte $
  3. " File: tests/lh/list.vim {{{1
  4. " Author: Luc Hermitte <EMAIL:hermitte {at} free {dot} fr>
  5. " <URL:http://code.google.com/p/lh-vim/>
  6. " License: GPLv3 with exceptions
  7. " <URL:http://code.google.com/p/lh-vim/wiki/License>
  8. " Version: 3.0.0
  9. " Created: 19th Nov 2008
  10. " Last Update: $Date: 2012-03-19 19:09:15 +0100 (Mon, 19 Mar 2012) $
  11. "------------------------------------------------------------------------
  12. " Description:
  13. " Tests for autoload/lh/list.vim
  14. "
  15. "------------------------------------------------------------------------
  16. " Installation: «install details»
  17. " History: «history»
  18. " TODO: «missing features»
  19. " }}}1
  20. "=============================================================================
  21. UTSuite [lh-vim-lib] Testing lh#list functions
  22. runtime autoload/lh/function.vim
  23. runtime autoload/lh/list.vim
  24. let s:cpo_save=&cpo
  25. set cpo&vim
  26. "------------------------------------------------------------------------
  27. " Find_if
  28. function! s:Test_Find_If_string_predicate()
  29. :let b = { 'min': 12, 'max': 42 }
  30. :let l = [ 1, 5, 48, 25, 5, 28, 6]
  31. :let i = lh#list#Find_if(l, 'v:val>v:1_.min && v:val<v:1_.max && v:val%v:2_==0', [b, 2] )
  32. " echo i . '/' . len(l)
  33. Assert i == 5
  34. Assert l[i] == 28
  35. " :echo l[i]
  36. endfunction
  37. function! s:Test_Find_If_functor_predicate()
  38. :let l = [ 1, 5, 48, 25, 5, 28, 6]
  39. :let i = lh#list#find_if(l, 'v:1_>12 && v:1_<42 && v:1_%2==0')
  40. " echo i . '/' . len(l)
  41. Assert i == 5
  42. Assert l[i] == 28
  43. " :echo l[i]
  44. endfunction
  45. function! s:Test_find_if_double_bind()
  46. :let b = { 'min': 12, 'max': 42 }
  47. :let l = [ 1, 5, 48, 25, 5, 28, 6]
  48. :let f = lh#function#bind( 'v:3_>v:1_.min && v:3_<v:1_.max && v:3_%v:2_==0')
  49. :let p = lh#function#bind(f, b,2,'v:1_')
  50. :let i = lh#list#find_if(l, p)
  51. :echo l[i]
  52. endfunction
  53. " double bind is not yet operational
  54. UTIgnore Test_find_if_double_bind
  55. "------------------------------------------------------------------------
  56. " Unique Sorting
  57. function! CmpNumbers(lhs, rhs)
  58. if a:lhs < a:rhs | return -1
  59. elseif a:lhs == a:rhs | return 0
  60. else | return +1
  61. endif
  62. endfunction
  63. function! s:Test_sort()
  64. :let l = [ 1, 5, 48, 25, 5, 28, 6]
  65. :let expected = [ 1, 5, 6, 25, 28, 48]
  66. :let s = lh#list#unique_sort(l, "CmpNumbers")
  67. " Comment string(s)
  68. Assert s == expected
  69. endfunction
  70. function! s:Test_sort2()
  71. :let l = [ 1, 5, 48, 25, 5, 28, 6]
  72. :let expected = [ 1, 5, 6, 25, 28, 48]
  73. :let s = lh#list#unique_sort2(l, "CmpNumbers")
  74. " Comment string(s)
  75. Assert s == expected
  76. endfunction
  77. "------------------------------------------------------------------------
  78. " Searchs
  79. function! s:TestBinarySearches()
  80. let v1 = [ -3, -2, -1, -1, 0, 0, 1, 2, 3, 4, 6 ]
  81. let i = lh#list#lower_bound(v1, 3)
  82. Assert v1[i] == 3
  83. let i = lh#list#upper_bound(v1, 3)
  84. Assert v1[i] == 4
  85. let r = lh#list#equal_range(v1, 3)
  86. Assert v1[r[0]:r[1]-1] == [3]
  87. let i = lh#list#lower_bound(v1, -1)
  88. Assert v1[i] == -1
  89. let i = lh#list#upper_bound(v1, -1)
  90. Assert v1[i] == 0
  91. let r = lh#list#equal_range(v1, -1)
  92. Assert v1[r[0]:r[1]-1] == [-1, -1]
  93. let i = lh#list#lower_bound(v1, 5)
  94. Assert v1[i] == 6
  95. let i = lh#list#upper_bound(v1, 5)
  96. Assert v1[i] == 6
  97. let r = lh#list#equal_range(v1, 5)
  98. Assert v1[r[0]:r[1]-1] == []
  99. Assert len(v1) == lh#list#lower_bound(v1, 10)
  100. Assert len(v1) == lh#list#upper_bound(v1, 10)
  101. Assert [len(v1), len(v1)] == lh#list#equal_range(v1, 10)
  102. endfunction
  103. "------------------------------------------------------------------------
  104. " accumulate
  105. function! s:Test_accumulate_len_strings()
  106. let strings = [ 'foo', 'bar', 'toto' ]
  107. let len = eval(lh#list#accumulate(strings, 'strlen', 'join(v:1_, "+")'))
  108. Assert len == 3+3+4
  109. endfunction
  110. function! s:Test_accumulate_join()
  111. let ll = [ 1, 2, 'foo', ['bar'] ]
  112. let res = lh#list#accumulate(ll, 'string', 'join(v:1_, " ## ")')
  113. Assert res == "1 ## 2 ## 'foo' ## ['bar']"
  114. " This test will fail because it seems :for each loop cannot iterate on
  115. " heterogeneous containers
  116. endfunction
  117. "------------------------------------------------------------------------
  118. " Copy_if
  119. function! s:Test_copy_if()
  120. :let l = [ 1, 25, 5, 48, 25, 5, 28, 6]
  121. :let expected = [ 25, 48, 25, 28, 6]
  122. :let s = lh#list#copy_if(l, [], "v:1_ > 5")
  123. " Comment string(s)
  124. Assert s == expected
  125. endfunction
  126. "------------------------------------------------------------------------
  127. " subset
  128. function! s:Test_subset()
  129. :let l = [ 1, 25, 5, 48, 25, 5, 28, 6]
  130. :let indices = [ 0, 5, 7, 3 ]
  131. :let expected = [ 1, 5, 6, 48 ]
  132. :let s = lh#list#subset(l, indices)
  133. " Comment string(s)
  134. Assert s == expected
  135. endfunction
  136. "------------------------------------------------------------------------
  137. " intersect
  138. function! s:Test_intersect()
  139. :let l1 = [ 1, 25, 7, 48, 26, 5, 28, 6]
  140. :let l2 = [ 3, 8, 7, 25, 6 ]
  141. :let expected = [ 25, 7, 6 ]
  142. :let s = lh#list#intersect(l1, l2)
  143. " Comment string(s)
  144. Assert s == expected
  145. endfunction
  146. "------------------------------------------------------------------------
  147. let &cpo=s:cpo_save
  148. "=============================================================================
  149. " vim600: set fdm=marker: