judgelitmus.sh 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. #!/bin/sh
  2. # SPDX-License-Identifier: GPL-2.0+
  3. #
  4. # Given a .litmus test and the corresponding .litmus.out file, check
  5. # the .litmus.out file against the "Result:" comment to judge whether
  6. # the test ran correctly.
  7. #
  8. # Usage:
  9. # judgelitmus.sh file.litmus
  10. #
  11. # Run this in the directory containing the memory model, specifying the
  12. # pathname of the litmus test to check.
  13. #
  14. # Copyright IBM Corporation, 2018
  15. #
  16. # Author: Paul E. McKenney <[email protected]>
  17. litmus=$1
  18. if test -f "$litmus" -a -r "$litmus"
  19. then
  20. :
  21. else
  22. echo ' --- ' error: \"$litmus\" is not a readable file
  23. exit 255
  24. fi
  25. if test -f "$LKMM_DESTDIR/$litmus".out -a -r "$LKMM_DESTDIR/$litmus".out
  26. then
  27. :
  28. else
  29. echo ' --- ' error: \"$LKMM_DESTDIR/$litmus\".out is not a readable file
  30. exit 255
  31. fi
  32. if grep -q '^ \* Result: ' $litmus
  33. then
  34. outcome=`grep -m 1 '^ \* Result: ' $litmus | awk '{ print $3 }'`
  35. else
  36. outcome=specified
  37. fi
  38. grep '^Observation' $LKMM_DESTDIR/$litmus.out
  39. if grep -q '^Observation' $LKMM_DESTDIR/$litmus.out
  40. then
  41. :
  42. else
  43. echo ' !!! Verification error' $litmus
  44. if ! grep -q '!!!' $LKMM_DESTDIR/$litmus.out
  45. then
  46. echo ' !!! Verification error' >> $LKMM_DESTDIR/$litmus.out 2>&1
  47. fi
  48. exit 255
  49. fi
  50. if test "$outcome" = DEADLOCK
  51. then
  52. if grep '^Observation' $LKMM_DESTDIR/$litmus.out | grep -q 'Never 0 0$'
  53. then
  54. ret=0
  55. else
  56. echo " !!! Unexpected non-$outcome verification" $litmus
  57. if ! grep -q '!!!' $LKMM_DESTDIR/$litmus.out
  58. then
  59. echo " !!! Unexpected non-$outcome verification" >> $LKMM_DESTDIR/$litmus.out 2>&1
  60. fi
  61. ret=1
  62. fi
  63. elif grep '^Observation' $LKMM_DESTDIR/$litmus.out | grep -q $outcome || test "$outcome" = Maybe
  64. then
  65. ret=0
  66. else
  67. echo " !!! Unexpected non-$outcome verification" $litmus
  68. if ! grep -q '!!!' $LKMM_DESTDIR/$litmus.out
  69. then
  70. echo " !!! Unexpected non-$outcome verification" >> $LKMM_DESTDIR/$litmus.out 2>&1
  71. fi
  72. ret=1
  73. fi
  74. tail -2 $LKMM_DESTDIR/$litmus.out | head -1
  75. exit $ret