source: icGREP/icgrep-devel/QA/lz4d_ext_dep/main.py @ 5941

Last change on this file since 5941 was 5941, checked in by xwa163, 14 months ago
  1. Add attributes to disable some features of multiblock kernel
  2. Fix bug for lz4d new approach in large data, pass all test cases
  3. Disable lz4d related test cases for old approach
File size: 4.7 KB
Line 
1import lz4d
2
3import sys, subprocess, optparse, os, string, random
4import codecs
5import shutil
6
7global options
8global lz4d_program_under_test
9
10failure_count = 0
11
12test_options = [
13    # ('extract_only', '-extract-only', {'extract_only' : True}),
14    # ('extract_and_deposit', '-extract-and-deposit-only', {'extract_and_deposit_only': True}),
15    # ('normal', '', {}),
16    ('extract_only_new_approach', '-new-approach -extract-only', {'extract_only' : True}),
17    ('extract_and_deposit_new_approach', '-new-approach -extract-and-deposit-only', {'extract_and_deposit_only': True}),
18    ('normal_new_approach', '-new-approach', {}),
19]
20
21
22def run_test(test_file, lz4_option, python_lz4_option, test_file_full_path, output_file_full_path, python_output_file_full_path):
23    global failure_count
24    lz4d_cmd = "%s %s --thread-num=1 -f %s %s" % (
25    lz4d_program_under_test, lz4_option, test_file_full_path, output_file_full_path, )
26
27    if options.verbose:
28        print("Doing: " + lz4d_cmd)
29    try:
30        lz4d_out = subprocess.check_output(lz4d_cmd.encode('utf-8'), cwd=options.exec_dir, shell=True)
31    except subprocess.CalledProcessError as e:
32        lz4d_out = e.output
33
34    lz4Decoder = lz4d.LZ4Decoder()
35
36    lz4Decoder.decode(test_file_full_path, python_output_file_full_path, python_lz4_option)
37
38    with codecs.open(output_file_full_path, mode='rb') as inf:
39        output_content = inf.read()
40    with codecs.open(python_output_file_full_path, mode='rb') as inf:
41        expected_output_content = inf.read()
42
43    if output_content != expected_output_content:
44        print("Test failure: datafile {%s} option:{%s}" % (test_file, lz4_option))
45        failure_count += 1
46    else:
47        if options.verbose:
48            print("Test success: datafile {%s} option:{%s}" % (test_file, lz4_option))
49
50
51def run_tests(test_dir, output_dir, python_output_dir):
52    global options
53    global failure_count
54
55    test_files = os.listdir(test_dir)
56
57    for test_file in test_files:
58        if test_file.endswith('.lz4'):
59            output_file = test_file.replace('.lz4', '')
60            test_file_full_path = os.path.join(test_dir, test_file)
61            for test_opt in test_options:
62                output_file_full_path = os.path.join(output_dir, test_opt[0], output_file)
63                python_output_file_full_path = os.path.join(python_output_dir, test_opt[0], output_file)
64                run_test(test_file, test_opt[1], test_opt[2], test_file_full_path, output_file_full_path, python_output_file_full_path)
65
66    if failure_count > 0:
67        print("Test Failure")
68        exit(1)
69    else:
70        print("Test Success")
71
72
73if __name__ == '__main__':
74    QA_dir = os.path.dirname(sys.argv[0])
75
76    option_parser = optparse.OptionParser(usage='python %prog [options] <lz4d_ext_dep_executable>', version='1.0')
77    option_parser.add_option('-d', '--datafile_dir',
78                             dest='datafile_dir', type='string', default='testfiles',
79                             help='directory for test files.')
80    option_parser.add_option('-e', '--exec_dir',
81                             dest='exec_dir', type='string', default='.',
82                             help='executable directory')
83    option_parser.add_option('-o', '--output_dir',
84                             dest='output_dir', type='string', default='output',
85                             help='output directory of decompressed files')
86    option_parser.add_option('-p', '--python_output_dir',
87                             dest='python_output_dir', type='string', default='python_output',
88                             help='output directory of expected result (python version)')
89    option_parser.add_option('-v', '--verbose',
90                             dest='verbose', action='store_true', default=False,
91                             help='verbose output: show successful tests')
92    options, args = option_parser.parse_args(sys.argv[1:])
93
94    if len(args) != 1:
95        option_parser.print_usage()
96        sys.exit(1)
97
98    if not os.path.exists(options.datafile_dir):
99        print(options.datafile_dir + ' not exists')
100        sys.exit(1)
101
102    if os.path.exists(options.output_dir):
103        shutil.rmtree(options.output_dir)
104    os.mkdir(options.output_dir)
105    for opt in test_options:
106        os.mkdir(os.path.join(options.output_dir, opt[0]))
107
108    if os.path.exists(options.python_output_dir):
109        shutil.rmtree(options.python_output_dir)
110
111    os.mkdir(options.python_output_dir)
112    for opt in test_options:
113        os.mkdir(os.path.join(options.python_output_dir, opt[0]))
114
115    lz4d_program_under_test = args[0]
116
117    test_dir = os.path.join(QA_dir, options.datafile_dir)
118    output_dir = os.path.join(QA_dir, options.output_dir)
119    python_output_dir = os.path.join(QA_dir, options.python_output_dir)
120    run_tests(test_dir, output_dir, python_output_dir)
121
Note: See TracBrowser for help on using the repository browser.