diff test/call_suite_aggrs/rand-sig.lua @ 494:d45c582b5457

- sharing sig generator between call_suite and call_suite_aggrs tests
author Tassilo Philipp
date Mon, 21 Mar 2022 16:06:16 +0100
parents 0c68b3f91367
children
line wrap: on
line diff
--- a/test/call_suite_aggrs/rand-sig.lua	Mon Mar 21 14:46:38 2022 +0100
+++ b/test/call_suite_aggrs/rand-sig.lua	Mon Mar 21 16:06:16 2022 +0100
@@ -1,101 +1,6 @@
 require"config"
 
--- assure aggr chars are present in pairs (can be weighted, though), to avoid
--- inf loops; closing chars are allowe to appear alone, as they are ignored
--- without any opening char (does not make a lot of sense, though)
-pairs_op = { '{', '<' } --, '[' }
-pairs_cl = { '}', '>' } --, ']' }
-
-aggr_op_pattern = '[%'..table.concat(pairs_op,'%')..']'
-
-for i = 1, #pairs_op do
-  if string.find(types, '%'..pairs_op[i]) and not string.find(types, '%'..pairs_cl[i]) then
-    types = types..pairs_cl[i]
-  end
-end
-
-rtypes   = "v"..types
-
-function mkaggr(n_nest, maxdepth, o, c)
-  local s = o
-  local nfields = 0
-
-  repeat
-    local t = c
-    if nfields < maxaggrfields then
-	  repeat
-        local id = math.random(#types)
-        t = types:sub(id,id)
-      until t ~= c or nfields >= minaggrfields
-    end
-
-    s_ = mktype(t, n_nest, maxdepth, o)
-	if(#s_ > 0) then
-      nfields = nfields + 1
-	end
-    s = s..s_
-
-    -- member (which cannot be first char) as array? Disallow multidimensional arrays
-    if #s > 1 and t ~= c and s:sub(-1) ~= ']' and math.random(arraydice) == 1 then
-      s = s..'['..math.random(maxarraylen)..']'
-    end
-  until t == c
-
-  return s
-end
+-- use shared sig generator
+package.path = '../common/?.lua;' .. package.path
+require"rand-sig"
 
-function mktype(t, n_nest, maxdepth, aggr_open)
-  -- aggregate opener?
-  local aggr_i = 0
-  for i = 1, #pairs_op do
-    if pairs_op[i] == t then
-      aggr_i = i
-      break
-    end
-  end
-
-  -- ignore new aggregates if above depth limit
-  if aggr_i ~= 0 and t == pairs_op[aggr_i] then
-    if n_nest < maxdepth then
-      return mkaggr(n_nest + 1, maxdepth, pairs_op[aggr_i], pairs_cl[aggr_i])
-    else
-      return ''
-    end
-  end
-
-  -- aggregate closer?
-  for i = 1, #pairs_cl do
-    if pairs_cl[i] == t then
-      aggr_i = i
-      break
-    end
-  end
-
-  -- if closing char, without any open, ignore
-  if aggr_i ~= 0 and (aggr_open == nil or pairs_op[aggr_i] ~= aggr_open) then
-    return ''
-  end
-
-  return t
-end
-
-math.randomseed(seed)
-local id
-local uniq_sigs = { }
-for i = 1, ncases do
-  local l = ''
-  repeat
-    local nargs = math.random(minargs,maxargs)
-    id = math.random(#rtypes)
-    local sig = { mktype(rtypes:sub(id,id), 0, math.random(maxaggrdepth), nil) } -- random depth avoids excessive nesting
-    for j = 1, nargs do
-      id = math.random(#types)
-      sig[#sig+1] = mktype(types:sub(id,id), 0, math.random(maxaggrdepth), nil) -- random depth avoids excessive nesting
-    end
-    l = table.concat(sig)
-    -- reject dupes, sigs without any aggregate (as this is about aggrs after all), and empty ones (if not wanted)
-  until string.match(l, aggr_op_pattern) ~= nil and uniq_sigs[l] == nil
-  uniq_sigs[l] = 1
-  io.write(l.."\n")
-end
-