11# Runs cost_analysis on ${SRC}/${NAME}.json and diffs the report against
22# ${SRC}/${NAME}.md.expected (volatile lines stripped). If ${DUMP} is set, also
33# checks that the --dump_tree file for that result exists.
4- execute_process (COMMAND ${EXE} --driver ${SRC} /${NAME}.json
5- WORKING_DIRECTORY ${SRC} RESULT_VARIABLE rc )
4+ execute_process (COMMAND " ${EXE} " --driver " ${SRC} /${NAME} .json"
5+ WORKING_DIRECTORY " ${SRC} " RESULT_VARIABLE rc )
66if (NOT rc EQUAL 0)
77 message (FATAL_ERROR "cost_analysis exited ${rc} " )
88endif ()
99
1010function (strip_volatile in out )
11- file (STRINGS ${in} lines )
11+ file (STRINGS " ${in} " lines )
1212 set (kept "" )
1313 foreach (line IN LISTS lines)
1414 if (NOT line MATCHES "^_SeQuant:" )
@@ -20,20 +20,30 @@ function(strip_volatile in out)
2020 # hook, while the tool's live (gitignored) report always ends in one; only
2121 # the trailing-newline count should differ, so collapse both sides equally.
2222 string (REGEX REPLACE "\n +$" "\n " kept "${kept} " )
23- file (WRITE ${out} "${kept} " )
23+ file (WRITE " ${out} " "${kept} " )
2424endfunction ()
2525
26- strip_volatile (${SRC} /${NAME}.md ${SRC} /${NAME}.md.filtered )
27- strip_volatile (${SRC} /${NAME}.md.expected ${SRC} /${NAME}.md.expected.filtered )
28- execute_process (COMMAND ${CMAKE_COMMAND } -E compare_files
29- ${SRC} /${NAME}.md.filtered ${SRC} /${NAME}.md.expected.filtered
26+ # file(STRINGS) treats a missing input as empty, so a report that was never
27+ # written would slip through strip_volatile as an empty file and misreport as a
28+ # content diff. Fail clearly instead.
29+ if (NOT EXISTS "${SRC} /${NAME} .md" )
30+ message (FATAL_ERROR "report ${NAME} .md was not produced" )
31+ endif ()
32+ strip_volatile ("${SRC} /${NAME} .md" "${SRC} /${NAME} .md.filtered" )
33+ strip_volatile ("${SRC} /${NAME} .md.expected" "${SRC} /${NAME} .md.expected.filtered" )
34+ # compare_files: 0 == identical, 1 == differ, anything else == error; report
35+ # the last distinctly so a broken comparison isn't misread as a content diff.
36+ execute_process (COMMAND "${CMAKE_COMMAND } " -E compare_files
37+ "${SRC} /${NAME} .md.filtered" "${SRC} /${NAME} .md.expected.filtered"
3038 RESULT_VARIABLE diff )
31- if (NOT diff EQUAL 0 )
39+ if (diff EQUAL 1 )
3240 message (FATAL_ERROR "report differs from expected" )
41+ elseif (NOT diff EQUAL 0)
42+ message (FATAL_ERROR "compare_files failed (rc=${diff} )" )
3343endif ()
3444
3545if (DUMP)
36- if (NOT EXISTS ${SRC} /${DUMP} .tree.txt)
46+ if (NOT EXISTS " ${SRC} /${DUMP} .tree.txt" )
3747 message (FATAL_ERROR "expected dump file ${DUMP} .tree.txt not found" )
3848 endif ()
3949endif ()
0 commit comments