1- import os
21from datetime import datetime
32
3+ import reframe as rfm
44import reframe .utility .sanity as sn
5- from reframe .core .pipeline import RegressionTest
65
76
8- class HelloWorldBaseTest (RegressionTest ):
9- def __init__ (self , name , lang , linkage , ** kwargs ):
10- super ().__init__ ('hello_world_%s_%s_%s' % (name , linkage , lang ),
11- os .path .dirname (__file__ ), ** kwargs )
12-
7+ class HelloWorldBaseTest (rfm .RegressionTest ):
8+ def __init__ (self , variant , lang , linkage ):
9+ super ().__init__ ()
1310 if self .current_system .name in ['dom' , 'daint' ]:
1411 self .modules += ['gcc/6.1.0' ]
1512
@@ -20,10 +17,9 @@ def __init__(self, name, lang, linkage, **kwargs):
2017 'cpp' : 'C++' ,
2118 'f90' : 'Fortran 90'
2219 }
23-
2420 self .descr = self .lang_names [lang ] + ' Hello World'
2521 self .sourcepath = 'hello_world'
26-
22+ self . build_system = 'SingleSource'
2723 self .valid_systems = ['daint:gpu' , 'daint:mc' , 'dom:gpu' , 'dom:mc' ,
2824 'kesch:cn' , 'kesch:pn' , 'leone:normal' ,
2925 'monch:compute' ]
@@ -49,18 +45,30 @@ def setup(self, partition, environ, **job_opts):
4945 self .sanity_patterns = sn .all (
5046 sn .chain ([sn .assert_eq (sn .count (result ), self .num_tasks *
5147 self .num_cpus_per_task )],
52- sn .map (lambda x : sn .assert_lt (int (x .group (1 )), int (x .group (2 ))),
53- result ),
54- sn .map (lambda x : sn .assert_lt (int (x .group (3 )), int (x .group (4 ))),
55- result ),
56- sn .map (lambda x : sn .assert_lt (int (x .group (1 )),
57- self .num_cpus_per_task ), result ),
58- sn .map (lambda x : sn .assert_eq (int (x .group (2 )),
59- self .num_cpus_per_task ), result ),
60- sn .map (lambda x : sn .assert_lt (int (x .group (3 )),
61- self .num_tasks ), result ),
62- sn .map (lambda x : sn .assert_eq (int (x .group (4 )), self .num_tasks ),
63- result ),
48+ sn .map (
49+ lambda x : sn .assert_lt (int (x .group (1 )),
50+ int (x .group (2 ))),
51+ result ),
52+ sn .map (
53+ lambda x : sn .assert_lt (int (x .group (3 )),
54+ int (x .group (4 ))),
55+ result ),
56+ sn .map (
57+ lambda x : sn .assert_lt (int (x .group (1 )),
58+ self .num_cpus_per_task ),
59+ result ),
60+ sn .map (
61+ lambda x : sn .assert_eq (int (x .group (2 )),
62+ self .num_cpus_per_task ),
63+ result ),
64+ sn .map (
65+ lambda x : sn .assert_lt (int (x .group (3 )),
66+ self .num_tasks ),
67+ result ),
68+ sn .map (
69+ lambda x : sn .assert_eq (int (x .group (4 )),
70+ self .num_tasks ),
71+ result ),
6472 )
6573 )
6674
@@ -73,46 +81,51 @@ def setup(self, partition, environ, **job_opts):
7381 }
7482 }
7583 super ().setup (partition , environ , ** job_opts )
76-
77- def compile (self ):
7884 prgenv_flags = self .prgenv_flags [self .current_environ .name ]
79- self .current_environ .cflags = prgenv_flags
80- self .current_environ .cxxflags = prgenv_flags
81- self .current_environ .fflags = prgenv_flags
85+ self .build_system .cflags = prgenv_flags
86+ self .build_system .cxxflags = prgenv_flags
87+ self .build_system .fflags = prgenv_flags
8288
89+ def compile (self ):
8390 self .compilation_time_seconds = datetime .now ()
8491 super ().compile ()
8592 self .compilation_time_seconds = (
8693 datetime .now () - self .compilation_time_seconds ).total_seconds ()
8794
8895
96+ @rfm .parameterized_test (* ([lang , linkage ]
97+ for lang in ['cpp' , 'c' , 'f90' ]
98+ for linkage in ['dynamic' , 'static' ]))
8999class HelloWorldTestSerial (HelloWorldBaseTest ):
90100 def __init__ (self , lang , linkage , ** kwargs ):
91101 super ().__init__ ('serial' , lang , linkage , ** kwargs )
92102
93103 self .sourcepath += '_serial.' + lang
94104 self .descr += ' Serial ' + linkage .capitalize ()
95105 self .prgenv_flags = {
96- 'PrgEnv-cray' : '' ,
97- 'PrgEnv-gnu' : '' ,
98- 'PrgEnv-intel' : '' ,
99- 'PrgEnv-pgi' : ''
106+ 'PrgEnv-cray' : [] ,
107+ 'PrgEnv-gnu' : [] ,
108+ 'PrgEnv-intel' : [] ,
109+ 'PrgEnv-pgi' : []
100110 }
101111 self .num_tasks = 1
102112 self .num_tasks_per_node = 1
103113 self .num_cpus_per_task = 1
104114
105115
116+ @rfm .parameterized_test (* ([lang , linkage ]
117+ for lang in ['cpp' , 'c' , 'f90' ]
118+ for linkage in ['dynamic' , 'static' ]))
106119class HelloWorldTestOpenMP (HelloWorldBaseTest ):
107- def __init__ (self , lang , linkage , ** kwargs ):
108- super ().__init__ ('openmp' , lang , linkage , ** kwargs )
120+ def __init__ (self , lang , linkage ):
121+ super ().__init__ ('openmp' , lang , linkage )
109122 self .sourcepath += '_openmp.' + lang
110123 self .descr += ' OpenMP ' + str .capitalize (linkage )
111124 self .prgenv_flags = {
112- 'PrgEnv-cray' : ' -homp ' ,
113- 'PrgEnv-gnu' : ' -fopenmp ' ,
114- 'PrgEnv-intel' : ' -qopenmp ' ,
115- 'PrgEnv-pgi' : ' -mp '
125+ 'PrgEnv-cray' : [ ' -homp' ] ,
126+ 'PrgEnv-gnu' : [ ' -fopenmp' ] ,
127+ 'PrgEnv-intel' : [ ' -qopenmp' ] ,
128+ 'PrgEnv-pgi' : [ ' -mp' ]
116129 }
117130 self .num_tasks = 1
118131 self .num_tasks_per_node = 1
@@ -125,16 +138,19 @@ def __init__(self, lang, linkage, **kwargs):
125138 }
126139
127140
141+ @rfm .parameterized_test (* ([lang , linkage ]
142+ for lang in ['cpp' , 'c' , 'f90' ]
143+ for linkage in ['dynamic' , 'static' ]))
128144class HelloWorldTestMPI (HelloWorldBaseTest ):
129- def __init__ (self , lang , linkage , ** kwargs ):
130- super ().__init__ ('mpi' , lang , linkage , ** kwargs )
145+ def __init__ (self , lang , linkage ):
146+ super ().__init__ ('mpi' , lang , linkage )
131147 self .sourcepath += '_mpi.' + lang
132148 self .descr += ' MPI ' + linkage .capitalize ()
133149 self .prgenv_flags = {
134- 'PrgEnv-cray' : '' ,
135- 'PrgEnv-gnu' : '' ,
136- 'PrgEnv-intel' : '' ,
137- 'PrgEnv-pgi' : ''
150+ 'PrgEnv-cray' : [] ,
151+ 'PrgEnv-gnu' : [] ,
152+ 'PrgEnv-intel' : [] ,
153+ 'PrgEnv-pgi' : []
138154 }
139155
140156 # for the MPI test the self.num_tasks_per_node should always be one. If
@@ -145,16 +161,19 @@ def __init__(self, lang, linkage, **kwargs):
145161 self .num_cpus_per_task = 1
146162
147163
164+ @rfm .parameterized_test (* ([lang , linkage ]
165+ for lang in ['cpp' , 'c' , 'f90' ]
166+ for linkage in ['dynamic' , 'static' ]))
148167class HelloWorldTestMPIOpenMP (HelloWorldBaseTest ):
149- def __init__ (self , lang , linkage , ** kwargs ):
150- super ().__init__ ('mpi_openmp' , lang , linkage , ** kwargs )
168+ def __init__ (self , lang , linkage ):
169+ super ().__init__ ('mpi_openmp' , lang , linkage )
151170 self .sourcepath += '_mpi_openmp.' + lang
152171 self .descr += ' MPI + OpenMP ' + linkage .capitalize ()
153172 self .prgenv_flags = {
154- 'PrgEnv-cray' : ' -homp ' ,
155- 'PrgEnv-gnu' : ' -fopenmp ' ,
156- 'PrgEnv-intel' : ' -qopenmp ' ,
157- 'PrgEnv-pgi' : ' -mp '
173+ 'PrgEnv-cray' : [ ' -homp' ] ,
174+ 'PrgEnv-gnu' : [ ' -fopenmp' ] ,
175+ 'PrgEnv-intel' : [ ' -qopenmp' ] ,
176+ 'PrgEnv-pgi' : [ ' -mp' ]
158177 }
159178 self .num_tasks = 6
160179 self .num_tasks_per_node = 3
@@ -165,22 +184,3 @@ def __init__(self, lang, linkage, **kwargs):
165184 self .variables = {
166185 'OMP_NUM_THREADS' : str (self .num_cpus_per_task )
167186 }
168-
169-
170- class HelloWorldTestFactory ():
171- def create (lang , variant , linkage , ** kwargs ):
172- if variant == 'serial' :
173- return HelloWorldTestSerial (lang , linkage , ** kwargs )
174- elif variant == 'openmp' :
175- return HelloWorldTestOpenMP (lang , linkage , ** kwargs )
176- elif variant == 'mpi' :
177- return HelloWorldTestMPI (lang , linkage , ** kwargs )
178- elif variant == 'mpi_openmp' :
179- return HelloWorldTestMPIOpenMP (lang , linkage , ** kwargs )
180-
181-
182- def _get_checks (** kwargs ):
183- return [HelloWorldTestFactory .create (lang , variant , linkage , ** kwargs )
184- for lang in ['cpp' , 'c' , 'f90' ]
185- for variant in ['serial' , 'openmp' , 'mpi' , 'mpi_openmp' ]
186- for linkage in ['dynamic' , 'static' ]]
0 commit comments