Project

General

Profile

Download (25 KB) Statistics
| Branch: | Tag: | Revision:
1
include(CMakeParseArguments)
2
include(FindUnixCommands)
3

    
4

    
5

    
6

    
7
#******************first stratefy :generate input values and their outputs for reference
8
function(Copy_or_generate_lusi_input_and_output_values_for_reference )
9
  set(options "")
10
  set(oneValueArgs  NODE LUS_FILE  SRC_DIR DST_DIR MAX)
11
  set(multiValueArgs  OPTS )
12
  cmake_parse_arguments(GEN "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
13

    
14
  #message("check references files for ${GEN_LUS_FILE}  ")
15
  #get_filename_component(L ${GEN_LUS_FILE} NAME_WE)
16
  get_lustre_name_ext(${GEN_LUS_FILE} L E)
17
  set(LUSTRE_OUTPUT_DIR "${GEN_DST_DIR}/${L}")
18
  file(COPY ${GEN_LUS_FILE}   DESTINATION  ${LUSTRE_OUTPUT_DIR})
19

    
20
  #generate .lusi if not exists
21
  if(EXISTS ${GEN_SRC_DIR}/${L}.lusi)
22
    file(COPY  ${GEN_SRC_DIR}/${L}.lusi DESTINATION  ${LUSTRE_OUTPUT_DIR})
23
  else()
24
    message("generate ${L}.lusi \n")
25
    Lustre_Compile(LUS_FILE ${GEN_LUS_FILE}
26
      NODE ""
27
      OPTS "-lusi"
28
      DIR ${GEN_SRC_DIR}
29
      DST_DIR ${GEN_DST_DIR})
30
    CUT_OPTIONS("-lusi" GEN_OPTS_CUT_0)
31
    
32
    
33
    execute_process(RESULT_VARIABLE res 
34
     COMMAND ${LUSTRE_COMPILER} ${LUSTREC_ARGS_${L}__${GEN_OPTS_CUT_0}} 
35
     WORKING_DIRECTORY ${GEN_SRC_DIR})
36
    if(${res} STREQUAL "0")
37
      file(COPY  ${GEN_SRC_DIR}/${L}.lusi DESTINATION  ${LUSTRE_OUTPUT_DIR})
38
    else()
39
      message(FATAL_ERROR "${L}.lusi couldn't be generated")
40
    endif()
41
  endif()
42

    
43

    
44
  #generate input and output values
45
  if(EXISTS ${GEN_SRC_DIR}/${L}_${GEN_NODE}_input_values)
46
    file(COPY  ${GEN_SRC_DIR}/${L}_${GEN_NODE}_input_values DESTINATION  ${LUSTRE_OUTPUT_DIR})
47
  elseif(EXISTS ${GEN_SRC_DIR}/${L}.lusi)
48
    message("generate ${L}_${GEN_NODE}_input_values \n")
49
# message (" command is ${JAVA_RUNTIME} -cp ${CMAKE_BINARY_DIR}/modules/ Generate_inputs_lusi ${GEN_NODE} ${L}.lusi ${GEN_MAX}" )
50
    execute_process(RESULT_VARIABLE res 
51
      COMMAND ${JAVA_RUNTIME} -cp ${CMAKE_BINARY_DIR}/modules/ Generate_inputs_lusi ${GEN_NODE} ${L}.lusi ${GEN_MAX}
52
      WORKING_DIRECTORY ${GEN_SRC_DIR})
53

    
54
    if(${res} STREQUAL "0")
55
      file(COPY  ${GEN_SRC_DIR}/${L}_${GEN_NODE}_input_values DESTINATION  ${LUSTRE_OUTPUT_DIR})
56
    else()
57
      message(FATAL_ERROR "${L}_input_values couldn't be generated")
58
    endif()
59
  endif()
60

    
61
  if(GEN_OPTS)
62
    CUT_OPTIONS("${GEN_OPTS}" GEN_OPTS_CUT)
63
  endif()
64
  
65
  if(EXISTS ${GEN_SRC_DIR}/${L}_${GEN_NODE}_${GEN_OPTS_CUT}_output_values)
66
    file(COPY  ${GEN_SRC_DIR}/${L}_${GEN_NODE}_${GEN_OPTS_CUT}_output_values DESTINATION  ${LUSTRE_OUTPUT_DIR})
67
  elseif(EXISTS ${GEN_SRC_DIR}/${L}_${GEN_NODE}_input_values)
68
    message("generate  ${L}_${GEN_NODE}_${GEN_OPTS_CUT}_output_values for reference \n")
69
        
70
    Lustre_Compile(LUS_FILE ${GEN_LUS_FILE}
71
      NODE ${GEN_NODE}
72
      OPTS ${GEN_OPTS}
73
      DIR ${GEN_SRC_DIR}
74
      DST_DIR ${GEN_DST_DIR})
75
    
76
    execute_process(
77
      COMMAND ${LUSTRE_COMPILER} ${LUSTREC_ARGS_${L}_${GEN_NODE}_${GEN_OPTS_CUT}} 
78
      WORKING_DIRECTORY ${GEN_SRC_DIR})			
79
    execute_process(
80
      COMMAND  make -f ${L}.makefile
81
      WORKING_DIRECTORY ${GEN_SRC_DIR})	
82

    
83
    if(EXISTS ${GEN_SRC_DIR}/${L}_${GEN_NODE})
84
        execute_process(RESULT_VARIABLE res 
85
          COMMAND ${BASH} -c "./${L}_${GEN_NODE} < ${L}_${GEN_NODE}_input_values > ${L}_${GEN_NODE}_${GEN_OPTS_CUT}_output_values"
86
          WORKING_DIRECTORY ${GEN_SRC_DIR})	
87
        file(REMOVE ${GEN_SRC_DIR}/${L}_${GEN_NODE} ${GEN_SRC_DIR}/io_frontend.o ${GEN_SRC_DIR}/${L}.c ${GEN_SRC_DIR}/${L}.h ${GEN_SRC_DIR}/${L}.lusic ${GEN_SRC_DIR}/${L}.makefile ${GEN_SRC_DIR}/${L}.o ${GEN_SRC_DIR}/${L}_alloc.h ${GEN_SRC_DIR}/${L}_main.c ${GEN_SRC_DIR}/${L}_main.o )
88
        if(${res} STREQUAL "0")
89
          file(COPY  ${GEN_SRC_DIR}/${L}_${GEN_NODE}_${GEN_OPTS_CUT}_output_values DESTINATION  ${LUSTRE_OUTPUT_DIR})
90
        else()
91
          message(FATAL_ERROR "${L}_${GEN_NODE}_${GEN_OPTS_CUT}_output_values Error")
92
        endif()
93
    else()
94
      #Uncomment the first line to remove lustre files in case references are not generated.
95
      #file(REMOVE ${GEN_SRC_DIR}/${L}.lus ${GEN_SRC_DIR}/${L}.lusi ${GEN_SRC_DIR}/${L}.c ${GEN_SRC_DIR}/${L}.h ${GEN_SRC_DIR}/${L}.lusic ${GEN_SRC_DIR}/${L}.makefile)
96
      #message(FATAL_ERROR "deleting ${GEN_SRC_DIR}/${L}.lus example Error")
97
    endif()
98
  endif()
99

    
100

    
101
endfunction(Copy_or_generate_lusi_input_and_output_values_for_reference)
102

    
103

    
104

    
105

    
106

    
107

    
108

    
109

    
110

    
111

    
112
#****************************second stratefy :generate zustre output.xml for reference
113
function(Copy_or_generate_zustre_output_xml_for_reference )
114
  set(options "")
115
  set(oneValueArgs  NODE LUS_FILE SRC_DIR DST_DIR)
116
  set(multiValueArgs  OPTS )
117
  cmake_parse_arguments(GEN "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
118

    
119
  if(GEN_OPTS)
120
    CUT_OPTIONS("${GEN_OPTS}" ZUS_OPTS_CUT)
121
  endif()
122
  get_lustre_name_ext(${GEN_LUS_FILE} L E)
123

    
124
  #get_filename_component(L ${GEN_LUS_FILE} NAME_WE)
125
  set(LUSTRE_OUTPUT_DIR "${GEN_DST_DIR}/${L}")
126
  if(EXISTS ${GEN_SRC_DIR}/${L}_${GEN_NODE}_${ZUS_OPTS_CUT}.xml)
127
    file(COPY ${GEN_SRC_DIR}/${L}_${GEN_NODE}_${ZUS_OPTS_CUT}.xml   DESTINATION  ${LUSTRE_OUTPUT_DIR})
128
    file(READ ${GEN_SRC_DIR}/${L}_${GEN_NODE}_${ZUS_OPTS_CUT}.xml ${L}_${GEN_NODE}_zustre_output)		
129
  else()
130
    message("generate ${L}_${GEN_NODE}_${ZUS_OPTS_CUT}.xml for reference\n")
131
    Zustre_Compile(LUS_FILE ${GEN_LUS_FILE}
132
      NODE ${GEN_NODE}
133
      OPTS ${GEN_OPTS}
134
      DST_DIR ${GEN_DST_DIR}
135
      )
136

    
137
    execute_process(RESULT_VARIABLE res 
138
      OUTPUT_VARIABLE ${L}_${GEN_NODE}_zustre_output
139
      COMMAND  ${ZUSTRE_COMPILER} ${ZUSTRE_ARGS_${L}_${GEN_NODE}_${ZUS_OPTS_CUT}} 
140
      WORKING_DIRECTORY ${GEN_SRC_DIR})
141
    
142
    file(WRITE ${GEN_SRC_DIR}/${L}_${GEN_NODE}_${ZUS_OPTS_CUT}.xml ${${L}_${GEN_NODE}_zustre_output})
143
    file(COPY ${GEN_SRC_DIR}/${L}_${GEN_NODE}_${ZUS_OPTS_CUT}.xml   DESTINATION  ${LUSTRE_OUTPUT_DIR})
144
    
145
  endif()
146
  if( ${${L}_${GEN_NODE}_zustre_output} MATCHES "<Answer>CEX</Answer>")
147
    set(ZUSTRE_ANSWER "CEX")
148
  elseif( ${${L}_${GEN_NODE}_zustre_output} MATCHES "<Answer>SAFE</Answer>")
149
    set(ZUSTRE_ANSWER "SAFE")
150
  elseif( ${${L}_${GEN_NODE}_zustre_output} MATCHES "<Answer>TIMEOUT</Answer>")
151
    set(ZUSTRE_ANSWER "TIMEOUT")
152
  else()
153
    set(ZUSTRE_ANSWER "ERROR")
154
  endif()
155
  set(ZUSTRE_ANSWER_${L}_${GEN_NODE} "${ZUSTRE_ANSWER}" PARENT_SCOPE)
156
endfunction(Copy_or_generate_zustre_output_xml_for_reference )
157

    
158

    
159

    
160

    
161

    
162

    
163

    
164
#***********************third strategy: Compile with zustre and compare
165

    
166
function(Zustre_compile_and_compare_to_reference)
167
  set(options "")
168
  set(oneValueArgs  NODE LUS_FILE  TESTS_PREFIX CALL_ID SRC_DIR DST_DIR)
169
  set(multiValueArgs  OPTS )
170
  cmake_parse_arguments(GEN "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
171

    
172

    
173
  get_lustre_name_ext(${GEN_LUS_FILE} L E)
174
  #get_filename_component(L ${GEN_LUS_FILE} NAME_WE)
175
  
176
  Lustre_Compile(LUS_FILE ${GEN_LUS_FILE}
177
    NODE ""
178
    OPTS "-horn"
179
    DST_DIR ${GEN_DST_DIR}
180
    )
181
  CUT_OPTIONS("-horn" LUS_OPTS_CUT)
182
   
183
  add_test(NAME ${GEN_TESTS_PREFIX}_COMPIL_LUSTRE_HORN_${L}__${LUS_OPTS_CUT}_${GEN_CALL_ID}
184
    COMMAND  ${LUSTRE_COMPILER} ${LUSTREC_ARGS_${L}__${LUS_OPTS_CUT}} 
185
    )
186

    
187
  Zustre_Compile(LUS_FILE ${GEN_LUS_FILE}
188
    NODE ${GEN_NODE}
189
    OPTS ${GEN_OPTS}
190
    DST_DIR ${GEN_DST_DIR}
191
    )
192
  
193
  if(GEN_OPTS)
194
    CUT_OPTIONS("${GEN_OPTS}" ZUS_OPTS_CUT)
195
  endif()
196
  
197
  set(ZUSTRE_OUTPUT_DIR ${ZUSTRE_OUTPUT_DIR_${L}_${GEN_NODE}_${ZUS_OPTS_CUT}})
198
  
199
  set(ZUSTRE_ARGS_TEMP "${ZUSTRE_ARGS_${L}_${GEN_NODE}_${ZUS_OPTS_CUT}}" "> ${L}_${GEN_NODE}_${ZUS_OPTS_CUT}.xml")
200
  JOIN("${ZUSTRE_ARGS_TEMP}" " " ZUSTRE_ARGS)
201
  
202
  add_test(NAME ${GEN_TESTS_PREFIX}_COMPIL_ZUSTRE_${L}_${GEN_NODE}_${ZUS_OPTS_CUT}_${GEN_CALL_ID}
203
    COMMAND bash -c "${ZUSTRE_COMPILER} ${ZUSTRE_ARGS}"
204
    WORKING_DIRECTORY ${ZUSTRE_OUTPUT_DIR}
205
    )
206
  SET_TESTS_PROPERTIES (  ${GEN_TESTS_PREFIX}_COMPIL_ZUSTRE_${L}_${GEN_NODE}_${ZUS_OPTS_CUT}_${GEN_CALL_ID}
207
    PROPERTIES FAIL_REGULAR_EXPRESSION "AssertionError;ERROR;Failed;Traceback"
208
    DEPENDS ${GEN_TESTS_PREFIX}_COMPIL_LUSTRE_HORN_${L}__${LUS_OPTS_CUT}_${GEN_CALL_ID})
209
  
210
  add_test(NAME ${GEN_TESTS_PREFIX}_COMPARE_REF_ZUSTRE_${L}_${GEN_NODE}_${ZUS_OPTS_CUT}_${GEN_CALL_ID}
211
    COMMAND ${CMAKE_COMMAND} -DREF=${GEN_DST_DIR}/${L}/${L}_${GEN_NODE}_${ZUS_OPTS_CUT}.xml
212
                             -DGEN=${ZUSTRE_OUTPUT_DIR}/${L}_${GEN_NODE}_${ZUS_OPTS_CUT}.xml
213
    	    -P ${CMAKE_SOURCE_DIR}/modules/compare_ref_zustre.cmake
214

    
215
    WORKING_DIRECTORY ${ZUSTRE_OUTPUT_DIR}
216
    )
217
  SET_TESTS_PROPERTIES ( ${GEN_TESTS_PREFIX}_COMPARE_REF_ZUSTRE_${L}_${GEN_NODE}_${ZUS_OPTS_CUT}_${GEN_CALL_ID}
218
    PROPERTIES REQUIRED_FILES  "${L}_${GEN_NODE}_${ZUS_OPTS_CUT}.xml"
219
    DEPENDS ${GEN_TESTS_PREFIX}_COMPIL_ZUSTRE_${L}_${GEN_NODE}_${ZUS_OPTS_CUT}_${GEN_CALL_ID})
220

    
221
  
222
  # add_test(NAME ${GEN_TESTS_PREFIX}_TAILGEN_ZUSTRE_${L}_${GEN_NODE}_${ZUS_OPTS_CUT}_${GEN_CALL_ID}
223
  #   COMMAND bash -c "tail -n +8 ${L}_${GEN_NODE}_${ZUS_OPTS_CUT}.xml > ${L}_tailed1.xml; | grep Answer | awk '{$1=$1};1'"
224
  #   WORKING_DIRECTORY ${ZUSTRE_OUTPUT_DIR}
225
  #   )
226
  # SET_TESTS_PROPERTIES ( ${GEN_TESTS_PREFIX}_TAILGEN_ZUSTRE_${L}_${GEN_NODE}_${ZUS_OPTS_CUT}_${GEN_CALL_ID}
227
  #   PROPERTIES REQUIRED_FILES  ${L}_${GEN_NODE}_${ZUS_OPTS_CUT}.xml
228
  #   DEPENDS ${GEN_TESTS_PREFIX}_COMPIL_ZUSTRE_${L}_${GEN_NODE}_${ZUS_OPTS_CUT}_${GEN_CALL_ID})
229
  
230
  # add_test(NAME ${GEN_TESTS_PREFIX}_TAILREF_ZUSTRE_${L}_${GEN_NODE}_${ZUS_OPTS_CUT}_${GEN_CALL_ID}
231
  #   COMMAND bash -c "tail -n +8 ${L}_${GEN_NODE}_${ZUS_OPTS_CUT}.xml > ${L}_${GEN_NODE}_tailed2.xml"
232
  #   WORKING_DIRECTORY ${GEN_DST_DIR}/${L}/
233
  #   )
234
  # SET_TESTS_PROPERTIES ( ${GEN_TESTS_PREFIX}_TAILREF_ZUSTRE_${L}_${GEN_NODE}_${ZUS_OPTS_CUT}_${GEN_CALL_ID}
235
  #   PROPERTIES REQUIRED_FILES  ${L}_${GEN_NODE}_${ZUS_OPTS_CUT}.xml
236
  #   DEPENDS ${GEN_TESTS_PREFIX}_TAILGEN_ZUSTRE_${L}_${GEN_NODE}_${ZUS_OPTS_CUT}_${GEN_CALL_ID})
237
  
238
  
239
  # add_test(NAME ${GEN_TESTS_PREFIX}_DIFF_ZUSTRE_${L}_${GEN_NODE}_${ZUS_OPTS_CUT}_${GEN_CALL_ID}
240
  #   COMMAND ${CMAKE_COMMAND} -E compare_files  ${L}_tailed1.xml  ../${L}_${GEN_NODE}_tailed2.xml
241
  #   WORKING_DIRECTORY ${ZUSTRE_OUTPUT_DIR}
242
  #   )
243
  # SET_TESTS_PROPERTIES ( ${GEN_TESTS_PREFIX}_DIFF_ZUSTRE_${L}_${GEN_NODE}_${ZUS_OPTS_CUT}_${GEN_CALL_ID}
244
  #   PROPERTIES REQUIRED_FILES  ${L}_tailed1.xml
245
  #   DEPENDS ${GEN_TESTS_PREFIX}_TAILREF_ZUSTRE_${L}_${GEN_NODE}_${ZUS_OPTS_CUT}_${GEN_CALL_ID})	
246

    
247
endfunction(Zustre_compile_and_compare_to_reference)
248

    
249

    
250

    
251

    
252

    
253

    
254

    
255

    
256

    
257
#***********************fourth strategy: compare in case of CEX examples the Zustre trace with lustrec
258
function(Compare_Zustre_and_Lustrec_outputs)
259
  set(options MYJAVADIFF)
260
  set(oneValueArgs  NODE LUS_FILE  CALL_ID TESTS_PREFIX SRC_DIR DST_DIR DIFF_EPSILON)
261
  set(multiValueArgs  OPTS )
262
  cmake_parse_arguments(GEN "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
263

    
264
  
265
  get_lustre_name_ext(${GEN_LUS_FILE} L E)
266
  #get_filename_component(L ${GEN_LUS_FILE} NAME_WE)
267

    
268
  Zustre_Compile(LUS_FILE ${GEN_LUS_FILE}
269
    NODE ${GEN_NODE}
270
    OPTS ${GEN_OPTS}
271
    DST_DIR ${GEN_DST_DIR}
272
    )
273
  if(GEN_OPTS)
274
    CUT_OPTIONS("${GEN_OPTS}" ZUS_OPTS_CUT)
275
  endif()
276
  set(ZUSTRE_OUTPUT_DIR ${ZUSTRE_OUTPUT_DIR_${L}_${GEN_NODE}_${ZUS_OPTS_CUT}})
277
 
278

    
279

    
280
  add_test(NAME ${GEN_TESTS_PREFIX}_XPathParser_lusi_ZUSTRE_${L}_${GEN_NODE}_${ZUS_OPTS_CUT}_${GEN_CALL_ID}
281
    COMMAND ${JAVA_RUNTIME} -cp ${CMAKE_BINARY_DIR}/modules/ XPathParser_lusi ${GEN_NODE} ../${L}.lusi ${L}_${GEN_NODE}_${ZUS_OPTS_CUT}.xml
282
    WORKING_DIRECTORY ${ZUSTRE_OUTPUT_DIR}
283
    )
284
  SET_TESTS_PROPERTIES ( ${GEN_TESTS_PREFIX}_XPathParser_lusi_ZUSTRE_${L}_${GEN_NODE}_${ZUS_OPTS_CUT}_${GEN_CALL_ID}
285
    PROPERTIES REQUIRED_FILES  ${GEN_DST_DIR}/${L}/${L}.lusi 
286
    DEPENDS ${GEN_TESTS_PREFIX}_COMPIL_ZUSTRE_${L}_${GEN_NODE}_${ZUS_OPTS_CUT}_${GEN_CALL_ID} )	
287
  
288
  Lustre_Compile(LUS_FILE ${lus_file}
289
    NODE ${GEN_NODE}
290
    OPTS ""
291
    DIR ${ZUSTRE_OUTPUT_DIR}
292
    DST_DIR ${GEN_DST_DIR})
293
  
294
  set(LUS_OPTS_CUT "")
295
  add_test(NAME ${GEN_TESTS_PREFIX}_COMPIL_LUSTRE_${L}_${GEN_NODE}_${LUS_OPTS_CUT}_${GEN_CALL_ID}
296
    COMMAND  ${LUSTRE_COMPILER} ${LUSTREC_ARGS_${L}_${GEN_NODE}_${LUS_OPTS_CUT}} 
297
    WORKING_DIRECTORY ${ZUSTRE_OUTPUT_DIR}
298
    )
299

    
300
  add_test(NAME ${GEN_TESTS_PREFIX}_MAKE_${L}_${GEN_NODE}_${LUS_OPTS_CUT}_${GEN_CALL_ID}
301
    COMMAND  make -f ${L}.makefile
302
    WORKING_DIRECTORY ${ZUSTRE_OUTPUT_DIR}
303
    )
304
  SET_TESTS_PROPERTIES ( ${GEN_TESTS_PREFIX}_MAKE_${L}_${GEN_NODE}_${LUS_OPTS_CUT}_${GEN_CALL_ID}
305
    PROPERTIES DEPENDS ${GEN_TESTS_PREFIX}_COMPIL_LUSTRE_${L}_${GEN_NODE}_${LUS_OPTS_CUT}_${GEN_CALL_ID}
306
    REQUIRED_FILES ${L}.makefile
307
    )
308
  
309
  
310
  if (BASH)
311
    add_test(
312
      NAME ${GEN_TESTS_PREFIX}_BIN_${L}_${GEN_NODE}_${LUS_OPTS_CUT}_${GEN_CALL_ID} 
313
      COMMAND ${BASH} -c "./${L}_${GEN_NODE} < input_values > ${L}_${GEN_NODE}_outputs"
314
      WORKING_DIRECTORY ${ZUSTRE_OUTPUT_DIR}
315
      )
316
    SET_TESTS_PROPERTIES ( ${GEN_TESTS_PREFIX}_BIN_${L}_${GEN_NODE}_${LUS_OPTS_CUT}_${GEN_CALL_ID}
317
      PROPERTIES REQUIRED_FILES ${L}_${GEN_NODE}
318
      DEPENDS ${GEN_TESTS_PREFIX}_MAKE_${L}_${GEN_NODE}_${LUS_OPTS_CUT}_${GEN_CALL_ID})
319
  else()
320
    message(FATAL_ERROR "Unknown shell command for ${CMAKE_HOST_SYSTEM_NAME}")
321
  endif()
322

    
323
  #************** compare **********************************
324
  if (${MYJAVADIFF})
325
    add_test(NAME ${GEN_TESTS_PREFIX}_COMPARE_OUTPUTS_OF_LUSTREC_ZUSTRE_${L}_${GEN_NODE}_${LUS_OPTS_CUT}_${GEN_CALL_ID}
326
      COMMAND ${JAVA_RUNTIME} -cp ${CMAKE_BINARY_DIR}/modules/ compare_lustrec_outputs ${L}_${GEN_NODE}_outputs ZUSTRE_output_values ${DIFF_EPSILON}
327
      WORKING_DIRECTORY ${ZUSTRE_OUTPUT_DIR}
328
      )
329
  else()
330
    add_test(NAME ${GEN_TESTS_PREFIX}_COMPARE_OUTPUTS_OF_LUSTREC_ZUSTRE_${L}_${GEN_NODE}_${LUS_OPTS_CUT}_${GEN_CALL_ID}
331
      COMMAND diff -y ${L}_${GEN_NODE}_outputs ZUSTRE_output_values
332
      WORKING_DIRECTORY ${ZUSTRE_OUTPUT_DIR}
333
      )
334
  endif()
335
  SET_TESTS_PROPERTIES ( ${GEN_TESTS_PREFIX}_COMPARE_OUTPUTS_OF_LUSTREC_ZUSTRE_${L}_${GEN_NODE}_${LUS_OPTS_CUT}_${GEN_CALL_ID}
336
    PROPERTIES REQUIRED_FILES ${L}_${GEN_NODE}_outputs
337
    DEPENDS ${GEN_TESTS_PREFIX}_BIN_${L}_${GEN_NODE}_${LUS_OPTS_CUT}_${GEN_CALL_ID} )
338
  
339
  
340

    
341

    
342

    
343

    
344
endfunction()
345

    
346

    
347

    
348

    
349

    
350

    
351

    
352

    
353

    
354

    
355

    
356

    
357

    
358

    
359

    
360

    
361

    
362

    
363

    
364

    
365

    
366

    
367

    
368
#******************************fifth strategy, test the lustrec binary with outputs of reference
369

    
370

    
371
function(Lustre_compile_and_compare_to_reference)
372
  set(options MYJAVADIFF)
373
  set(oneValueArgs  NODE LUS_FILE CALL_ID  TESTS_PREFIX SRC_DIR DST_DIR DIFF_EPSILON)
374
  set(multiValueArgs  OPTS )
375
  cmake_parse_arguments(GEN "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
376

    
377
  get_lustre_name_ext(${GEN_LUS_FILE} L E)
378
  #get_filename_component(L ${GEN_LUS_FILE} NAME_WE)
379
  # First command generate C files from Lustre file
380
  Lustre_Compile(LUS_FILE ${GEN_LUS_FILE}
381
    NODE ${GEN_NODE}
382
    OPTS ${GEN_OPTS}
383
    DST_DIR ${GEN_DST_DIR}
384
    )
385
  if(GEN_OPTS)
386
    CUT_OPTIONS("${GEN_OPTS}" LUS_OPTS_CUT)
387
  endif()
388

    
389
  add_test(NAME ${GEN_TESTS_PREFIX}_COMPIL_LUSTRE_${L}_${GEN_NODE}_${LUS_OPTS_CUT}_${GEN_CALL_ID}
390
    COMMAND  ${LUSTRE_COMPILER} ${LUSTREC_ARGS_${L}_${GEN_NODE}_${LUS_OPTS_CUT}}
391
    WORKING_DIRECTORY ${LUSTRE_OUTPUT_DIR_${L}_${GEN_NODE}_${LUS_OPTS_CUT}}
392
    )
393

    
394
  #********************* make -f ${L}.makefile ***************************
395
  add_test(NAME ${GEN_TESTS_PREFIX}_MAKE_${L}_${GEN_NODE}_${LUS_OPTS_CUT}_${GEN_CALL_ID}
396
    COMMAND  make -f ${L}.makefile
397
    WORKING_DIRECTORY ${LUSTRE_OUTPUT_DIR_${L}_${GEN_NODE}_${LUS_OPTS_CUT}}
398
    )
399
  SET_TESTS_PROPERTIES ( ${GEN_TESTS_PREFIX}_MAKE_${L}_${GEN_NODE}_${LUS_OPTS_CUT}_${GEN_CALL_ID}
400
    PROPERTIES DEPENDS ${GEN_TESTS_PREFIX}_COMPIL_LUSTRE_${L}_${GEN_NODE}_${LUS_OPTS_CUT}_${GEN_CALL_ID}
401
    REQUIRED_FILES ${L}.makefile
402
    )
403
  
404
  #************** execute C binary **********************************
405
  
406
  if (BASH)
407
    add_test(
408
      NAME ${GEN_TESTS_PREFIX}_BIN_${L}_${GEN_NODE}_${LUS_OPTS_CUT}_${GEN_CALL_ID} 
409
      COMMAND ${BASH} -c "./${L}_${GEN_NODE} < ../${L}_${GEN_NODE}_input_values > ${L}_${GEN_NODE}_${LUS_OPTS_CUT}_output_values"
410
      WORKING_DIRECTORY ${LUSTRE_OUTPUT_DIR_${L}_${GEN_NODE}_${LUS_OPTS_CUT}}
411
      )
412
    SET_TESTS_PROPERTIES ( ${GEN_TESTS_PREFIX}_BIN_${L}_${GEN_NODE}_${LUS_OPTS_CUT}_${GEN_CALL_ID}
413
      PROPERTIES REQUIRED_FILES ${L}_${GEN_NODE}
414
      DEPENDS ${GEN_TESTS_PREFIX}_MAKE_${L}_${GEN_NODE}_${LUS_OPTS_CUT}_${GEN_CALL_ID})
415
  else()
416
    message(FATAL_ERROR "Unknown shell command ${BASH} -c for ${CMAKE_HOST_SYSTEM_NAME}")
417
  endif()
418

    
419
  #************** execute C binary **********************************
420
  if (${MYJAVADIFF})
421
    add_test(NAME ${GEN_TESTS_PREFIX}_DIFF_${L}_${GEN_NODE}_${LUS_OPTS_CUT}_${GEN_CALL_ID}
422
      COMMAND ${JAVA_RUNTIME} -cp ${CMAKE_BINARY_DIR}/modules/ compare_lustrec_outputs ${L}_${GEN_NODE}_${LUS_OPTS_CUT}_output_values ../${L}_${GEN_NODE}__${LUS_OPTS_CUT}_output_values ${DIFF_EPSILON}
423
      WORKING_DIRECTORY ${LUSTRE_OUTPUT_DIR_${L}_${GEN_NODE}_${LUS_OPTS_CUT}}
424
      )
425
  else()
426
    add_test(NAME ${GEN_TESTS_PREFIX}_DIFF_${L}_${GEN_NODE}_${LUS_OPTS_CUT}_${GEN_CALL_ID}
427
      COMMAND diff -y ${L}_${GEN_NODE}_${LUS_OPTS_CUT}_output_values ../${L}_${GEN_NODE}_${LUS_OPTS_CUT}_output_values 
428
      WORKING_DIRECTORY ${LUSTRE_OUTPUT_DIR_${L}_${GEN_NODE}_${LUS_OPTS_CUT}}
429
      )
430
  endif()
431
  SET_TESTS_PROPERTIES ( ${GEN_TESTS_PREFIX}_DIFF_${L}_${GEN_NODE}_${LUS_OPTS_CUT}_${GEN_CALL_ID}
432
    PROPERTIES REQUIRED_FILES  ${L}_${GEN_NODE}_${LUS_OPTS_CUT}_output_values
433
    DEPENDS ${GEN_TESTS_PREFIX}_BIN_${L}_${GEN_NODE}_${LUS_OPTS_CUT}_${GEN_CALL_ID} )
434

    
435
endfunction()
436

    
437

    
438

    
439

    
440

    
441
#******************************sixth strategy, subset of fifth, no execution, just calls to lustrec
442

    
443

    
444
function(Lustre_compile_options)
445
  set(options "")
446
  set(oneValueArgs  NODE LUS_FILE CALL_ID  TESTS_PREFIX SRC_DIR DST_DIR)
447
  set(multiValueArgs  OPTS )
448
  cmake_parse_arguments(GEN "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
449

    
450
  get_lustre_name_ext(${GEN_LUS_FILE} L E)
451
  #get_filename_component(L ${GEN_LUS_FILE} NAME_WE)
452
  # First command generate C files from Lustre file
453
  Lustre_Compile(LUS_FILE ${GEN_LUS_FILE}
454
    NODE ${GEN_NODE}
455
    OPTS ${GEN_OPTS}
456
    DST_DIR ${GEN_DST_DIR}
457
    )
458
  if(GEN_OPTS)
459
    CUT_OPTIONS("${GEN_OPTS}" LUS_OPTS_CUT)
460
  endif()
461

    
462
  add_test(NAME ${GEN_TESTS_PREFIX}_COMPIL_LUSTRE_${L}_${GEN_NODE}_${LUS_OPTS_CUT}_${GEN_CALL_ID}
463
    COMMAND  ${LUSTRE_COMPILER} ${LUSTREC_ARGS_${L}_${GEN_NODE}_${LUS_OPTS_CUT}}
464
    WORKING_DIRECTORY ${LUSTRE_OUTPUT_DIR_${L}_${GEN_NODE}_${LUS_OPTS_CUT}}
465
    )
466

    
467
  #********* EMF Validation
468
  STRING(FIND "${LUS_OPTS_CUT}" "emf" matchres)
469
  IF(${matchres} EQUAL 0)
470
    add_test(
471
      NAME ${GEN_TESTS_PREFIX}_EMF_VALIDATE_${L}_${GEN_NODE}_${LUS_OPTS_CUT}_${GEN_CALL_ID} 
472
      COMMAND ${BASH} -c "cat ./${L}.emf | python -m json.tool"
473
      WORKING_DIRECTORY ${LUSTRE_OUTPUT_DIR_${L}_${GEN_NODE}_${LUS_OPTS_CUT}}
474
      )
475
    SET_TESTS_PROPERTIES ( ${GEN_TESTS_PREFIX}_EMF_VALIDATE_${L}_${GEN_NODE}_${LUS_OPTS_CUT}_${GEN_CALL_ID}
476
      PROPERTIES REQUIRED_FILES ${L}.emf
477
      DEPENDS ${GEN_TESTS_PREFIX}_COMPIL_LUSTRE_${L}_${GEN_NODE}_${LUS_OPTS_CUT}_${GEN_CALL_ID})
478
  endif()
479

    
480
endfunction()
481

    
482

    
483

    
484
#****************************** LustreT strategies: generating the MCDC coverage 
485

    
486

    
487
function(LustreT_MCDC)
488
  set(options "")
489
  set(oneValueArgs  NODE LUS_FILE CALL_ID TESTS_PREFIX SRC_DIR DST_DIR)
490
  set(multiValueArgs  OPTS )
491
  cmake_parse_arguments(GEN "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
492

    
493
  get_lustre_name_ext(${GEN_LUS_FILE} L E)
494
#  get_filename_component(L ${GEN_LUS_FILE} NAME_WE)
495
  # First command generate C files from Lustre file
496
  Lustre_Compile(LUS_FILE ${GEN_LUS_FILE}
497
    NODE ${GEN_NODE}
498
    OPTS ${GEN_OPTS}
499
    DIR "${GEN_DST_DIR}/${L}/node_${GEN_NODE}_MCDC"
500
#    DST_DIR ${GEN_DST_DIR}
501
    )
502

    
503
#    set(LUSTRE_OUTPUT_DIR "${OUTPUT_PATH}/${L}/node_${LUS_NODE}")
504

    
505
  file(MAKE_DIRECTORY "${GEN_DST_DIR}/${L}/node_${GEN_NODE}_MCDC")
506

    
507
  add_test(NAME ${GEN_TESTS_PREFIX}_LUSTRET_MCDC_${L}_${GEN_NODE}_${LUS_OPTS_CUT}_${GEN_CALL_ID}
508
    COMMAND  ${LUSTRE_T} -mcdc-cond ${LUSTREC_ARGS_${L}_${GEN_NODE}_${LUS_OPTS_CUT}}
509
    WORKING_DIRECTORY ${LUSTRE_OUTPUT_DIR_${L}_${GEN_NODE}_${LUS_OPTS_CUT}}
510
    )
511

    
512
   set(MCDC_SRC "${GEN_DST_DIR}/${L}/node_${GEN_NODE}_MCDC/${L}.mcdc.lus")
513
   Lustre_Compile(LUS_FILE "${MCDC_SRC}"
514
     NODE ${GEN_NODE}
515
     OPTS ${GEN_OPTS}
516
     DIR "${GEN_DST_DIR}/${L}/node_${GEN_NODE}_MCDC"
517
 #    DST_DIR ${GEN_DST_DIR}
518
     )
519

    
520
  
521
  add_test(NAME ${GEN_TESTS_PREFIX}_LUSTRET_MCDC_COMPILE_${L}_${GEN_NODE}_${LUS_OPTS_CUT}_${GEN_CALL_ID}
522
    COMMAND  ${LUSTRE_COMPILER} ${LUSTREC_ARGS_${L}.mcdc_${GEN_NODE}_${LUS_OPTS_CUT}}
523
    WORKING_DIRECTORY ${LUSTRE_OUTPUT_DIR_${L}_mcdc_${GEN_NODE}_${LUS_OPTS_CUT}}
524
    )
525

    
526
  SET_TESTS_PROPERTIES ( ${GEN_TESTS_PREFIX}_LUSTRET_MCDC_COMPILE_${L}_${GEN_NODE}_${LUS_OPTS_CUT}_${GEN_CALL_ID}
527
    PROPERTIES 
528
    DEPENDS ${GEN_TESTS_PREFIX}_LUSTRET_MCDC_${L}_${GEN_NODE}_${LUS_OPTS_CUT}_${GEN_CALL_ID})
529
  
530
endfunction()
531

    
532
#****************************** LustreT strategies: generating the mutants
533

    
534

    
535
function(LustreT_mutants)
536
  set(options "")
537
  set(oneValueArgs  NODE LUS_FILE CALL_ID TESTS_PREFIX  SRC_DIR DST_DIR)
538
  set(multiValueArgs  OPTS )
539
  cmake_parse_arguments(GEN "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
540

    
541
  get_lustre_name_ext(${GEN_LUS_FILE} L E)
542
#  get_filename_component(L ${GEN_LUS_FILE} NAME_WE)
543
  # First command generate C files from Lustre file
544
  Lustre_Compile(LUS_FILE ${GEN_LUS_FILE}
545
    NODE ${GEN_NODE}
546
    OPTS ${GEN_OPTS}
547
    DIR "${GEN_DST_DIR}/${L}/node_${GEN_NODE}_Mutants"
548
#    DST_DIR ${GEN_DST_DIR}
549
    )
550

    
551
#    set(LUSTRE_OUTPUT_DIR "${OUTPUT_PATH}/${L}/node_${LUS_NODE}")
552

    
553
  file(MAKE_DIRECTORY "${GEN_DST_DIR}/${L}/node_${GEN_NODE}_Mutants")
554

    
555
  add_test(NAME ${GEN_TESTS_PREFIX}_LUSTRET_MUTATION_GEN_${L}_${GEN_NODE}_${LUS_OPTS_CUT}_${GEN_CALL_ID}
556
    COMMAND  ${LUSTRE_T} ${LUSTREC_ARGS_${L}_${GEN_NODE}_${LUS_OPTS_CUT}}
557
    WORKING_DIRECTORY ${LUSTRE_OUTPUT_DIR_${L}_${GEN_NODE}_${LUS_OPTS_CUT}}
558
    )
559

    
560
  add_test(NAME ${GEN_TESTS_PREFIX}_LUSTRET_MUTATION_BUILDMAKE_${L}_${GEN_NODE}_${LUS_OPTS_CUT}_${GEN_CALL_ID}
561
    COMMAND  "cmake" "."
562
    WORKING_DIRECTORY ${GEN_DST_DIR}/${L}/node_${GEN_NODE}_Mutants
563
    )
564

    
565
  add_test(NAME ${GEN_TESTS_PREFIX}_LUSTRET_MUTATION_BUILDBIN_${L}_${GEN_NODE}_${LUS_OPTS_CUT}_${GEN_CALL_ID}
566
    COMMAND  "make"
567
    WORKING_DIRECTORY ${GEN_DST_DIR}/${L}/node_${GEN_NODE}_Mutants
568
    )
569

    
570
  SET_TESTS_PROPERTIES ( ${GEN_TESTS_PREFIX}_LUSTRET_MUTATION_BUILDMAKE_${L}_${GEN_NODE}_${LUS_OPTS_CUT}_${GEN_CALL_ID}
571
    PROPERTIES 
572
    DEPENDS ${GEN_TESTS_PREFIX}_LUSTRET_MUTATION_GEN_${L}_${GEN_NODE}_${LUS_OPTS_CUT}_${GEN_CALL_ID} )
573

    
574
  SET_TESTS_PROPERTIES ( ${GEN_TESTS_PREFIX}_LUSTRET_MUTATION_BUILDBIN_${L}_${GEN_NODE}_${LUS_OPTS_CUT}_${GEN_CALL_ID}
575
    PROPERTIES 
576
    DEPENDS ${GEN_TESTS_PREFIX}_LUSTRET_MUTATION_BUILDMAKE_${L}_${GEN_NODE}_${LUS_OPTS_CUT}_${GEN_CALL_ID} )
577

    
578
endfunction()
579

    
580

    
581

    
582

    
583
#****************************** Lustrec Compile for ADA and compare to reference
584

    
585
function(Lustre_compile_to_ADA_and_compare_to_reference)
586
  set(options "")
587
  set(oneValueArgs  NODE LUS_FILE CALL_ID  TESTS_PREFIX SRC_DIR DST_DIR DIFF_EPSILON)
588
  set(multiValueArgs  OPTS )
589
  cmake_parse_arguments(GEN "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
590

    
591
  get_lustre_name_ext(${GEN_LUS_FILE} L E)
592
  #get_filename_component(L ${GEN_LUS_FILE} NAME_WE)
593
  # First command generate ADA files from Lustre file
594
  Lustre_Compile(LUS_FILE ${GEN_LUS_FILE}
595
    NODE ${GEN_NODE}
596
    OPTS ${GEN_OPTS}  
597
    DST_DIR ${GEN_DST_DIR}
598
    )
599
  if(GEN_OPTS)
600
    CUT_OPTIONS("${GEN_OPTS}" LUS_OPTS_CUT)
601
  endif()
602

    
603
  add_test(NAME ${GEN_TESTS_PREFIX}_COMPIL_ADA_LUSTRE_${L}_${GEN_NODE}_${LUS_OPTS_CUT}_${GEN_CALL_ID}
604
    COMMAND  ${LUSTRE_COMPILER} ${LUSTREC_ARGS_${L}_${GEN_NODE}_${LUS_OPTS_CUT}}
605
    WORKING_DIRECTORY ${LUSTRE_OUTPUT_DIR_${L}_${GEN_NODE}_${LUS_OPTS_CUT}}
606
    )
607

    
608
  #********************* gprbuild ${L}.gpr ***************************
609
  add_test(NAME ${GEN_TESTS_PREFIX}_GPRBUILD_${L}_${GEN_NODE}_${LUS_OPTS_CUT}_${GEN_CALL_ID}
610
    COMMAND  gprbuild ${L}.gpr
611
    WORKING_DIRECTORY ${LUSTRE_OUTPUT_DIR_${L}_${GEN_NODE}_${LUS_OPTS_CUT}}
612
    )
613
  SET_TESTS_PROPERTIES ( ${GEN_TESTS_PREFIX}_GPRBUILD_${L}_${GEN_NODE}_${LUS_OPTS_CUT}_${GEN_CALL_ID}
614
    PROPERTIES DEPENDS ${GEN_TESTS_PREFIX}_COMPIL_ADA_LUSTRE_${L}_${GEN_NODE}_${LUS_OPTS_CUT}_${GEN_CALL_ID}
615
    REQUIRED_FILES ${L}.gpr
616
    )
617
  
618
  #************** execute C binary **********************************
619
  
620
  if (BASH)
621
    add_test(
622
      NAME ${GEN_TESTS_PREFIX}_ADA_BIN_${L}_${GEN_NODE}_${LUS_OPTS_CUT}_${GEN_CALL_ID} 
623
      COMMAND ${BASH} -c "./${L}_${GEN_NODE} < ../${L}_${GEN_NODE}_input_values > ${L}_${GEN_NODE}_${LUS_OPTS_CUT}_output_values"
624
      WORKING_DIRECTORY ${LUSTRE_OUTPUT_DIR_${L}_${GEN_NODE}_${LUS_OPTS_CUT}}
625
      )
626
    SET_TESTS_PROPERTIES ( ${GEN_TESTS_PREFIX}_ADA_BIN_${L}_${GEN_NODE}_${LUS_OPTS_CUT}_${GEN_CALL_ID}
627
      PROPERTIES REQUIRED_FILES ${L}_${GEN_NODE}
628
      DEPENDS ${GEN_TESTS_PREFIX}_GPRBUILD_${L}_${GEN_NODE}_${LUS_OPTS_CUT}_${GEN_CALL_ID})
629
  else()
630
    message(FATAL_ERROR "Unknown shell command ${BASH} -c for ${CMAKE_HOST_SYSTEM_NAME}")
631
  endif()
632

    
633
  #************** execute C binary **********************************
634

    
635
  add_test(NAME ${GEN_TESTS_PREFIX}_ADA_DIFF_${L}_${GEN_NODE}_${LUS_OPTS_CUT}_${GEN_CALL_ID}
636
    COMMAND diff -y ${L}_${GEN_NODE}_${LUS_OPTS_CUT}_output_values ../${L}_${GEN_NODE}_${LUS_OPTS_CUT}_output_values 
637
    WORKING_DIRECTORY ${LUSTRE_OUTPUT_DIR_${L}_${GEN_NODE}_${LUS_OPTS_CUT}}
638
    )
639
  SET_TESTS_PROPERTIES ( ${GEN_TESTS_PREFIX}_ADA_DIFF_${L}_${GEN_NODE}_${LUS_OPTS_CUT}_${GEN_CALL_ID}
640
    PROPERTIES REQUIRED_FILES  ${L}_${GEN_NODE}_${LUS_OPTS_CUT}_output_values
641
    DEPENDS ${GEN_TESTS_PREFIX}_ADA_BIN_${L}_${GEN_NODE}_${LUS_OPTS_CUT}_${GEN_CALL_ID} )
642

    
643
endfunction()
(10-10/10)