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

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