Advertisement
Guest User

sprawdzarka.sh

a guest
Oct 6th, 2014
945
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 2.88 KB | None | 0 0
  1. #!/bin/bash
  2. # To jest sprawdzarka.sh
  3. # Wersja 2.3 (by Stanisław Szcześniak)
  4. # Żeby uruchomić, wpisz w konsoli sprawdzarka.sh i postępuj zgodnie z instrukcjami z ekranu
  5. # Jeżeli twój program nazywa się pro.cpp, to testy muszą być z prefkisem pro (np. pro1b.in i por1b.out) i kończyć się na na .in i .out
  6. # Testy muszą być w katalogu, w którym odpalasz sprawdzarkę.
  7. # Instalacja :
  8. # Windows : nie działa
  9. # Linux :   zapisz ten plik w /usr/local/bin, następnie nadaj mu prawa do wykonywania :
  10. # cp sprawdzarka.sh /usr/local/bin/
  11. # chmod +x /usr/local/bin/sprawdzarka.sh
  12. # oprócz tego byłoby dobrze mieć jakiegoś Makefilea w katalogu domowym (~)
  13. # Można też odpalać sprawdzarkę : sprawdzarka.sh prog
  14.  
  15. string="NULL"
  16. if [ "$#" -ne 1 ]; then
  17.     echo -n -e "\e[36mWpisz skrtótową nazwę zadania (np. mro dla mro.cpp i mro-wykonywalny) "
  18.     read string
  19.     echo -n -e "\e[0m"
  20. else
  21.     string=$1
  22.     echo -e "\e[33mWczytano program $string \e[0m!"
  23. fi
  24.  
  25. if [ ! -f "$string.cpp" ]; then
  26.     echo "!Plik $string.cpp nie istnieje w tym katalogu -->> a to oznacza, że chyba pomyliłeś programy :)"
  27.     exit
  28. fi
  29.  
  30. echo -n -e "\e[36m"
  31. FILE=~/Makefile;
  32. if test -f $FILE; then
  33.     make -f ~/Makefile $string
  34. else
  35.     echo "Plik ~/Makefile nie istnieje, więc skompiluję jakoś inaczej :)"
  36.     g++ -o $string -O2 -Wall $string.cpp
  37.  
  38. fi
  39.  
  40. echo -n -e "\e[36mCzy pokazywać czasy wykonania na poszczególnych testach ?(0/1) :: \e[0m"
  41. read czy
  42. b=1
  43. testy=0
  44. zrobione_testy=0
  45. brak_outow=0
  46. testy_z_wa=""
  47. for var in $string*.in
  48. do
  49.     czlon=${#var}
  50.     czlon=$[czlon-3]
  51.     if [ ! -f "${var:0:$czlon}.out" ]; then
  52.         echo -n -e "\e[95m"
  53.         echo -n $var
  54.         echo -n " :: "
  55.         echo -e "RE -->> nie ma odpowiedzi do tego testu\e[0m"
  56.         ((brak_outow++))
  57.         continue
  58.     fi
  59.     if (($czy == 0))
  60.     then ./$string < $var > .temporary
  61.     else
  62.         echo -n -e "\e[36m"
  63.         /usr/bin/time -f '%U' ./$string < $var > .temporary | echo -n
  64.         echo -n -e "\e[36m"
  65.     fi
  66.  
  67.     testy=$[testy + 1]
  68.     diff -w -q .temporary ${var:0:$czlon}.out >& /dev/null
  69.     b=$?
  70.     if (($b == 0))
  71.     then
  72.         echo -n -e "\e[32m"
  73.         echo -n $var
  74.         echo -n " :: "
  75.         echo -e "OK\e[0m"
  76.         zrobione_testy=$[zrobione_testy+1]
  77.     else
  78.         if (($testy!=$[zrobione_testy+1]))
  79.         then
  80.             testy_z_wa="$testy_z_wa, $var"
  81.         else
  82.             testy_z_wa="$testy_z_wa $var"
  83.         fi
  84.         echo -n -e "\e[31m"
  85.         echo -n $var
  86.         echo -n " :: "
  87.         echo -e "WA\e[0m"
  88.         #echo -e "\e[33mWzorcówka:"
  89.         #cat .temporary
  90.         #echo -n -e "\e[0m"
  91.         #echo -e "\e[34mBrut:"
  92.         #cat ${var:0:$a}.out
  93.         #echo -n -e "\e[0m"
  94.     fi
  95.  
  96. done
  97.  
  98. echo -n -e "\e[36m"
  99. echo -n "Udało się zrobić ::"
  100. echo -n $zrobione_testy
  101. echo -n "/"
  102. echo $testy
  103. if (($testy!=$zrobione_testy))
  104. then
  105.     echo -n -e "\e[31mTwój program dostał WA na :: "
  106.     echo $testy_z_wa
  107.     echo -e -n "\e[0m"
  108. fi
  109. if (($brak_outow != 0))
  110. then
  111.     echo Ale nie bylo też outów do $brak_outow testów
  112. fi
  113. echo -n -e "\e[0m"
  114. exit
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement