-
Notifications
You must be signed in to change notification settings - Fork 14
Expand file tree
/
Copy pathtest.sh
More file actions
executable file
·129 lines (101 loc) · 3 KB
/
test.sh
File metadata and controls
executable file
·129 lines (101 loc) · 3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#! /bin/sh
BINDIR=$(dirname $0)
. $BINDIR/init.sh
TESTFILE="$WORKINGDIR/test.txt"
function generate_text_file() {
[ -f "$TESTFILE" ] && return;
touch $TESTFILE
arry=(cccc aaaa aabb bbbb);
for i in "${arry[@]}"; do
echo $i>>$TESTFILE
done
}
for NUM in $(ls $NOOBDIR); do
echo "Processing task $NUM"
# Model processing
MODELPL_SCRIPT_NAME="${NUM}.pl"
MODELPL="$MODELDIR/$NUM/$MODELPL_SCRIPT_NAME"
if [ ! -e "$MODELPL" ]; then
echo "Task $NUM not completed"
continue
fi
# add executable bit for model script
chmod +x "$MODELPL"
DATDIR="$MODELDIR/$NUM/dat"
SOLDIR="$MODELDIR/$NUM/sol"
[ -e "$SOLDIR" ] || mkdir "$SOLDIR"
RESULT="$RESULTDIR/$NUM/sol/result.txt"
HEADER="n/n"
for SCRIPT in $(ls $NOOBDIR/$NUM); do
NOOBPL="$NOOBDIR/$NUM/$SCRIPT"
# add executable bit for noob script
chmod +x "$NOOBPL"
RSOLDIR="$RESULTDIR/$NUM/sol/${SCRIPT%.pl}"
LINE="${SCRIPT%.pl}"
[ -e "$RSOLDIR" ] || mkdir -p "$RSOLDIR"
for TEST in $(ls $DATDIR); do
DAT_FILE="$TEST"
SOL_FILE="${TEST%dat}sol"
ERR_FILE="${TEST%dat}err"
DAT_PATH="$DATDIR/$DAT_FILE"
SOL_PATH="$SOLDIR/$SOL_FILE"
ERR_PATH="$SOLDIR/$ERR_FILE"
RSOL_PATH="$RSOLDIR/$SOL_FILE"
RERR_PATH="$RSOLDIR/$ERR_FILE"
# execute in working dir
if [ ! -e "$SOL" ]; then
cp $MODELPL $WORKINGDIR
cp $DAT_PATH $WORKINGDIR
generate_text_file
cd $WORKINGDIR
"./$MODELPL_SCRIPT_NAME" "./$DAT_FILE" >"./$SOL_FILE" 2>"./$ERR_FILE"
cd - >/dev/null 2>&1
rm -rf "$WORKINGDIR/$MODELPL_SCRIPT_NAME" $TESTFILE "$WORKINGDIR/$DAT_FILE"
mv $WORKINGDIR/$SOL_FILE $SOL_PATH
mv $WORKINGDIR/$ERR_FILE $ERR_PATH
fi
TERMINATE=""
if [ ! -e "$RSOL" ]; then
cp $NOOBPL $WORKINGDIR
cp $DAT_PATH $WORKINGDIR
generate_text_file
cd $WORKINGDIR
"./$SCRIPT" "$DAT_FILE" >"./$SOL_FILE" 2>"$ERR_FILE" &
PID=$!
sleep 0.3 > /dev/null 2>&1
for I in 1 2 3 4 5; do
kill -0 $PID >/dev/null 2>&1 || break
sleep 1
done
if kill -0 $PID >/dev/null 2>&1; then
kill -9 $PID >/dev/null 2>&1
TERMINATE="1"
fi
cd - >/dev/null 2>&1
rm -rf "$WORKINGDIR/$SCRIPT" $TESTFILE "$WORKINGDIR/$DAT_FILE"
mv $WORKINGDIR/$SOL_FILE $RSOL_PATH
mv $WORKINGDIR/$ERR_FILE $RERR_PATH
fi
if [ -n "$TERMINATE" ]; then
echo "[T] ${SCRIPT%.pl} ${TEST%.dat}"
LINE="$LINE T"
else
if diff -q $SOL_PATH $RSOL_PATH >/dev/null 2>&1; then
echo "[+] ${SCRIPT%.pl} ${TEST%.dat}"
LINE="$LINE +"
else
echo "[-] ${SCRIPT%.pl} ${TEST%.dat}"
LINE="$LINE -"
fi
fi
if [ -n "$HEADER" ]; then
HEADER="$HEADER ${TEST%.dat}"
fi
done
if [ -n "$HEADER" ]; then
echo "$HEADER" > $RESULT
HEADER=""
fi
echo "$LINE" >> $RESULT
done
done