Skip to content
This repository was archived by the owner on Dec 22, 2021. It is now read-only.

Commit 52c7623

Browse files
Honrytlively
authored andcommitted
[test] Test ops with missing arguments (#168)
This PR adds spec tests for testing all simd ops with missing arguments. Sync from WAVM/WAVM#247
1 parent 1d97ea2 commit 52c7623

40 files changed

+2333
-76
lines changed

test/core/simd/meta/README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,11 @@ Currently it only support following simd test files generation.
99
- 'simd_f32x4_cmp.wast'
1010
- 'simd_f64x2_cmp.wast'
1111
- 'simd_i8x16_arith.wast'
12+
- 'simd_i8x16_arith2.wast'
1213
- 'simd_i16x8_arith.wast'
14+
- 'simd_i16x8_arith2.wast'
1315
- 'simd_i32x4_arith.wast'
16+
- 'simd_i32x4_arith2.wast'
1417
- 'simd_f32x4_arith.wast'
1518
- 'simd_i64x2_arith.wast'
1619
- 'simd_f64x2_arith.wast'
@@ -19,9 +22,6 @@ Currently it only support following simd test files generation.
1922
- 'simd_i16x8_sat_arith.wast'
2023
- 'simd_f32x4.wast'
2124
- 'simd_f64x2.wast'
22-
- 'simd_i8x16.wast'
23-
- 'simd_i16x8.wast'
24-
- 'simd_i32x4.wast'
2525

2626

2727
Usage:

test/core/simd/meta/simd_arithmetic.py

Lines changed: 36 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
"""
1515

1616
from simd import SIMD
17-
from test_assert import AssertReturn
17+
from test_assert import AssertReturn, AssertInvalid
1818

1919

2020
class LaneNumber:
@@ -325,7 +325,40 @@ def get_invalid_cases(self):
325325
operand_1='i32.const 0',
326326
operand_2='f32.const 0.0'))
327327

328-
return '\n'.join(invalid_cases)
328+
return '\n'.join(invalid_cases) + self.argument_empty_test()
329+
330+
def argument_empty_test(self):
331+
"""Test cases with empty argument.
332+
"""
333+
cases = []
334+
335+
cases.append('\n\n;; Test operation with empty argument\n')
336+
337+
case_data = {
338+
'op': '',
339+
'extended_name': 'arg-empty',
340+
'param_type': '',
341+
'result_type': '(result v128)',
342+
'params': '',
343+
}
344+
345+
for op in self.UNARY_OPS:
346+
case_data['op'] = '{lane_type}.{op}'.format(lane_type=self.LANE_TYPE, op=op)
347+
case_data['extended_name'] = 'arg-empty'
348+
case_data['params'] = ''
349+
cases.append(AssertInvalid.get_arg_empty_test(**case_data))
350+
351+
for op in self.BINARY_OPS:
352+
case_data['op'] = '{lane_type}.{op}'.format(lane_type=self.LANE_TYPE, op=op)
353+
case_data['extended_name'] = '1st-arg-empty'
354+
case_data['params'] = SIMD.v128_const('0', self.LANE_TYPE)
355+
cases.append(AssertInvalid.get_arg_empty_test(**case_data))
356+
357+
case_data['extended_name'] = 'arg-empty'
358+
case_data['params'] = ''
359+
cases.append(AssertInvalid.get_arg_empty_test(**case_data))
360+
361+
return '\n'.join(cases)
329362

330363
def get_combine_cases(self):
331364
combine_cases = [';; combination\n(module']
@@ -413,4 +446,4 @@ def get_all_cases(self):
413446
def gen_test_cases(self):
414447
wast_filename = '../simd_{lane_type}_arith.wast'.format(lane_type=self.LANE_TYPE)
415448
with open(wast_filename, 'w') as fp:
416-
fp.write(self.get_all_cases())
449+
fp.write(self.get_all_cases())

test/core/simd/meta/simd_bitwise.py

Lines changed: 61 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,18 @@
55
"""
66

77
from simd import SIMD
8-
from test_assert import AssertReturn
8+
from test_assert import AssertReturn, AssertInvalid
99

1010

1111
class SimdBitWise(SIMD):
1212
"""
1313
Generate common tests
1414
"""
1515

16+
UNARY_OPS = ('not',)
17+
BINARY_OPS = ('and', 'or', 'xor', 'andnot',)
18+
TERNARY_OPS = ('bitselect',)
19+
1620
# Test case template
1721
CASE_TXT = """;; Test all the bitwise operators on major boundary values and all special values.
1822
@@ -182,6 +186,7 @@ def get_combination_case(self):
182186
lst_nested_case_func = []
183187
lst_in_block_case_assert = []
184188
lst_nested_case_assert = []
189+
lst_argument_empty_case = []
185190

186191
for ipr in lst_ipr:
187192

@@ -242,9 +247,59 @@ def get_combination_case(self):
242247
'{assert_in_block_cases}' \
243248
'{assert_of_nested_cases}' \
244249
'\n(assert_return (invoke "as-param"))\n'.format(in_block_cases=''.join(lst_in_block_case_func),
245-
nested_cases=''.join(lst_nested_case_func),
246-
assert_in_block_cases=''.join(lst_in_block_case_assert),
247-
assert_of_nested_cases=''.join(lst_nested_case_assert))
250+
nested_cases=''.join(lst_nested_case_func),
251+
assert_in_block_cases=''.join(lst_in_block_case_assert),
252+
assert_of_nested_cases=''.join(lst_nested_case_assert))
253+
254+
def get_argument_empty_case(self):
255+
"""
256+
Generate argument empty cases
257+
"""
258+
259+
cases = []
260+
261+
param_1 = SIMD.v128_const('0', 'i32x4')
262+
263+
cases.append('\n\n;; Test operation with empty argument\n')
264+
265+
case_data = {
266+
'op': '',
267+
'extended_name': 'arg-empty',
268+
'param_type': '',
269+
'result_type': '(result v128)',
270+
'params': '',
271+
}
272+
273+
for op in self.UNARY_OPS:
274+
case_data['op'] = 'v128.' + op
275+
cases.append(AssertInvalid.get_arg_empty_test(**case_data))
276+
277+
for op in self.BINARY_OPS:
278+
case_data['op'] = 'v128.' + op
279+
case_data['extended_name'] = '1st-arg-empty'
280+
case_data['params'] = param_1
281+
cases.append(AssertInvalid.get_arg_empty_test(**case_data))
282+
283+
case_data['extended_name'] = 'arg-empty'
284+
case_data['params'] = ''
285+
cases.append(AssertInvalid.get_arg_empty_test(**case_data))
286+
287+
for op in self.TERNARY_OPS:
288+
case_data['op'] = 'v128.' + op
289+
case_data['extended_name'] = '1st-arg-empty'
290+
case_data['params'] = param_1 + ' ' + param_1
291+
cases.append(AssertInvalid.get_arg_empty_test(**case_data))
292+
293+
case_data['extended_name'] = 'two-args-empty'
294+
case_data['params'] = param_1
295+
cases.append(AssertInvalid.get_arg_empty_test(**case_data))
296+
297+
case_data['extended_name'] = 'arg-empty'
298+
case_data['params'] = ''
299+
cases.append(AssertInvalid.get_arg_empty_test(**case_data))
300+
301+
return '\n'.join(cases) + '\n'
302+
248303

249304
def get_all_cases(self):
250305
"""
@@ -254,7 +309,7 @@ def get_all_cases(self):
254309
case_data = {'normal_case': self.get_normal_case()}
255310

256311
# Add tests for unkonow operators for i32x4
257-
return self.CASE_TXT.format(**case_data) + self.get_invalid_case() + self.get_combination_case()
312+
return self.CASE_TXT.format(**case_data) + self.get_invalid_case() + self.get_combination_case() + self.get_argument_empty_case()
258313

259314
def get_case_data(self):
260315
"""
@@ -444,4 +499,4 @@ def gen_test_cases():
444499

445500

446501
if __name__ == '__main__':
447-
gen_test_cases()
502+
gen_test_cases()

test/core/simd/meta/simd_compare.py

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
import abc
1111
from simd import SIMD
12-
from test_assert import AssertReturn
12+
from test_assert import AssertReturn, AssertInvalid
1313

1414

1515
# Generate common comparison tests
@@ -369,14 +369,41 @@ def get_normal_case(self):
369369

370370
return '\n'.join(cases)
371371

372+
def argument_empty_test(self):
373+
"""Test cases with empty argument.
374+
"""
375+
cases = []
376+
377+
cases.append('\n;; Test operation with empty argument\n')
378+
379+
case_data = {
380+
'op': '',
381+
'extended_name': 'arg-empty',
382+
'param_type': '',
383+
'result_type': '(result v128)',
384+
'params': '',
385+
}
386+
387+
for op in self.BINARY_OPS:
388+
case_data['op'] = '{lane_type}.{op}'.format(lane_type=self.LANE_TYPE, op=op)
389+
case_data['extended_name'] = '1st-arg-empty'
390+
case_data['params'] = SIMD.v128_const('0', self.LANE_TYPE)
391+
cases.append(AssertInvalid.get_arg_empty_test(**case_data))
392+
393+
case_data['extended_name'] = 'arg-empty'
394+
case_data['params'] = ''
395+
cases.append(AssertInvalid.get_arg_empty_test(**case_data))
396+
397+
return '\n'.join(cases)
398+
372399
# Generate all test cases
373400
def get_all_cases(self):
374401

375402
case_data = {'normal_case': self.get_normal_case(),
376403
'lane_type': self.LANE_TYPE}
377404

378405
# Generate tests using the test template
379-
return self.CASE_TXT.format(**case_data)
406+
return self.CASE_TXT.format(**case_data) + self.argument_empty_test()
380407

381408
# Generate test case file
382409
def gen_test_cases(self):

test/core/simd/meta/simd_f32x4_cmp.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@
1616
class Simdf32x4CmpCase(SimdCmpCase):
1717

1818
LANE_TYPE = 'f32x4'
19+
20+
BINARY_OPS = ['eq', 'ne', 'lt', 'le', 'gt', 'ge']
21+
1922
# Test template, using this template to generate tests with variable test datas.
2023
CASE_TXT = """;; Test all the {lane_type} comparison operators on major boundary values and all special values.
2124
@@ -501,4 +504,4 @@ def gen_test_cases():
501504

502505
if __name__ == '__main__':
503506
f32x4 = Simdf32x4CmpCase()
504-
f32x4.gen_test_cases()
507+
f32x4.gen_test_cases()

test/core/simd/meta/simd_i16x8_cmp.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ class Simdi16x8CmpCase(SimdCmpCase):
1414

1515
LANE_TYPE = 'i16x8'
1616

17+
BINARY_OPS = ['eq', 'ne', 'lt_s', 'lt_u', 'le_s', 'le_u', 'gt_s', 'gt_u', 'ge_s', 'ge_u']
18+
1719
# Overloads base class method and sets test data for i16x8.
1820
def get_case_data(self):
1921

@@ -820,4 +822,4 @@ def gen_test_cases():
820822

821823
if __name__ == '__main__':
822824
i16x8 = Simdi16x8CmpCase()
823-
i16x8.gen_test_cases()
825+
i16x8.gen_test_cases()

test/core/simd/meta/simd_i32x4_cmp.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ class Simdi32x4CmpCase(SimdCmpCase):
1414

1515
LANE_TYPE = 'i32x4'
1616

17+
BINARY_OPS = ['eq', 'ne', 'lt_s', 'lt_u', 'le_s', 'le_u', 'gt_s', 'gt_u', 'ge_s', 'ge_u']
18+
1719
# Overload base class method and set test data for i32x4.
1820
def get_case_data(self):
1921

@@ -832,4 +834,4 @@ def gen_test_cases():
832834

833835
if __name__ == '__main__':
834836
i32x4 = Simdi32x4CmpCase()
835-
i32x4.gen_test_cases()
837+
i32x4.gen_test_cases()

test/core/simd/meta/simd_i8x16_cmp.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ class Simdi8x16CmpCase(SimdCmpCase):
1515
# set lane type
1616
LANE_TYPE = 'i8x16'
1717

18+
BINARY_OPS = ['eq', 'ne', 'lt_s', 'lt_u', 'le_s', 'le_u', 'gt_s', 'gt_u', 'ge_s', 'ge_u']
19+
1820
# Overload base class method and set test data for i32x4.
1921
def get_case_data(self):
2022

test/core/simd/meta/simd_int_arith2.py

Lines changed: 21 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
"""
66

77
from simd import SIMD
8-
from test_assert import AssertReturn
8+
from test_assert import AssertReturn, AssertInvalid
99
from simd_lane_value import LaneValue
1010
from simd_integer_op import IntegerSimpleOp as IntOp
1111

@@ -319,31 +319,29 @@ def gen_test_case_combination(self):
319319
def gen_test_case_empty_argument(self):
320320
"""generate empty argument test cases"""
321321

322-
assert_1st_empyt_template = '\n(assert_invalid' \
323-
'\n (module' \
324-
'\n (func ${lane_type}.{op}-1st-arg-empty (result v128)' \
325-
'\n ({lane_type}.{op} {param_1})' \
326-
'\n )' \
327-
'\n )' \
328-
'\n "type mismatch"' \
329-
'\n)'
330-
assert_all_empty_template = '\n(assert_invalid' \
331-
'\n (module' \
332-
'\n (func ${lane_type}.{op}-all-args-empty (result v128)' \
333-
'\n ({lane_type}.{op})' \
334-
'\n )' \
335-
'\n )' \
336-
'\n "type mismatch"' \
337-
'\n)'
322+
cases = []
338323

339-
cases = ''
324+
cases.append('\n\n;; Test operation with empty argument\n')
325+
326+
case_data = {
327+
'op': '',
328+
'extended_name': 'arg-empty',
329+
'param_type': '',
330+
'result_type': '(result v128)',
331+
'params': '',
332+
}
340333

341-
cases += '\n\n;; Test operation with empty argument\n'
342334
for op in self.BINARY_OPS:
343-
cases += assert_1st_empyt_template.format(lane_type=self.LANE_TYPE, op=op, param_1=SIMD.v128_const('0', self.LANE_TYPE))
344-
cases += assert_all_empty_template.format(lane_type=self.LANE_TYPE, op=op)
335+
case_data['op'] = '{lane_type}.{op}'.format(lane_type=self.LANE_TYPE, op=op)
336+
case_data['extended_name'] = '1st-arg-empty'
337+
case_data['params'] = SIMD.v128_const('0', self.LANE_TYPE)
338+
cases.append(AssertInvalid.get_arg_empty_test(**case_data))
345339

346-
return cases
340+
case_data['extended_name'] = 'arg-empty'
341+
case_data['params'] = ''
342+
cases.append(AssertInvalid.get_arg_empty_test(**case_data))
343+
344+
return '\n'.join(cases)
347345

348346
@property
349347
def gen_funcs(self):
@@ -397,4 +395,4 @@ def gen_test_cases():
397395

398396

399397
if __name__ == '__main__':
400-
gen_test_cases()
398+
gen_test_cases()

0 commit comments

Comments
 (0)