@@ -348,54 +348,48 @@ EXPECTED_puzzle = success in 2005 trials
348348EXPECTED_fcalc = Performed 12 tests, 0 failures, 100% success rate.
349349EXPECTED_pi = 3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067982148086
350350
351+ LOG_FILTER =sed -E '/^[0-9]{2}:[0-9]{2}:[0-9]{2} /d'
352+
353+ define exec
354+ $(eval OUTPUT_FILE := $(shell mktemp) )
355+ $(eval _ := $(shell LC_ALL=C $(BIN ) $(1 ) $(2 ) > $(OUTPUT_FILE ) ) )
356+ $(eval RC := $(.SHELLSTATUS ) )
357+ endef
358+
359+ # $(1): rv32emu's extra CLI parameter
360+ # $(2): ELF executable
361+ # $(3): ELF executable name
362+ # $(4): extra command in the pipeline
363+ # $(5): expected output
364+ define check-test
365+ $(call exec, $(1 ) , $(2 ) )
366+ $(Q )$(PRINTF ) "Running $(3 ) ... "; \
367+ if [ 0 -eq $(RC ) ] && [ "$(strip $(shell cat $(OUTPUT_FILE ) | $(LOG_FILTER ) | $(4 ) ) ) " = "$(strip $(5 ) ) " ]; then \
368+ $(call notice, [OK]) ; \
369+ else \
370+ $(PRINTF ) "Failed.\n"; \
371+ exit 1; \
372+ fi; \
373+ $(RM ) $(OUTPUT_FILE )
374+ endef
375+
351376check-hello : $(BIN )
352- $(Q )$(PRINTF ) " Running hello.elf ... " ; \
353- if [ " $( shell LC_ALL=C $( BIN) $( OUT) /hello.elf | uniq) " = " $( strip $( EXPECTED_hello) ) inferior exit code 0" ]; then \
354- $(call notice, [OK]) ; \
355- else \
356- $(PRINTF ) " Failed.\n" ; \
357- exit 1; \
358- fi ;
377+ $(call check-test, , $(OUT ) /hello.elf, hello.elf, uniq, $(EXPECTED_hello ) )
359378
360379check : $(BIN ) check-hello artifact
361- $(Q )$(foreach e,$(CHECK_ELF_FILES ) ,\
362- $(PRINTF ) " Running $( e) ... " ; \
363- if [ " $( shell LC_ALL=C $( BIN) $( OUT) /riscv32/$( e) | uniq) " = " $( strip $( EXPECTED_$( e) ) ) inferior exit code 0" ]; then \
364- $(call notice, [OK]) ; \
365- else \
366- $(PRINTF ) " Failed.\n" ; \
367- exit 1; \
368- fi ; \
369- )
370-
371- EXPECTED_aes_sha1 = 1242a6757c8aef23e50b5264f5941a2f4b4a347e -
380+ $(Q )$(foreach e, $(CHECK_ELF_FILES ) , $(call check-test, , $(OUT ) /riscv32/$(e ) , $(e ) , uniq, $(EXPECTED_$(e ) ) ) )
381+
382+ EXPECTED_aes_sha1 = 89169ec034bec1c6bb2c556b26728a736d350ca3 -
372383misalign : $(BIN ) artifact
373- $(Q )$(PRINTF ) " Running uaes ... " ;
374- $(Q ) if [ " $( shell LC_ALL=C $( BIN) -m $( OUT) /riscv32/uaes | $( SHA1SUM) ) " = " $( EXPECTED_aes_sha1) " ]; then \
375- $(call notice, [OK]) ; \
376- else \
377- $(PRINTF ) " Failed.\n" ; \
378- fi
384+ $(call check-test, -m, $(OUT ) /riscv32/uaes, uaes.elf, $(SHA1SUM ) , $(EXPECTED_aes_sha1 ) )
379385
380386EXPECTED_misalign = MISALIGNED INSTRUCTION FETCH TEST PASSED!
381387misalign-in-blk-emu : $(BIN )
382- $(Q )$(PRINTF ) " Running misalign.elf ... " ; \
383- if [ " $( shell LC_ALL=C $( BIN) tests/system/alignment/misalign.elf | tail -n 2) " = " $( strip $( EXPECTED_misalign) ) inferior exit code 0" ]; then \
384- $(call notice, [OK]) ; \
385- else \
386- $(PRINTF ) " Failed.\n" ; \
387- exit 1; \
388- fi ;
388+ $(call check-test, , tests/system/alignment/misalign.elf, misalign.elf, tail -n 1, $(EXPECTED_misalign ) )
389389
390390EXPECTED_mmu = STORE PAGE FAULT TEST PASSED!
391391mmu-test : $(BIN )
392- $(Q )$(PRINTF ) " Running vm.elf ... " ; \
393- if [ " $( shell LC_ALL=C $( BIN) tests/system/mmu/vm.elf | tail -n 2) " = " $( strip $( EXPECTED_mmu) ) inferior exit code 0" ]; then \
394- $(call notice, [OK]) ; \
395- else \
396- $(PRINTF ) " Failed.\n" ; \
397- exit 1; \
398- fi ;
392+ $(call check-test, , tests/system/mmu/vm.elf, vm.elf, tail -n 1, $(EXPECTED_mmu ) )
399393
400394# Non-trivial demonstration programs
401395ifeq ($(call has, SDL) , 1)
0 commit comments