" Test for lambda and closure

function! Test_lambda_with_filter()
  let s:x = 2
  call assert_equal([2, 3], filter([1, 2, 3], {i, v -> v >= s:x}))
endfunction

function! Test_lambda_with_map()
  let s:x = 1
  call assert_equal([2, 3, 4], map([1, 2, 3], {i, v -> v + s:x}))
endfunction

function! Test_lambda_with_sort()
  call assert_equal([1, 2, 3, 4, 7], sort([3,7,2,1,4], {a, b -> a - b}))
endfunction

function! Test_lambda_with_timer()
  if !has('timers')
    return
  endif

  let s:n = 0
  let s:timer_id = 0
  function! s:Foo()
    "let n = 0
    let s:timer_id = timer_start(50, {-> execute("let s:n += 1 | echo s:n", "")}, {"repeat": -1})
  endfunction

  call s:Foo()
  sleep 200ms
  " do not collect lambda
  call test_garbagecollect_now()
  let m = s:n
  sleep 200ms
  call timer_stop(s:timer_id)
  call assert_true(m > 1)
  call assert_true(s:n > m + 1)
  call assert_true(s:n < 9)
endfunction

function! Test_lambda_with_partial()
  let l:Cb = function({... -> ['zero', a:1, a:2, a:3]}, ['one', 'two'])
  call assert_equal(['zero', 'one', 'two', 'three'], l:Cb('three'))
endfunction

function Test_lambda_fails()
  call assert_equal(3, {a, b -> a + b}(1, 2))
  call assert_fails('echo {a, a -> a + a}(1, 2)', 'E15:')
  call assert_fails('echo {a, b -> a + b)}(1, 2)', 'E15:')
endfunc

func Test_not_lamda()
  let x = {'>' : 'foo'}
  call assert_equal('foo', x['>'])
endfunc

function! Test_lambda_capture_by_reference()
  let v = 1
  let l:F = {x -> x + v}
  let v = 2
  call assert_equal(12, l:F(10))
endfunction

function! Test_lambda_side_effect()
  function! s:update_and_return(arr)
    let a:arr[1] = 5
    return a:arr
  endfunction

  function! s:foo(arr)
    return {-> s:update_and_return(a:arr)}
  endfunction

  let arr = [3,2,1]
  call assert_equal([3, 5, 1], s:foo(arr)())
endfunction

function! Test_lambda_refer_local_variable_from_other_scope()
  function! s:foo(X)
    return a:X() " refer l:x in s:bar()
  endfunction

  function! s:bar()
    let x = 123
    return s:foo({-> x})
  endfunction

  call assert_equal(123, s:bar())
endfunction

function! Test_lambda_do_not_share_local_variable()
  function! s:define_funcs()
    let l:One = {-> split(execute("let a = 'abc' | echo a"))[0]}
    let l:Two = {-> exists("a") ? a : "no"}
    return [l:One, l:Two]
  endfunction

  let l:F = s:define_funcs()

  call assert_equal('no', l:F[1]())
  call assert_equal('abc', l:F[0]())
  call assert_equal('no', l:F[1]())
endfunction

function! Test_lambda_closure_counter()
  function! s:foo()
    let x = 0
    return {-> [execute("let x += 1"), x][-1]}
  endfunction

  let l:F = s:foo()
  call test_garbagecollect_now()
  call assert_equal(1, l:F())
  call assert_equal(2, l:F())
  call assert_equal(3, l:F())
  call assert_equal(4, l:F())
endfunction

function! Test_lambda_with_a_var()
  function! s:foo()
    let x = 2
    return {... -> a:000 + [x]}
  endfunction
  function! s:bar()
    return s:foo()(1)
  endfunction

  call assert_equal([1, 2], s:bar())
endfunction

function! Test_lambda_call_lambda_from_lambda()
  function! s:foo(x)
    let l:F1 = {-> {-> a:x}}
    return {-> l:F1()}
  endfunction

  let l:F = s:foo(1)
  call assert_equal(1, l:F()())
endfunction

function! Test_lambda_delfunc()
  function! s:gen()
    let pl = l:
    let l:Foo = {-> get(pl, "Foo", get(pl, "Bar", {-> 0}))}
    let l:Bar = l:Foo
    delfunction l:Foo
    return l:Bar
  endfunction

  let l:F = s:gen()
  call assert_fails(':call l:F()', 'E117:')
endfunction

function! Test_lambda_scope()
  function! s:NewCounter()
    let c = 0
    return {-> [execute('let c += 1'), c][-1]}
  endfunction

  function! s:NewCounter2()
    return {-> [execute('let c += 100'), c][-1]}
  endfunction

  let l:C = s:NewCounter()
  let l:D = s:NewCounter2()

  call assert_equal(1, l:C())
  call assert_fails(':call l:D()', 'E15:') " E121: then E15:
  call assert_equal(2, l:C())
endfunction

function! Test_lambda_share_scope()
  function! s:New()
    let c = 0
    let l:Inc0 = {-> [execute('let c += 1'), c][-1]}
    let l:Dec0 = {-> [execute('let c -= 1'), c][-1]}
    return [l:Inc0, l:Dec0]
  endfunction

  let [l:Inc, l:Dec] = s:New()

  call assert_equal(1, l:Inc())
  call assert_equal(2, l:Inc())
  call assert_equal(1, l:Dec())
endfunction

function! Test_lambda_circular_reference()
  function! s:Foo()
    let d = {}
    let d.f = {-> d}
    return d.f
  endfunction

  call s:Foo()
  call test_garbagecollect_now()
  let i = 0 | while i < 10000 | call s:Foo() | let i+= 1 | endwhile
  call test_garbagecollect_now()
endfunction

function! Test_lambda_combination()
  call assert_equal(2, {x -> {x -> x}}(1)(2))
  call assert_equal(10, {y -> {x -> x(y)(10)}({y -> y})}({z -> z}))
  call assert_equal(5.0, {x -> {y -> x / y}}(10)(2.0))
  call assert_equal(6, {x -> {y -> {z -> x + y + z}}}(1)(2)(3))

  call assert_equal(6, {x -> {f -> f(x)}}(3)({x -> x * 2}))
  call assert_equal(6, {f -> {x -> f(x)}}({x -> x * 2})(3))

  " Z combinator
  let Z = {f -> {x -> f({y -> x(x)(y)})}({x -> f({y -> x(x)(y)})})}
  let Fact = {f -> {x -> x == 0 ? 1 : x * f(x - 1)}}
  call assert_equal(120, Z(Fact)(5))
endfunction

function! Test_closure_counter()
  function! s:foo()
    let x = 0
    function! s:bar() closure
      let x += 1
      return x
    endfunction
    return function('s:bar')
  endfunction

  let l:F = s:foo()
  call test_garbagecollect_now()
  call assert_equal(1, l:F())
  call assert_equal(2, l:F())
  call assert_equal(3, l:F())
  call assert_equal(4, l:F())
endfunction

function! Test_closure_unlet()
  function! s:foo()
    let x = 1
    function! s:bar() closure
      unlet x
    endfunction
    call s:bar()
    return l:
  endfunction

  call assert_false(has_key(s:foo(), 'x'))
  call test_garbagecollect_now()
endfunction
