vimlrs 0.2.1

Faithful Rust port of the Vimscript (VimL) interpreter, from the Neovim C eval engine
Documentation
" fizzbuzz.vim — classic FizzBuzz, with embedded unit tests.
"
" Demonstrates: :function/:return, :if/:elseif/:else, integer % (native modulo),
" and the built-in assert framework (assert_equal/v:errors). Run it directly;
" it exits non-zero if any assertion fails, so CI catches regressions.
"
"   vimlrs examples/fizzbuzz.vim

function! FizzBuzz(n) abort
  if a:n % 15 == 0
    return 'FizzBuzz'
  elseif a:n % 3 == 0
    return 'Fizz'
  elseif a:n % 5 == 0
    return 'Buzz'
  else
    return string(a:n)
  endif
endfunction

" ── unit tests ──
call assert_equal('1', FizzBuzz(1))
call assert_equal('Fizz', FizzBuzz(3))
call assert_equal('Buzz', FizzBuzz(5))
call assert_equal('Fizz', FizzBuzz(9))
call assert_equal('FizzBuzz', FizzBuzz(15))
call assert_equal('FizzBuzz', FizzBuzz(30))
call assert_equal('Buzz', FizzBuzz(20))

" ── demo ──
for i in range(1, 20)
  echo FizzBuzz(i)
endfor

" ── self-test epilogue: non-zero exit on any failure (CI regression gate) ──
if !empty(v:errors)
  for e in v:errors
    echo 'FAIL:' e
  endfor
  throw len(v:errors) . ' assertion(s) failed'
endif
echo 'OK: fizzbuzz assertions passed'