|
|
@@ -0,0 +1,71 @@ |
|
|
|
#!/bin/sh - |
|
|
|
|
|
|
|
# |
|
|
|
# Script to reduce a test case down to a smaller set by deleting |
|
|
|
# lines. |
|
|
|
|
|
|
|
# Start by making the file into a single file via: |
|
|
|
# cc -E -o newcfile.c -c inputfile.c |
|
|
|
# |
|
|
|
# Update the script w/ the compile command that will test for the |
|
|
|
# failiure you're looking for. It is at the line marked UPDATE ME. |
|
|
|
# |
|
|
|
# And then run the script: |
|
|
|
# sh test.case.reduce.sh newcfile.c |
|
|
|
# |
|
|
|
# After the run, it'll report how many lines were dropped, and |
|
|
|
# the final test case will be named test.c. |
|
|
|
# |
|
|
|
# This isn't perfect (I know there is a better tool out there, but |
|
|
|
# I can't remember/find it) in that it leaves blocks of code that |
|
|
|
# are multiple lines where any one removed causes an error when |
|
|
|
# compiling. This can be delt w/ by hand at the end as it's a bit |
|
|
|
# easier, but could be improved by trying to delete n lines instead |
|
|
|
# of just 1 for increasing n (or maybe decreasing n?). |
|
|
|
# |
|
|
|
# In my test case of reducing, it took a 2163 line file down to |
|
|
|
# 313 befor manually reducing it to 18 lines. |
|
|
|
|
|
|
|
cp "$1" "test.c" |
|
|
|
|
|
|
|
totdroppedlines=0 |
|
|
|
droppedlines=1 |
|
|
|
while [ $droppedlines -ne 0 ]; do |
|
|
|
droppedlines=0 |
|
|
|
i=0 |
|
|
|
while :; do |
|
|
|
linecount=$(wc -l < test.c) |
|
|
|
|
|
|
|
if [ $i -eq $linecount ]; then |
|
|
|
break |
|
|
|
fi |
|
|
|
|
|
|
|
while [ $i -lt $linecount ]; do |
|
|
|
# try to delete next line |
|
|
|
(if [ $i -gt 0 ]; then head -n $i test.c; fi; tail -n +$(($i + 2)) test.c ) > curtest.c |
|
|
|
#echo curtest line count: $(wc -l < curtest.c) |
|
|
|
|
|
|
|
# modify this function such that when the test case |
|
|
|
# still "fails" that it returns success. |
|
|
|
# |
|
|
|
# In this case, we are checking for a specific |
|
|
|
# error message. |
|
|
|
# |
|
|
|
# ====== UPDATE ME ====== |
|
|
|
if arm-none-eabi-gcc -Werror=stringop-overflow=1 -mcpu=cortex-m3 -mthumb -O2 -g -Wall -Werror -c curtest.c 2>&1 | grep 'accessing 160 bytes in a region of size 32' > /dev/null; then |
|
|
|
echo dropping line $(($i + 1 + $droppedlines)) |
|
|
|
droppedlines=$(($droppedlines + 1)) |
|
|
|
mv curtest.c test.c |
|
|
|
break |
|
|
|
fi |
|
|
|
i=$(($i + 1)) |
|
|
|
echo keeping line $(($i + $droppedlines)) |
|
|
|
done |
|
|
|
done |
|
|
|
|
|
|
|
echo dropped $droppedlines lines |
|
|
|
|
|
|
|
totdroppedlines=$(($totdroppedlines + $droppedlines)) |
|
|
|
done |
|
|
|
|
|
|
|
echo dropped $totdroppedlines lines in total |