#! /usr/bin/env bash

# Checks C264 F24 linked list homework submissions.  Run from ~/sys/hwsubmit/core after putting solution on rgreen@luc.edu/readarraytoll.c
# Refreshes results if argument 2 is 1; otherwise just works on newly collected submissions.

if [[ $# -eq 2 ]]; then
  refresh=$1; shift
fi
if [[ $# -ne 1 ]]; then
  echo Usage: llcheck [refresh] hwnum
  exit 10 
fi

hwnum=$1

for stud in rgreen@luc.edu * ; do
  pushd $stud
  mkdir -p .graded/$hwnum
  if [[ -e readarraytoll.c ]]; then
    cp readarraytoll.c .graded/$hwnum
  fi
  cd .graded/$hwnum
  if [[ $refresh -eq 1 ]]; then
    del . '*'
    undel . readarraytoll.c
    purge .
  fi
  if [[ -e readarraytoll.c ]]; then
    if [[ ! -e Makefile ]]; then
      cp ~rig/public/c264/ll/{ll.c,ll.h,eltcust.h,lltest.c,Makefile} .
      make 2> makerrorout.txt
      ./lltest a1 b2 c3 d4 >& testfourstrings.out
      ./lltest a1 >& testonestring.out
      ./lltest >& testempty.out
      diff testfourstrings.out ../../../rgreen@luc.edu/.graded/$hwnum/testfourstrings.out > difffourstrings
      diff testonestring.out ../../../rgreen@luc.edu/.graded/$hwnum/testonestring.out > diffonestring
      diff testempty.out ../../../rgreen@luc.edu/.graded/$hwnum/testempty.out > diffempty
      cp ~/sys/hw${hwnum}sup/intcust.h eltcust.h
      cp ~/sys/hw${hwnum}sup/llinttest.c lltest.c
      make 2> makeinterrorout.txt
      ./lltest -10 20 35 48 >& testfourints.out
      diff testfourints.out ../../../rgreen@luc.edu/.graded/$hwnum/testfourints.out > difffourints
    fi
    cp ~/teaching/c264/general/llcommentstemplate.txt ../$hwnum-grade.txt
  else
    echo "No submission" > makerrorout.txt
    cp ~/teaching/c264/general/llnosub.txt ../$hwnum-grade.txt
  fi
  popd
done
