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

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

Added mixed div2, log2 support. Updated div2 hash strategy to test prepended delimeter.

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