Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
84 changes: 42 additions & 42 deletions tests/requirement-engineering/gc-aot/runtest.py
Original file line number Diff line number Diff line change
Expand Up @@ -563,7 +563,7 @@ def parse_assertion_value(val):
if not val:
return None, ""

splitted = re.split('\s+', val)
splitted = re.split('\\s+', val)
splitted = [s for s in splitted if s]
type = splitted[0].split(".")[0]
lane_type = splitted[1] if len(splitted) > 2 else ""
Expand Down Expand Up @@ -832,41 +832,41 @@ def test_assert_return(r, opts, form):
"""
# params, return
m = re.search(
'^\(assert_return\s+\(invoke\s+"((?:[^"]|\\\")*)"\s+(\(.*\))\s*\)\s*(\(.*\))\s*\)\s*$', form, re.S)
'^\\(assert_return\\s+\\(invoke\\s+"((?:[^"]|\\\")*)"\\s+(\\(.*\\))\\s*\\)\\s*(\\(.*\\))\\s*\\)\\s*$', form, re.S)
# judge if assert_return cmd includes the module name
n = re.search(
'^\(assert_return\s+\(invoke\s+\$((?:[^\s])*)\s+"((?:[^"]|\\\")*)"\s+(\(.*\))\s*\)\s*(\(.*\))\s*\)\s*$', form, re.S)
'^\\(assert_return\\s+\\(invoke\\s+\\$((?:[^\\s])*)\\s+"((?:[^"]|\\\")*)"\\s+(\\(.*\\))\\s*\\)\\s*(\\(.*\\))\\s*\\)\\s*$', form, re.S)

# print("assert_return with {}".format(form))

if not m:
# no params, return
m = re.search(
'^\(assert_return\s+\(invoke\s+"((?:[^"]|\\\")*)"\s*\)\s+()(\(.*\))\s*\)\s*$', form, re.S)
'^\\(assert_return\\s+\\(invoke\\s+"((?:[^"]|\\\")*)"\\s*\\)\\s+()(\\(.*\\))\\s*\\)\\s*$', form, re.S)
if not m:
# params, no return
m = re.search(
'^\(assert_return\s+\(invoke\s+"([^"]*)"\s+(\(.*\))()\s*\)\s*\)\s*$', form, re.S)
'^\\(assert_return\\s+\\(invoke\\s+"([^"]*)"\\s+(\\(.*\\))()\\s*\\)\\s*\\)\\s*$', form, re.S)
if not m:
# no params, no return
m = re.search(
'^\(assert_return\s+\(invoke\s+"([^"]*)"\s*()()\)\s*\)\s*$', form, re.S)
'^\\(assert_return\\s+\\(invoke\\s+"([^"]*)"\\s*()()\\)\\s*\\)\\s*$', form, re.S)
if not m:
# params, return
if not n:
# no params, return
n = re.search(
'^\(assert_return\s+\(invoke\s+\$((?:[^\s])*)\s+"((?:[^"]|\\\")*)"\s*\)\s+()(\(.*\))\s*\)\s*$', form, re.S)
'^\\(assert_return\\s+\\(invoke\\s+\\$((?:[^\\s])*)\\s+"((?:[^"]|\\\")*)"\\s*\\)\\s+()(\\(.*\\))\\s*\\)\\s*$', form, re.S)
if not n:
# params, no return
n = re.search(
'^\(assert_return\s+\(invoke\s+\$((?:[^\s])*)\s+"([^"]*)"\s+(\(.*\))()\s*\)\s*\)\s*$', form, re.S)
'^\\(assert_return\\s+\\(invoke\\s+\\$((?:[^\\s])*)\\s+"([^"]*)"\\s+(\\(.*\\))()\\s*\\)\\s*\\)\\s*$', form, re.S)
if not n:
# no params, no return
n = re.search(
'^\(assert_return\s+\(invoke\s+\$((?:[^\s])*)\s+"([^"]*)"*()()\)\s*\)\s*$', form, re.S)
'^\\(assert_return\\s+\\(invoke\\s+\\$((?:[^\\s])*)\\s+"([^"]*)"*()()\\)\\s*\\)\\s*$', form, re.S)
if not m and not n:
if re.search('^\(assert_return\s+\(get.*\).*\)$', form, re.S):
if re.search('^\\(assert_return\\s+\\(get.*\\).*\\)$', form, re.S):
log("ignoring assert_return get")
return
else:
Expand All @@ -891,7 +891,7 @@ def test_assert_return(r, opts, form):
for arg in args_type_and_value:
# remove leading and tailing spaces, it might confuse following assertions
arg = arg.strip()
splitted = re.split('\s+', arg)
splitted = re.split('\\s+', arg)
splitted = [s for s in splitted if s]

if splitted[0] in ["i32.const", "i64.const"]:
Expand All @@ -915,7 +915,7 @@ def test_assert_return(r, opts, form):

assert (len(numbers) ==
2), "has to reform arguments into i64x2"
args.append(f"{numbers[0]:#x}\{numbers[1]:#x}")
args.append(f"{numbers[0]:#x}\\{numbers[1]:#x}")
elif "ref.null" == splitted[0]:
args.append("null")
elif "ref.extern" == splitted[0]:
Expand All @@ -932,7 +932,7 @@ def test_assert_return(r, opts, form):
if m.group(3) == '':
returns = []
else:
returns = re.split("\)\s*\(", m.group(3)[1:-1])
returns = re.split("\\)\\s*\\(", m.group(3)[1:-1])
# processed numbers in strings
if len(returns) == 1 and returns[0] in ["ref.array", "ref.struct", "ref.i31",
"ref.eq", "ref.any", "ref.extern",
Expand Down Expand Up @@ -982,7 +982,7 @@ def test_assert_return(r, opts, form):
n1 = n.group(3).replace("(ref.null extern)", "(ref.null null)")
n1 = n1.replace("ref.null func)", "(ref.null null)")
args = [re.split(' +', v)[1]
for v in re.split("\)\s*\(", n1[1:-1])]
for v in re.split("\\)\\s*\\(", n1[1:-1])]

_, expected = parse_assertion_value(n.group(4)[1:-1])
test_assert(r, opts, "return", "%s %s" %
Expand All @@ -992,19 +992,19 @@ def test_assert_return(r, opts, form):
def test_assert_trap(r, opts, form):
# params
m = re.search(
'^\(assert_trap\s+\(invoke\s+"([^"]*)"\s+(\(.*\))\s*\)\s*"([^"]+)"\s*\)\s*$', form)
'^\\(assert_trap\\s+\\(invoke\\s+"([^"]*)"\\s+(\\(.*\\))\\s*\\)\\s*"([^"]+)"\\s*\\)\\s*$', form)
# judge if assert_return cmd includes the module name
n = re.search(
'^\(assert_trap\s+\(invoke\s+\$((?:[^\s])*)\s+"([^"]*)"\s+(\(.*\))\s*\)\s*"([^"]+)"\s*\)\s*$', form, re.S)
'^\\(assert_trap\\s+\\(invoke\\s+\\$((?:[^\\s])*)\\s+"([^"]*)"\\s+(\\(.*\\))\\s*\\)\\s*"([^"]+)"\\s*\\)\\s*$', form, re.S)
if not m:
# no params
m = re.search(
'^\(assert_trap\s+\(invoke\s+"([^"]*)"\s*()\)\s*"([^"]+)"\s*\)\s*$', form)
'^\\(assert_trap\\s+\\(invoke\\s+"([^"]*)"\\s*()\\)\\s*"([^"]+)"\\s*\\)\\s*$', form)
if not m:
if not n:
# no params
n = re.search(
'^\(assert_trap\s+\(invoke\s+\$((?:[^\s])*)\s+"([^"]*)"\s*()\)\s*"([^"]+)"\s*\)\s*$', form, re.S)
'^\\(assert_trap\\s+\\(invoke\\s+\\$((?:[^\\s])*)\\s+"([^"]*)"\\s*()\\)\\s*"([^"]+)"\\s*\\)\\s*$', form, re.S)
if not m and not n:
raise Exception("unparsed assert_trap: '%s'" % form)

Expand All @@ -1017,7 +1017,7 @@ def test_assert_trap(r, opts, form):
m1 = m.group(2).replace("(ref.null extern)", "(ref.null null)")
m1 = m1.replace("ref.null func)", "(ref.null null)")
args = [re.split(' +', v)[1]
for v in re.split("\)\s*\(", m1[1:-1])]
for v in re.split("\\)\\s*\\(", m1[1:-1])]

expected = "Exception: %s" % m.group(3)
test_assert(r, opts, "trap", "%s %s" %
Expand Down Expand Up @@ -1055,7 +1055,7 @@ def test_assert_trap(r, opts, form):
args = []
else:
args = [re.split(' +', v)[1]
for v in re.split("\)\s*\(", n.group(3)[1:-1])]
for v in re.split("\\)\\s*\\(", n.group(3)[1:-1])]
expected = "Exception: %s" % n.group(4)
test_assert(r, opts, "trap", "%s %s" %
(func, " ".join(args)), expected)
Expand All @@ -1064,30 +1064,30 @@ def test_assert_trap(r, opts, form):
def test_assert_exhaustion(r, opts, form):
# params
m = re.search(
'^\(assert_exhaustion\s+\(invoke\s+"([^"]*)"\s+(\(.*\))\s*\)\s*"([^"]+)"\s*\)\s*$', form)
'^\\(assert_exhaustion\\s+\\(invoke\\s+"([^"]*)"\\s+(\\(.*\\))\\s*\\)\\s*"([^"]+)"\\s*\\)\\s*$', form)
if not m:
# no params
m = re.search(
'^\(assert_exhaustion\s+\(invoke\s+"([^"]*)"\s*()\)\s*"([^"]+)"\s*\)\s*$', form)
'^\\(assert_exhaustion\\s+\\(invoke\\s+"([^"]*)"\\s*()\\)\\s*"([^"]+)"\\s*\\)\\s*$', form)
if not m:
raise Exception("unparsed assert_exhaustion: '%s'" % form)
func = m.group(1)
if m.group(2) == '':
args = []
else:
args = [re.split(' +', v)[1]
for v in re.split("\)\s*\(", m.group(2)[1:-1])]
for v in re.split("\\)\\s*\\(", m.group(2)[1:-1])]
expected = "Exception: %s\n" % m.group(3)
test_assert(r, opts, "exhaustion", "%s %s" %
(func, " ".join(args)), expected)


def do_invoke(r, opts, form):
# params
m = re.search('^\(invoke\s+"([^"]+)"\s+(\(.*\))\s*\)\s*$', form)
m = re.search('^\\(invoke\\s+"([^"]+)"\\s+(\\(.*\\))\\s*\\)\\s*$', form)
if not m:
# no params
m = re.search('^\(invoke\s+"([^"]+)"\s*()\)\s*$', form)
m = re.search('^\\(invoke\\s+"([^"]+)"\\s*()\\)\\s*$', form)
if not m:
raise Exception("unparsed invoke: '%s'" % form)
func = m.group(1)
Expand All @@ -1099,7 +1099,7 @@ def do_invoke(r, opts, form):
args = []
else:
args = [re.split(' +', v)[1]
for v in re.split("\)\s*\(", m.group(2)[1:-1])]
for v in re.split("\\)\\s*\\(", m.group(2)[1:-1])]

log("Invoking %s(%s)" % (
func, ", ".join([str(a) for a in args])))
Expand Down Expand Up @@ -1348,19 +1348,19 @@ def test_assert_with_exception(form, wast_tempfile, wasm_tempfile, aot_tempfile,
log(form)
elif skip_test(form, SKIP_TESTS):
log("Skipping test: %s" % form[0:60])
elif re.match("^\(assert_trap\s+\(module", form):
elif re.match("^\\(assert_trap\\s+\\(module", form):
test_assert_with_exception(
form, wast_tempfile, wasm_tempfile, aot_tempfile if test_aot else None, opts, r)
elif re.match("^\(assert_exhaustion\\b.*", form):
elif re.match("^\\(assert_exhaustion\\b.*", form):
test_assert_exhaustion(r, opts, form)
elif re.match("^\(assert_unlinkable\\b.*", form):
elif re.match("^\\(assert_unlinkable\\b.*", form):
test_assert_with_exception(
form, wast_tempfile, wasm_tempfile, aot_tempfile if test_aot else None, opts, r, False)
elif re.match("^\(assert_malformed\\b.*", form):
elif re.match("^\\(assert_malformed\\b.*", form):
# remove comments in wast
form, n = re.subn(";;.*\n", "", form)
m = re.match(
"^\(assert_malformed\s*\(module binary\s*(\".*\").*\)\s*\"(.*)\"\s*\)$", form, re.DOTALL)
"^\\(assert_malformed\\s*\\(module binary\\s*(\".*\").*\\)\\s*\"(.*)\"\\s*\\)$", form, re.DOTALL)

if m:
# workaround: spec test changes error message to "malformed" while iwasm still use "invalid"
Expand Down Expand Up @@ -1435,25 +1435,25 @@ def test_assert_with_exception(form, wast_tempfile, wasm_tempfile, aot_tempfile,
r = run_wasm_with_repl(
wasm_tempfile, aot_tempfile if test_aot else None, opts, r)

elif re.match("^\(assert_malformed\s*\(module quote", form):
elif re.match("^\\(assert_malformed\\s*\\(module quote", form):
log("ignoring assert_malformed module quote")
else:
log("unrecognized assert_malformed")
elif re.match("^\(assert_return[_a-z]*_nan\\b.*", form):
elif re.match("^\\(assert_return[_a-z]*_nan\\b.*", form):
log("ignoring assert_return_.*_nan")
pass
elif re.match(".*\(invoke\s+\$\\b.*", form):
elif re.match(".*\\(invoke\\s+\\$\\b.*", form):
# invoke a particular named module's function
if form.startswith("(assert_return"):
test_assert_return(r, opts, form)
elif form.startswith("(assert_trap"):
test_assert_trap(r, opts, form)
elif re.match("^\(module\\b.*", form):
elif re.match("^\\(module\\b.*", form):
# if the module includes the particular name startswith $
m = re.search("^\(module\s+\$.\S+", form)
m = re.search("^\\(module\\s+\\$.\\S+", form)
if m:
# get module name
module_name = re.split('\$', m.group(0).strip())[1]
module_name = re.split('\\$', m.group(0).strip())[1]
if module_name:
# create temporal files
temp_files = create_tmpfiles(module_name)
Expand Down Expand Up @@ -1502,18 +1502,18 @@ def test_assert_with_exception(form, wast_tempfile, wasm_tempfile, aot_tempfile,
raise Exception("Failed:\n expected: '%s'\n got: '%s'" %
(repr(exc), r.buf))

elif re.match("^\(assert_return\\b.*", form):
elif re.match("^\\(assert_return\\b.*", form):
assert (r), "iwasm repl runtime should be not null"
test_assert_return(r, opts, form)
elif re.match("^\(assert_trap\\b.*", form):
elif re.match("^\\(assert_trap\\b.*", form):
test_assert_trap(r, opts, form)
elif re.match("^\(invoke\\b.*", form):
elif re.match("^\\(invoke\\b.*", form):
assert (r), "iwasm repl runtime should be not null"
do_invoke(r, opts, form)
elif re.match("^\(assert_invalid\\b.*", form):
elif re.match("^\\(assert_invalid\\b.*", form):
test_assert_with_exception(
form, wast_tempfile, wasm_tempfile, aot_tempfile if test_aot else None, opts, r)
elif re.match("^\(register\\b.*", form):
elif re.match("^\\(register\\b.*", form):
# get module's new name from the register cmd
name_new = re.split('\"', re.search(
'\".*\"', form).group(0))[1]
Expand Down