95 lines
1.6 KiB
Plaintext
95 lines
1.6 KiB
Plaintext
cc-clean(){
|
|
rm -rf ./**/*.out 2>/dev/null
|
|
}
|
|
|
|
cc-delete-tests(){
|
|
rm -rf ./**/*.test.c
|
|
}
|
|
|
|
|
|
cc-run(){
|
|
local file
|
|
if [ -z "$1" ]; then
|
|
echo "Usage: cc-run <file> [args...]" >&2
|
|
return 1
|
|
fi
|
|
|
|
cc-clean
|
|
|
|
file="$1"
|
|
shift
|
|
|
|
if command -v norminette &>/dev/null
|
|
then
|
|
norminette "${file}"
|
|
fi
|
|
|
|
cc -std=c99 "${file}" -o "${file}.out" -Wall -Wextra -Werror -fsanitize=address && \
|
|
"./${file}.out" "$@"
|
|
|
|
cc-clean
|
|
}
|
|
|
|
cc-run-test-inline(){
|
|
local file
|
|
if [ -z "$1" ]; then
|
|
echo "Usage: cc-run <file> [args...]" >&2
|
|
return 1
|
|
fi
|
|
|
|
cc-clean
|
|
|
|
file="$1"
|
|
shift
|
|
|
|
if command -v norminette &>/dev/null
|
|
then
|
|
norminette "${file}"
|
|
fi
|
|
|
|
cc -std=c99 "${file}" -o "${file}.out" -Wall -Wextra -Werror -DTEST=please && \
|
|
"./${file}.out" "$@"
|
|
|
|
cc-clean
|
|
}
|
|
|
|
cc-test(){
|
|
local file
|
|
if [ -z "$1" ]; then
|
|
echo "Usage: cc-run <file> [args...]" >&2
|
|
return 1
|
|
fi
|
|
|
|
cc-clean
|
|
|
|
file="$1"
|
|
shift
|
|
|
|
# remove trailing .c if present
|
|
base="${file%.*}"
|
|
|
|
if command -v norminette &>/dev/null; then
|
|
norminette "${base}.c"
|
|
fi
|
|
|
|
# compile base.test.c -> base.test.out and run it
|
|
cc -std=c99 "${base}.test.c" -o "${base}.test.out" -Wall -Wextra -Werror &&
|
|
"./${base}.test.out" "$@"
|
|
|
|
cc-clean
|
|
}
|
|
|
|
cc-test-all() {
|
|
# find .c files, exclude those ending with .test.c
|
|
find . -type f -name '*.c' ! -name '*.test.c' -print0 |
|
|
while IFS= read -r -d '' file; do
|
|
echo -e "----------$file: TESTING-------------\n"
|
|
cc-test "$file" || {
|
|
echo -e "\n----------$file: DONE (NOT OK)-------"
|
|
# echo "cc-test failed for $file" >&2
|
|
return 1
|
|
}
|
|
echo -e "\n----------$file: DONE (OK)-----------"
|
|
done
|
|
}
|