1##########################################################################
2# Copyright (c) 2009, ETH Zurich.
3# All rights reserved.
4#
5# This file is distributed under the terms in the attached LICENSE file.
6# If you do not find this file, copies can be found by writing to:
7# ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group.
8##########################################################################
9
10import tests
11from common import TestCommon
12from results import PassFailMultiResult
13
14class CompilerRTBuiltinsAbstract(TestCommon):
15
16    def get_finish_string(self):
17        return "usleeptest_done"
18
19    def process_data(self, testdir, rawiter):
20        # the test passed if no error occurred
21        errors = []
22        for line in rawiter:
23            if "error in" in line:
24                errors.append(line)
25            if line.startswith("Assertion failed on core"):
26                errors.append(line)
27
28        return PassFailMultiResult(self.name, errors)
29
30# lists of tests to run for compiler-rt
31vector_fp_tests = [
32        "compiler-rt/test/builtins/Unit/adddf3vfp_test",
33        "compiler-rt/test/builtins/Unit/addsf3vfp_test",
34        "compiler-rt/test/builtins/Unit/divdf3vfp_test",
35        "compiler-rt/test/builtins/Unit/divsf3vfp_test",
36        "compiler-rt/test/builtins/Unit/eqdf2vfp_test",
37        "compiler-rt/test/builtins/Unit/eqsf2vfp_test",
38        "compiler-rt/test/builtins/Unit/extebdsfdf2vfp_test",
39        "compiler-rt/test/builtins/Unit/fixdfsivfp_test",
40        "compiler-rt/test/builtins/Unit/fixsfsivfp_test",
41        "compiler-rt/test/builtins/Unit/fixunsdfsivfp_test",
42        "compiler-rt/test/builtins/Unit/fixunssfsivfp_test",
43        "compiler-rt/test/builtins/Unit/floatsidfvfp_test",
44        "compiler-rt/test/builtins/Unit/floatsisfvfp_test",
45        "compiler-rt/test/builtins/Unit/floatunssidfvfp_test",
46        "compiler-rt/test/builtins/Unit/floatunssisfvfp_test",
47        "compiler-rt/test/builtins/Unit/gedf2vfp_test",
48        "compiler-rt/test/builtins/Unit/gesf2vfp_test",
49        "compiler-rt/test/builtins/Unit/gtdf2vfp_test",
50        "compiler-rt/test/builtins/Unit/gtsf2vfp_test",
51        "compiler-rt/test/builtins/Unit/ledf2vfp_test",
52        "compiler-rt/test/builtins/Unit/lesf2vfp_test",
53        "compiler-rt/test/builtins/Unit/ltdf2vfp_test",
54        "compiler-rt/test/builtins/Unit/ltsf2vfp_test",
55        "compiler-rt/test/builtins/Unit/muldf3vfp_test",
56        "compiler-rt/test/builtins/Unit/mulsf3vfp_test",
57        "compiler-rt/test/builtins/Unit/nedf2vfp_test",
58        "compiler-rt/test/builtins/Unit/negdf2vfp_test",
59        "compiler-rt/test/builtins/Unit/negsf2vfp_test",
60        "compiler-rt/test/builtins/Unit/nesf2vfp_test",
61        "compiler-rt/test/builtins/Unit/subdf3vfp_test",
62        "compiler-rt/test/builtins/Unit/subsf3vfp_test",
63        "compiler-rt/test/builtins/Unit/truncdfsf2vfp_test",
64        "compiler-rt/test/builtins/Unit/unorddf2vfp_test",
65        "compiler-rt/test/builtins/Unit/unordsf2vfp_test",
66]
67
68@tests.add_test
69class CompilerRTBuiltinsVfp(CompilerRTBuiltinsAbstract):
70    name = 'compiler-rt-vfp'
71    def get_modules(self, build, machine):
72        modules = super(CompilerRTBuiltinsVfp, self).get_modules(build, machine)
73        for m in vector_fp_tests:
74            modules.add_module(m)
75        modules.add_module("usleeptest", [ "5" ])
76        return modules
77
78fp_tests = [
79        "compiler-rt/test/builtins/Unit/absvdi2_test",
80        "compiler-rt/test/builtins/Unit/absvsi2_test",
81        "compiler-rt/test/builtins/Unit/absvti2_test",
82        "compiler-rt/test/builtins/Unit/addtf3_test",
83        "compiler-rt/test/builtins/Unit/addvdi3_test",
84        "compiler-rt/test/builtins/Unit/addvsi3_test",
85        "compiler-rt/test/builtins/Unit/addvti3_test",
86        "compiler-rt/test/builtins/Unit/ashldi3_test",
87        "compiler-rt/test/builtins/Unit/ashlti3_test",
88        "compiler-rt/test/builtins/Unit/ashrdi3_test",
89        "compiler-rt/test/builtins/Unit/ashrti3_test",
90        "compiler-rt/test/builtins/Unit/bswapdi2_test",
91        "compiler-rt/test/builtins/Unit/bswapsi2_test",
92#       "compiler-rt/test/builtins/Unit/clear_cache_test",
93        "compiler-rt/test/builtins/Unit/clzdi2_test",
94        "compiler-rt/test/builtins/Unit/clzsi2_test",
95        "compiler-rt/test/builtins/Unit/clzti2_test",
96        "compiler-rt/test/builtins/Unit/cmpdi2_test",
97        "compiler-rt/test/builtins/Unit/cmpti2_test",
98        "compiler-rt/test/builtins/Unit/comparedf2_test",
99        "compiler-rt/test/builtins/Unit/comparesf2_test",
100        "compiler-rt/test/builtins/Unit/ctzdi2_test",
101        "compiler-rt/test/builtins/Unit/ctzsi2_test",
102        "compiler-rt/test/builtins/Unit/ctzti2_test",
103        "compiler-rt/test/builtins/Unit/divdc3_test",
104        "compiler-rt/test/builtins/Unit/divdi3_test",
105        "compiler-rt/test/builtins/Unit/divmodsi4_test",
106        "compiler-rt/test/builtins/Unit/divsc3_test",
107        "compiler-rt/test/builtins/Unit/divsi3_test",
108#       "compiler-rt/test/builtins/Unit/divtc3_test",
109        "compiler-rt/test/builtins/Unit/divtf3_test",
110        "compiler-rt/test/builtins/Unit/divti3_test",
111        "compiler-rt/test/builtins/Unit/divxc3_test",
112#       "compiler-rt/test/builtins/Unit/enable_execute_stack_test",
113        "compiler-rt/test/builtins/Unit/eqtf2_test",
114        "compiler-rt/test/builtins/Unit/extenddftf2_test",
115#       "compiler-rt/test/builtins/Unit/extendhfsf2_test",
116        "compiler-rt/test/builtins/Unit/extendsftf2_test",
117        "compiler-rt/test/builtins/Unit/ffsdi2_test",
118        "compiler-rt/test/builtins/Unit/ffsti2_test",
119        "compiler-rt/test/builtins/Unit/fixdfdi_test",
120        "compiler-rt/test/builtins/Unit/fixdfti_test",
121        "compiler-rt/test/builtins/Unit/fixsfdi_test",
122        "compiler-rt/test/builtins/Unit/fixsfti_test",
123        "compiler-rt/test/builtins/Unit/fixtfdi_test",
124        "compiler-rt/test/builtins/Unit/fixtfsi_test",
125        "compiler-rt/test/builtins/Unit/fixtfti_test",
126        # this errors on 0X1P+64
127        #"compiler-rt/test/builtins/Unit/fixunsdfdi_test",
128        "compiler-rt/test/builtins/Unit/fixunsdfsi_test",
129        "compiler-rt/test/builtins/Unit/fixunsdfti_test",
130        # this errors on 0X1P+64
131        #"compiler-rt/test/builtins/Unit/fixunssfdi_test",
132        "compiler-rt/test/builtins/Unit/fixunssfsi_test",
133        "compiler-rt/test/builtins/Unit/fixunssfti_test",
134        "compiler-rt/test/builtins/Unit/fixunstfdi_test",
135        "compiler-rt/test/builtins/Unit/fixunstfsi_test",
136        "compiler-rt/test/builtins/Unit/fixunstfti_test",
137        "compiler-rt/test/builtins/Unit/fixunsxfdi_test",
138        "compiler-rt/test/builtins/Unit/fixunsxfsi_test",
139        "compiler-rt/test/builtins/Unit/fixunsxfti_test",
140        "compiler-rt/test/builtins/Unit/fixxfdi_test",
141        "compiler-rt/test/builtins/Unit/fixxfti_test",
142        "compiler-rt/test/builtins/Unit/floatdidf_test",
143        "compiler-rt/test/builtins/Unit/floatdisf_test",
144        "compiler-rt/test/builtins/Unit/floatditf_test",
145        "compiler-rt/test/builtins/Unit/floatdixf_test",
146        "compiler-rt/test/builtins/Unit/floatsitf_test",
147        "compiler-rt/test/builtins/Unit/floattidf_test",
148        "compiler-rt/test/builtins/Unit/floattisf_test",
149        "compiler-rt/test/builtins/Unit/floattixf_test",
150        "compiler-rt/test/builtins/Unit/floatundidf_test",
151        "compiler-rt/test/builtins/Unit/floatundisf_test",
152        "compiler-rt/test/builtins/Unit/floatunditf_test",
153        "compiler-rt/test/builtins/Unit/floatundixf_test",
154        "compiler-rt/test/builtins/Unit/floatunsitf_test",
155        "compiler-rt/test/builtins/Unit/floatuntidf_test",
156        "compiler-rt/test/builtins/Unit/floatuntisf_test",
157        "compiler-rt/test/builtins/Unit/floatuntixf_test",
158#       "compiler-rt/test/builtins/Unit/gcc_personality_test",
159        "compiler-rt/test/builtins/Unit/getf2_test",
160        "compiler-rt/test/builtins/Unit/gttf2_test",
161        "compiler-rt/test/builtins/Unit/letf2_test",
162        "compiler-rt/test/builtins/Unit/lshrdi3_test",
163        "compiler-rt/test/builtins/Unit/lshrti3_test",
164        "compiler-rt/test/builtins/Unit/lttf2_test",
165        "compiler-rt/test/builtins/Unit/moddi3_test",
166        "compiler-rt/test/builtins/Unit/modsi3_test",
167        "compiler-rt/test/builtins/Unit/modti3_test",
168        "compiler-rt/test/builtins/Unit/muldc3_test",
169        "compiler-rt/test/builtins/Unit/muldi3_test",
170        "compiler-rt/test/builtins/Unit/mulodi4_test",
171        "compiler-rt/test/builtins/Unit/mulosi4_test",
172        "compiler-rt/test/builtins/Unit/muloti4_test",
173        "compiler-rt/test/builtins/Unit/mulsc3_test",
174        "compiler-rt/test/builtins/Unit/multc3_test",
175        "compiler-rt/test/builtins/Unit/multf3_test",
176        "compiler-rt/test/builtins/Unit/multi3_test",
177        "compiler-rt/test/builtins/Unit/mulvdi3_test",
178        "compiler-rt/test/builtins/Unit/mulvsi3_test",
179        "compiler-rt/test/builtins/Unit/mulvti3_test",
180        "compiler-rt/test/builtins/Unit/mulxc3_test",
181        "compiler-rt/test/builtins/Unit/negdi2_test",
182        "compiler-rt/test/builtins/Unit/negti2_test",
183        "compiler-rt/test/builtins/Unit/negvdi2_test",
184        "compiler-rt/test/builtins/Unit/negvsi2_test",
185        "compiler-rt/test/builtins/Unit/negvti2_test",
186        "compiler-rt/test/builtins/Unit/netf2_test",
187        "compiler-rt/test/builtins/Unit/paritydi2_test",
188        "compiler-rt/test/builtins/Unit/paritysi2_test",
189        "compiler-rt/test/builtins/Unit/parityti2_test",
190        "compiler-rt/test/builtins/Unit/popcountdi2_test",
191        "compiler-rt/test/builtins/Unit/popcountsi2_test",
192        "compiler-rt/test/builtins/Unit/popcountti2_test",
193        "compiler-rt/test/builtins/Unit/powidf2_test",
194        "compiler-rt/test/builtins/Unit/powisf2_test",
195        "compiler-rt/test/builtins/Unit/powitf2_test",
196        "compiler-rt/test/builtins/Unit/powixf2_test",
197        "compiler-rt/test/builtins/Unit/subtf3_test",
198        "compiler-rt/test/builtins/Unit/subvdi3_test",
199        "compiler-rt/test/builtins/Unit/subvsi3_test",
200        "compiler-rt/test/builtins/Unit/subvti3_test",
201#       "compiler-rt/test/builtins/Unit/trampoline_setup_test",
202#       "compiler-rt/test/builtins/Unit/truncdfhf2_test",
203        "compiler-rt/test/builtins/Unit/truncdfsf2_test",
204#       "compiler-rt/test/builtins/Unit/truncsfhf2_test",
205        "compiler-rt/test/builtins/Unit/trunctfdf2_test",
206        "compiler-rt/test/builtins/Unit/trunctfsf2_test",
207        "compiler-rt/test/builtins/Unit/ucmpdi2_test",
208        "compiler-rt/test/builtins/Unit/ucmpti2_test",
209        "compiler-rt/test/builtins/Unit/udivdi3_test",
210        "compiler-rt/test/builtins/Unit/udivmoddi4_test",
211        "compiler-rt/test/builtins/Unit/udivmodsi4_test",
212        "compiler-rt/test/builtins/Unit/udivmodti4_test",
213        "compiler-rt/test/builtins/Unit/udivsi3_test",
214        "compiler-rt/test/builtins/Unit/udivti3_test",
215        "compiler-rt/test/builtins/Unit/umoddi3_test",
216        "compiler-rt/test/builtins/Unit/umodsi3_test",
217        "compiler-rt/test/builtins/Unit/umodti3_test",
218        "compiler-rt/test/builtins/Unit/unordtf2_test",
219]
220
221def get_modules_tpl(ts, self, build, machine):
222    '''Function template for get_modules() for each compiler-rt test case'''
223    modules = super(CompilerRTBuiltinsAbstract, self).get_modules(build, machine)
224    for m in ts:
225        if hasattr(machine, "name") and machine.name.startswith("panda") and \
226           (m.endswith("floatdisf_test") or m.endswith("floatdidf_test")):
227            # Skip failing test on pandaboard
228            continue
229        modules.add_module(m)
230    modules.add_module("usleeptest", [ "5" ])
231    return modules
232
233def chunker(seq, size):
234    '''Helper function: this takes a sequence `seq` and splits it up into
235    `size`-sized chunks, except for the last chunk which is just the <= size
236    long remainder of the sequence'''
237    return (seq[pos:pos+size] for pos in xrange(0, len(seq), size))
238
239# generate test-cases with <=CHUNK_SIZE compiler-rt tests each
240CHUNK_SIZE=35
241# array just to keep the class objects somewhere
242compiler_rt_tests_classes = []
243for i, ts in enumerate(chunker(fp_tests, CHUNK_SIZE)):
244    # append new class to our array
245    compiler_rt_tests_classes.append(
246        # this is essentially the decorator @tests.add_test
247        tests.add_test(
248            # type is the (built-in) base-class for python classes, here we
249            # construct classes by calling its constructor
250            # signature of type constructor:
251            #   type(classname, baseclass tuple, dict with methods/attributes)
252            type('CompilerRTBuiltins%d' % (i+1),
253                 (CompilerRTBuiltinsAbstract,),
254                 { 'name': 'compiler-rt-fp%d' % (i+1),
255                    # partially bind the get_modules() template to select the
256                    # right set of tests. Note the ts=ts in the lambda
257                    # arguments, this prevents python's default late-binding
258                    # for closure arguments.
259                     'get_modules':
260                         lambda s, b, m, ts=ts: get_modules_tpl(ts, s, b, m)})))
261