annotate test/callback_suite/mk-cases.lua @ 509:f3d44195dbdf

callback_suite: - further, big refactoring to make the test data setup be a lot more in line with call_suite and call_suite_aggrs - added support to test void return values (was missing in prev version)
author Tassilo Philipp
date Sat, 09 Apr 2022 23:00:24 +0200
parents 5a3c07a0f376
children 95f6f43178ed
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
505
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
1 require "config"
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
2
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
3 function trim(l) return l:gsub("^%s+",""):gsub("%s+$","") end
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
4 function mkcase(id,sig)
509
f3d44195dbdf callback_suite:
Tassilo Philipp
parents: 507
diff changeset
5 local nargs = string.len(sig) - 2 -- @@@ wrong, b/c ignores callconv prefixes
f3d44195dbdf callback_suite:
Tassilo Philipp
parents: 507
diff changeset
6 local rtype = string.sub(sig, -1)
505
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
7 local s = "F" .. nargs .. "(f" .. id .. "," .. rtype
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
8 for i = 1, nargs do
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
9 local type = string.sub(sig, i, i)
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
10 s = s .. "," .. type
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
11 end
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
12 s = s .. ")\n"
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
13 return s
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
14 end
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
15
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
16 function mkfuntab(n)
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
17 local s = { "funptr G_funtab[] = {\n"}
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
18 for i = 0, n-1 do
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
19 s[#s+1] = "\t&f"..i..",\n"
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
20 end
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
21 s[#s+1] = "};\n"
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
22 return table.concat(s,"")
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
23 end
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
24
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
25 function mksigtab(sigs)
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
26 local s = { "const char * G_sigtab[] = {\n"}
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
27 for k,v in pairs(sigs) do
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
28 s[#s+1] = '\t"'..v..'",\n'
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
29 end
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
30 s[#s+1] = "};\n"
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
31 return table.concat(s,"")
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
32 end
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
33
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
34 function mkall()
507
5a3c07a0f376 cleanups
Tassilo Philipp
parents: 505
diff changeset
35 -- force minargs for ordered mode
505
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
36 if mode == "ordered" then
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
37 minargs = 0
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
38 end
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
39
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
40 -- case macros
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
41 local i
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
42 for i = minargs, maxargs do
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
43 local line = "#define F" .. i .. "(ID,R"
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
44 local argdef = ""
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
45 local argset = ""
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
46 if i > 0 then
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
47 line = line .. ","
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
48 local j
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
49 for j = 0, i-1 do
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
50 if j > 0 then
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
51 argdef = argdef .. ","
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
52 argset = argset .. ","
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
53 end
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
54 argdef = argdef .. "M" .. j
509
f3d44195dbdf callback_suite:
Tassilo Philipp
parents: 507
diff changeset
55 argset = argset .. "K_##M" .. j .. "[" .. j .. "]"
505
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
56 end
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
57 end
509
f3d44195dbdf callback_suite:
Tassilo Philipp
parents: 507
diff changeset
58 line = line .. argdef .. ") void ID(void* addr) { write_V_##R(" .. i .. ", ((CONFIG_API R(*)(" .. argdef .. "))addr)(" .. argset .. "));}\n"
505
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
59 io.write(line)
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
60 end
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
61
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
62 -- cases
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
63 local lineno = 0
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
64 local sigtab = { }
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
65 local cases = ''
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
66 for line in io.lines() do
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
67 local sig = trim(line)
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
68 cases = cases..mkcase(lineno,sig)
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
69 sigtab[#sigtab+1] = sig
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
70 lineno = lineno + 1
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
71 end
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
72
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
73 io.write(cases)
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
74 io.write(mkfuntab(lineno))
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
75 io.write(mksigtab(sigtab))
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
76 io.write("int G_maxargs = "..maxargs..";\n")
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
77 end
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
78
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
79 mkall()
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
80