diff options
author | ZyX <kp-pav@yandex.ru> | 2017-11-30 11:44:48 +0300 |
---|---|---|
committer | ZyX <kp-pav@yandex.ru> | 2017-11-30 11:48:23 +0300 |
commit | 0b4054e043257137ccfd3b2207da48910ce32a5f (patch) | |
tree | fcc563106194c56139cec322e9854598b005e184 | |
parent | b588ccddd7f5998ce7d9780463480ca844963859 (diff) | |
download | rneovim-0b4054e043257137ccfd3b2207da48910ce32a5f.tar.gz rneovim-0b4054e043257137ccfd3b2207da48910ce32a5f.tar.bz2 rneovim-0b4054e043257137ccfd3b2207da48910ce32a5f.zip |
unittests: Reduce memory used by vim_str2nr test
-rw-r--r-- | test/README.md | 3 | ||||
-rw-r--r-- | test/unit/charset/vim_str2nr_spec.lua | 32 | ||||
-rw-r--r-- | test/unit/helpers.lua | 2 |
3 files changed, 32 insertions, 5 deletions
diff --git a/test/README.md b/test/README.md index 6ad70e2f45..1cb814d85b 100644 --- a/test/README.md +++ b/test/README.md @@ -344,3 +344,6 @@ function calls, returns and lua source lines exuecuted. `NVIM_TEST_TRACE_ON_ERROR` (U) (1): makes unit tests yield trace on error in addition to regular error message. + +`NVIM_TEST_MAXTRACE` (U) (N): specifies maximum number of trace lines to keep. +Default is 1024. diff --git a/test/unit/charset/vim_str2nr_spec.lua b/test/unit/charset/vim_str2nr_spec.lua index 394934c339..a6fe613563 100644 --- a/test/unit/charset/vim_str2nr_spec.lua +++ b/test/unit/charset/vim_str2nr_spec.lua @@ -1,5 +1,6 @@ local helpers = require("test.unit.helpers")(after_each) local global_helpers = require('test.helpers') +local bit = require('bit') local itp = helpers.gen_itp(it) @@ -36,15 +37,36 @@ local function arginit(arg) end end +local function argreset(arg, args) + if arg == 'unum' then + ucnt = ucnt + 1 + args[arg][0] = ucnt + else + icnt = icnt - 1 + args[arg][0] = icnt + end +end + local function test_vim_str2nr(s, what, exp, maxlen) - local comb = {[''] = {}} + local comb = {[{}] = true} + local bits = {} for k, _ in pairs(exp) do - for ck, cv in pairs(comb) do - comb[ck .. ',' .. k] = updated(shallowcopy(cv), { [k] = arginit(k) }) - end + bits[#bits + 1] = k end maxlen = maxlen or #s - for _, cv in pairs(comb) do + local args = {} + for k, _ in pairs(ARGTYPES) do + args[k] = arginit(k) + end + for case = 0, ((2 ^ (#bits)) - 1) do + local cv = {} + for b = 0, (#bits - 1) do + if bit.band(case, (2 ^ b)) == 0 then + local k = bits[b + 1] + argreset(k, args) + cv[k] = args[k] + end + end lib.vim_str2nr(s, cv.pre, cv.len, what, cv.num, cv.unum, maxlen) for cck, ccv in pairs(cv) do if exp[cck] ~= tonumber(ccv[0]) then diff --git a/test/unit/helpers.lua b/test/unit/helpers.lua index c26b1c1bcb..b1e709c444 100644 --- a/test/unit/helpers.lua +++ b/test/unit/helpers.lua @@ -675,6 +675,7 @@ end local function check_child_err(rd) local trace = {} local did_traceline = false + local maxtrace = tonumber(os.getenv('NVIM_TEST_MAXTRACE')) or 1024 while true do local traceline = sc.read(rd, hook_msglen) if #traceline ~= hook_msglen then @@ -689,6 +690,7 @@ local function check_child_err(rd) break end trace[#trace + 1] = traceline + table.remove(trace, maxtrace + 1) end local res = sc.read(rd, 2) if #res ~= 2 then |