aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZyX <kp-pav@yandex.ru>2017-11-30 11:44:48 +0300
committerZyX <kp-pav@yandex.ru>2017-11-30 11:48:23 +0300
commit0b4054e043257137ccfd3b2207da48910ce32a5f (patch)
treefcc563106194c56139cec322e9854598b005e184
parentb588ccddd7f5998ce7d9780463480ca844963859 (diff)
downloadrneovim-0b4054e043257137ccfd3b2207da48910ce32a5f.tar.gz
rneovim-0b4054e043257137ccfd3b2207da48910ce32a5f.tar.bz2
rneovim-0b4054e043257137ccfd3b2207da48910ce32a5f.zip
unittests: Reduce memory used by vim_str2nr test
-rw-r--r--test/README.md3
-rw-r--r--test/unit/charset/vim_str2nr_spec.lua32
-rw-r--r--test/unit/helpers.lua2
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