source: trunk/symbol_table/test/run_tests.py @ 2092

Last change on this file since 2092 was 2092, checked in by ksherdy, 7 years ago

Refactored id,div2,log2. All tests pass.

File size: 2.9 KB
Line 
1#
2# run_tests.py
3#
4# Symbol Table Tests
5#
6# Quick-and-dirty Python symbol table test script
7# to generates expected output files for diff and gid tests.
8#
9# Ken Herdy
10# April 12, 2012
11#
12#----------------------------------------------------------------------------
13# Edit:
14program_dir_path='../src'
15test_dir_path='../test/in'
16out_dir_path='../test/out'
17#----------------------------------------------------------------------------
18
19import sys
20import os
21import subprocess
22import shutil
23import fnmatch                 
24import string
25import optparse
26
27def gid_testcase(program, input_file):
28    file_name = os.path.basename(input_file)
29    prefix = file_name[1:file_name.rindex(')')]
30    triples = prefix.split(')_(')
31
32    e = 0
33    for t in triples:
34        e = e + int(t.split('_')[2])
35
36    output = subprocess.Popen([program, input_file], stdout=subprocess.PIPE).communicate()[0]
37    a = int(output)
38
39    print file_name
40    print "Expected: %d" % e
41    print "Actual: %d" % a
42    print
43    return e == a
44
45def diff_testcase(program, input_file, outfile_root):
46        (head, tail) = os.path.split(input_file)
47        outputdir = os.path.join(outfile_root, tail)
48        (head, tail) = os.path.split(outputdir)
49        if os.path.exists(head)==False:         
50                os.makedirs(head)
51        out_f = open(head + os.path.sep + tail, 'w')
52        subprocess.call([program, input_file], stderr=None, stdout=out_f)
53        out_f.close()
54
55def gen_test_files(test_dir_path):
56    test_files = []
57    for dirname, dirnames, filenames in os.walk(test_dir_path):
58            for filename in filenames:
59                    if filename.endswith('.test') and not filename.endswith('.svn-base'):
60                            test_files.append(os.path.relpath(os.path.join(dirname, filename)))
61    return test_files
62
63#----------------------------------------------------------------------------
64def get_option_parser():
65        """Return an C{optparse.OptionParser} instance tied to this configuration."""
66       
67        parser = optparse.OptionParser(usage='python %prog [options] <program>',
68                                        version='1.0',
69                                        )
70       
71        # Option definitions
72        parser.add_option('-d', '--diff', 
73                          dest='diff_test', 
74                          action='store_true', 
75                          default=False,
76                          help='Diff test.',
77                          )
78
79        parser.add_option('-g', '--gid', 
80                          dest='gid_test', 
81                          action='store_true', 
82                          default=False,
83                          help='GID test.',
84                          )
85
86        return parser
87
88#----------------------------------------------------------------------------
89
90if __name__ == "__main__":
91
92        option_parser = get_option_parser() 
93        options, args = option_parser.parse_args(sys.argv[1:])
94
95        # Positional arguments
96        if len(args) != 1:
97            option_parser.print_usage()
98            sys.exit()
99
100        program = os.path.join(program_dir_path,sys.argv[1])
101        test_files = gen_test_files(test_dir_path)
102
103        if options.diff_test:
104            for test_file in test_files:
105                    diff_testcase(program, test_file, out_dir_path)
106
107        if options.gid_test:
108            all_true = True
109            for test_file in test_files:
110                    result = gid_testcase(program, test_file)
111                    all_true = all_true and result
112
113            if all_true:
114                print "All pass."
115       
Note: See TracBrowser for help on using the repository browser.