-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcorewar_test.sh
156 lines (137 loc) · 4.19 KB
/
corewar_test.sh
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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
#!/bin/bash
## -------------------------------- PATHS ----------------------------------- ##
ZAZVM=/mnt/c/Users/shokk/CLionProjects/corewar/vm-champ-linux/
USERVM=/mnt/c/Users/shokk/CLionProjects/corewar/
CHAMPSDIR=/mnt/c/Users/shokk/CLionProjects/corewar/champs/asm/
## -------------------------------------------------------------------------- ##
## -------------------------------- TESTS ----------------------------------- ##
## PUT 0 IF YOU DON'T WANT TO TEST
TESTSOLOCHAMPS=0
TESTSBATTLE=1
## -------------------------------------------------------------------------- ##
## -------------- CHAMPS TO TEST (comment what you don't want) -------------- ##
## !! CHAMPS SHOULD BE IN CHAMPSDIR OR IN CHAMPSDIR/examples
CHAMPS[0]=Gagnant
CHAMPS[1]=Octobre_Rouge_V4.2
CHAMPS[2]=ex
CHAMPS[3]=first
CHAMPS[4]=jumper
CHAMPS[5]=maxidef
CHAMPS[6]=mortel
CHAMPS[7]=slider2
CHAMPS[8]=toto
CHAMPS[9]=bigzork
CHAMPS[10]=fluttershy
CHAMPS[11]=helltrain
CHAMPS[12]=turtle
CHAMPS[13]=zork
## ------------------------------------------------------------------------- ##
SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
TESTSDIR=$SCRIPTDIR/TEST
MKDIR=/bin/mkdir
## --------------------------------- START ---------------------------------- ##
if [ ! -f $USERVM/corewar ]; then
echo -e "No corewar executable found in\033[1;32m" $USERVM "\033[mdid you forget to \033[1;35mmake\033[m or change the \033[1;35mUSERVM\033[0m path in script ?"
exit 1
fi
if [ ! -f $ZAZVM/corewar ]; then
echo "No corewar executable found at\033[1;32m" $ZAZVM/corewar "\033[m you can change \033[1;35mZAZVM\033[0m path in script"
exit 1
fi
if [ ! -d $TESTSDIR ]; then
$MKDIR $TESTSDIR
fi
i=0
for element in ${CHAMPS[@]}
do
if [[ $TESTSBATTLE == 0 && $TESTSOLOCHMAPS == 0 ]]; then
break
fi
CHAMP_PATH=$CHAMPSDIR/$element
if [ ! -f $CHAMP_PATH.s ]; then
CHAMP_PATH=$CHAMPSDIR/examples/$element
fi
if [ ! -f $CHAMP_PATH.s ]; then
((i++))
continue
fi
if [ ! -f $CHAMP_PATH.cor ]; then
$ZAZVM/asm $CHAMP_PATH.s >&-
fi
CHAMPS_PATH[i]=$CHAMP_PATH
((i++))
done
for element in ${CHAMPS[@]}
do
if [[ $TESTSOLOCHAMPS == 0 ]]; then
break
fi
## print element name ##
echo -en "- " $element
LENGTH=${#element}
if [[ $LENGTH -lt 5 ]]; then
echo -en "\t"
fi
if [[ $LENGTH -lt 14 ]]; then
echo -en "\t"
fi
if [[ $LENGTH -lt 27 ]]; then
echo -en "\t"
fi
echo -en "\t"
CHAMP_PATH=$CHAMPSDIR/$element
if [ ! -f $CHAMP_PATH.s ]; then
CHAMP_PATH=$CHAMPSDIR/examples/$element
fi
if [ ! -f $CHAMP_PATH.s ]; then
continue
fi
## create zaz file ##
if [ ! -f $TESTSDIR/zaz_file_$element ]; then
$ZAZVM/corewar -v 31 $CHAMP_PATH.cor > $TESTSDIR/zaz_file_$element
fi
## create user file ##
$USERVM/corewar -v 31 $CHAMP_PATH.cor > $TESTSDIR/user_file_$element
## create diff ##
diff $TESTSDIR/user_file_$element $TESTSDIR/zaz_file_$element > $TESTSDIR/diff_$element
## print ok or bad from the return of the diff command ##
if [[ $? == 0 ]]; then
echo -en " [\033[1;35m√\033[m]\n"
else
NB_DIFF="$( cat $TESTSDIR/diff_$element | wc -l)"
echo -en " [\033[0;31mX\033[m] "
echo $NB_DIFF "diff(s) in" $TESTSDIR/diff_$element
fi
done
if [[ $TESTSBATTLE -ne 0 ]]; then
TIT="-"
BATTLENAME=${CHAMPS[0]}$TIT${CHAMPS[4]}$TIT${CHAMPS[6]}$TIT${CHAMPS[6]}
echo -en "- " $BATTLENAME
LENGTH=${#BATTLENAME}
if [[ $LENGTH -lt 5 ]]; then
echo -en "\t"
fi
if [[ $LENGTH -lt 14 ]]; then
echo -en "\t"
fi
if [[ $LENGTH -lt 27 ]]; then
echo -en "\t"
fi
echo -en "\t"
## create zaz file ##
if [ ! -f $TESTSDIR/zaz_file_$BATTLENAME ]; then
$ZAZVM/corewar -v 31 ${CHAMPS_PATH[1]}.cor ${CHAMPS_PATH[4]}.cor ${CHAMPS_PATH[6]}.cor ${CHAMPS_PATH[7]}.cor > $TESTSDIR/zaz_file_$BATTLENAME
fi
## create user file ##
$USERVM/corewar -v 31 ${CHAMPS_PATH[1]}.cor ${CHAMPS_PATH[4]}.cor ${CHAMPS_PATH[6]}.cor ${CHAMPS_PATH[7]}.cor > $TESTSDIR/user_file_$BATTLENAME
## create diff ##
diff $TESTSDIR/user_file_$BATTLENAME $TESTSDIR/zaz_file_$BATTLENAME > $TESTSDIR/diff_$BATTLENAME
## print ok or bad from the return of the diff command ##
if [[ $? == 0 ]]; then
echo -en " [\033[1;35m√\033[m]\n"
else
NB_DIFF="$( cat $TESTSDIR/diff_$BATTLENAME | wc -l)"
echo -en " [\033[0;31mX\033[m] "
echo $NB_DIFF "diff(s) in" $TESTSDIR/diff_$BATTLENAME
fi
fi