renamed getopt.{c/h} to opj_getopt.{c/h} and forced the use of these files rather...
[openjpeg.git] / tests / nonregression / CMakeLists.txt
1 # NON-REGRESSION TESTS ON THIS DATASET LOCATED ${OPJ_DATA_ROOT}/input/nonregression
2
3 FILE(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/Temporary)
4
5 SET(TEMP ${CMAKE_CURRENT_BINARY_DIR}/Temporary)
6 SET(BASELINE_NR ${OPJ_DATA_ROOT}/baseline/nonregression)
7 SET(INPUT_NR ${OPJ_DATA_ROOT}/input/nonregression)
8
9 FILE(GLOB_RECURSE OPJ_DATA_NR_LIST
10   "${INPUT_NR}/*.j2k"
11   "${INPUT_NR}/*.j2c"
12   "${INPUT_NR}/*.jp2"
13   )
14
15 # Define a list of file which should be gracefully rejected:
16 SET(BLACKLIST_JPEG200
17   illegalcolortransform.j2k
18   )
19
20 FOREACH(filepath ${OPJ_DATA_NR_LIST})
21   GET_FILENAME_COMPONENT(filename ${filepath} NAME)
22   GET_FILENAME_COMPONENT(filenameSub ${filename} NAME_WE)
23   STRING(REGEX MATCH ${filename} bad_jpeg2000 ${BLACKLIST_JPEG200})
24
25   ADD_TEST(NR-${filename}-dump
26     ${EXECUTABLE_OUTPUT_PATH}/j2k_dump
27     -i ${filepath}
28     -o ${TEMP}/${filename}.txt
29     )
30   ADD_TEST(NR-${filename}-decode
31     ${EXECUTABLE_OUTPUT_PATH}/j2k_to_image 
32     -i ${filepath}
33     -o ${TEMP}/${filename}.pgx
34     )
35
36   IF(bad_jpeg2000)
37     SET_TESTS_PROPERTIES(NR-${filename}-dump
38       PROPERTIES WILL_FAIL TRUE)
39     SET_TESTS_PROPERTIES(NR-${filename}-decode
40       PROPERTIES WILL_FAIL TRUE)
41   ELSE(bad_jpeg2000)
42     # Only run this test when previous succeeds
43     ADD_TEST(NR-${filename}-compare_dump2base
44       ${EXECUTABLE_OUTPUT_PATH}/compare_dump_files
45       -b ${BASELINE_NR}/opj_${filenameSub}.txt
46       -t ${TEMP}/${filename}.txt
47       )
48
49     SET_TESTS_PROPERTIES(NR-${filename}-compare_dump2base  
50       PROPERTIES DEPENDS 
51       NR-${filename}-dump)     
52
53   ENDIF(bad_jpeg2000)
54      
55 #  ADD_TEST(NR-${filename}-compare2base
56 #      ${EXECUTABLE_OUTPUT_PATH}/comparePGXimages
57 #     -b ${BASELINE_NR}/opj_${filenameRef}
58 #     -t ${TEMP}/${filename}.pgx
59 #     -n ${nbComponents}
60 #     -d 
61 #     -s b_t_
62 #     )
63 #
64 #  SET_TESTS_PROPERTIES(NR-${filename}-compare2base  
65 #                       PROPERTIES DEPENDS 
66 #                       NR-${filename}-decode)    
67   
68 ENDFOREACH(filepath)
69
70
71 # TEST ENCODER SUITE
72 # Read a input file to know which files processed and with which options.
73
74 IF (NOT WIN32)
75 CONFIGURE_FILE("opj_ref_decode_cmd.sh.in"
76                "${CMAKE_CURRENT_BINARY_DIR}/opj_ref_decode_cmd.sh"
77                @ONLY)
78 ENDIF (NOT WIN32)
79    
80 string(COMPARE EQUAL ${REF_DECODER_BIN_PATH} "NOTFOUND" REF_DECODER_NOTFOUND)            
81 IF (REF_DECODER_NOTFOUND)
82   MESSAGE(STATUS "REF_DECODER_BIN_PATH not found, if you want all the encoding tests suite please provide a regular path")  
83 ENDIF (REF_DECODER_NOTFOUND)
84
85
86 # Read the file into a list
87 FILE(STRINGS encoder_test_suite.txt OPJ_TEST_ENC_CMD_LINE_LIST)
88
89 SET(it_test 0)
90
91 FOREACH(OPJ_TEST_ENC_CMD_LINE ${OPJ_TEST_ENC_CMD_LINE_LIST})
92   math(EXPR it_test "${it_test}+1" )
93
94   #message(STATUS ${OPJ_TEST_ENC_CMD_LINE})
95
96   string(REPLACE " " ";" CMD_ARG_LIST ${OPJ_TEST_ENC_CMD_LINE})
97   
98   #message(STATUS "list = ${CMD_ARG_LIST}")
99   
100   list(GET CMD_ARG_LIST 0 EXE_NAME)
101   string(COMPARE EQUAL ${EXE_NAME} "image_to_j2k" EXE_NAME_FOUND)
102   IF(EXE_NAME_FOUND)
103     list(REMOVE_AT CMD_ARG_LIST 0)
104   ELSE(EXE_NAME_FOUND)
105     string(COMPARE EQUAL ${EXE_NAME} "#" IGNORE_LINE_FOUND)
106     IF(IGNORE_LINE_FOUND)
107       message( STATUS "Current line is ignored: ${OPJ_TEST_ENC_CMD_LINE}")
108     ELSE(IGNORE_LINE_FOUND)
109       message( FATAL_ERROR "${EXE_ARG} is not the right executable name to encode file (try to use image_to_j2k)")
110     ENDIF(IGNORE_LINE_FOUND)   
111   ENDIF(EXE_NAME_FOUND)
112   
113   IF(NOT IGNORE_LINE_FOUND)
114     SET(CMD_ARG_LIST_2 "")
115     SET(ARG_POS 0)
116     SET(INPUT_ARG_POS 0)
117     SET(OUTPUT_ARG_POS 0)
118     
119     FOREACH(CMD_ARG_ELT ${CMD_ARG_LIST})
120       math(EXPR ARG_POS "${ARG_POS}+1" )
121       
122       # Will work only with cmake version > 2.8.4
123       #message(STATUS "${CMD_ARG_ELT}")
124       #string(FIND "${CMD_ARG_ELT}" "-i input/" INPUT_ARG_FOUND)
125       #message(STATUS "pos = ${INPUT_ARG_FOUND}")
126       #IF(INPUT_ARG_FOUND)
127       #  string(SUBSTRING ${CMD_ARG_ELT} INPUT_ARG_FOUND -1 filename_input)
128       #  message(STATUS "filename = ${filename_input}")
129       #ELSE(INPUT_ARG_FOUND)
130       #  message( FATAL_ERROR "Not found a input image into the list of arguments")
131       #ENDIF(INPUT_ARG_FOUND)
132     
133
134       string(COMPARE EQUAL ${CMD_ARG_ELT} "-i" INPUT_ARG_FOUND)
135       IF(INPUT_ARG_FOUND)
136         SET(INPUT_ARG_POS ${ARG_POS})
137         SET(INPUT_ARG_FOUND 0)
138       ENDIF(INPUT_ARG_FOUND)
139       
140       string(COMPARE EQUAL ${CMD_ARG_ELT} "-o" OUTPUT_ARG_FOUND)
141       IF(OUTPUT_ARG_FOUND)
142         SET(OUTPUT_ARG_POS ${ARG_POS})
143         SET(OUTPUT_ARG_FOUND 0)
144       ENDIF(OUTPUT_ARG_FOUND)
145     
146       string(REPLACE "input/" "${INPUT_NR}/" CMD_ARG_ELT ${CMD_ARG_ELT})
147       string(REPLACE "temp/" "${TEMP}/" CMD_ARG_ELT ${CMD_ARG_ELT})
148     
149       list (APPEND CMD_ARG_LIST_2 ${CMD_ARG_ELT})
150   
151     ENDFOREACH(CMD_ARG_ELT)
152   
153     list(GET CMD_ARG_LIST_2 ${INPUT_ARG_POS} INPUT_FILENAME)
154     get_filename_component(INPUT_FILENAME_NAME ${INPUT_FILENAME} NAME)
155     list(GET CMD_ARG_LIST_2 ${OUTPUT_ARG_POS} OUTPUT_FILENAME)
156     get_filename_component(OUTPUT_FILENAME_NAME_WE ${OUTPUT_FILENAME} NAME_WE)
157     
158       
159     # Encode an image into the jpeg2000 format
160     ADD_TEST(NR-ENC-${INPUT_FILENAME_NAME}-${it_test}-encode
161       ${EXECUTABLE_OUTPUT_PATH}/${EXE_NAME}
162       ${CMD_ARG_LIST_2}
163     )
164       
165     # Dump the encoding file 
166     ADD_TEST(NR-ENC-${INPUT_FILENAME_NAME}-${it_test}-dump
167       ${EXECUTABLE_OUTPUT_PATH}/j2k_dump
168       -i ${OUTPUT_FILENAME}
169       -o ${OUTPUT_FILENAME}-ENC-${it_test}.txt
170     )
171     SET_TESTS_PROPERTIES(NR-ENC-${INPUT_FILENAME_NAME}-${it_test}-dump
172                          PROPERTIES DEPENDS 
173                          NR-ENC-${INPUT_FILENAME_NAME}-${it_test}-encode) 
174     
175     # Compare the dump file with the baseline 
176     ADD_TEST(NR-ENC-${INPUT_FILENAME_NAME}-${it_test}-compare_dump2base
177       ${EXECUTABLE_OUTPUT_PATH}/compare_dump_files
178       -b ${BASELINE_NR}/opj_${OUTPUT_FILENAME_NAME_WE}-ENC-${it_test}.txt
179       -t ${OUTPUT_FILENAME}-ENC-${it_test}.txt
180     )
181     
182     SET_TESTS_PROPERTIES(NR-ENC-${INPUT_FILENAME_NAME}-${it_test}-compare_dump2base
183                          PROPERTIES DEPENDS 
184                          NR-ENC-${INPUT_FILENAME_NAME}-${it_test}-dump) 
185
186     # Decode the encoding file with kakadu expand command
187     IF (NOT REF_DECODER_NOTFOUND)
188       IF (NOT WIN32)
189         # Need a bash script to export the path of the kakadu library into PATH  
190         ADD_TEST( NR-ENC-${INPUT_FILENAME_NAME}-${it_test}-decode-ref
191            bash ${CMAKE_CURRENT_BINARY_DIR}/opj_ref_decode_cmd.sh
192           -i ${OUTPUT_FILENAME}
193           -o ${OUTPUT_FILENAME}.raw
194         )
195       ELSE (NOT WIN32)
196         ADD_TEST(NR-ENC-${INPUT_FILENAME_NAME}-${it_test}-decode-ref
197           ${REF_DECODER_BIN_PATH}/kdu_expand
198           -i ${OUTPUT_FILENAME}
199           -o ${OUTPUT_FILENAME}.raw
200         )
201       ENDIF (NOT WIN32)
202     
203       SET_TESTS_PROPERTIES(NR-ENC-${INPUT_FILENAME_NAME}-${it_test}-decode-ref
204                            PROPERTIES DEPENDS 
205                            NR-ENC-${INPUT_FILENAME_NAME}-${it_test}-encode) 
206     
207       # Compare the decoding file with baseline generated from the kdu_expand and baseline.j2k 
208       ADD_TEST(NR-ENC-${INPUT_FILENAME_NAME}-${it_test}-compare_dec-ref-out2base
209         ${EXECUTABLE_OUTPUT_PATH}/compareRAWimages
210         #-b ${BASELINE_NR}/opj_${OUTPUT_FILENAME_NAME_WE}-ENC-${it_test}.raw
211         -b ${BASELINE_NR}/opj_${OUTPUT_FILENAME_NAME_WE}-ENC-${it_test}.raw
212         -t ${OUTPUT_FILENAME}.raw
213       )
214     
215       SET_TESTS_PROPERTIES(NR-ENC-${INPUT_FILENAME_NAME}-${it_test}-compare_dec-ref-out2base
216                            PROPERTIES DEPENDS 
217                            NR-ENC-${INPUT_FILENAME_NAME}-${it_test}-decode-ref)
218     
219     ENDIF (NOT REF_DECODER_NOTFOUND)
220     
221   ENDIF(NOT IGNORE_LINE_FOUND)
222
223 ENDFOREACH(OPJ_TEST_ENC_CMD_LINE)
224
225
226
227