cc-clean(){
    rm -rf *.out
}

cc-run(){
	local file
	if [ -z "$1" ]; then
		echo "Usage: cc-run <file> [args...]" >&2
		return 1
	fi

	cc-clean

	file="$1"
	shift

	cc -std=c99 "${file}" -o "${file}.out" -Wall -Wextra -Werror && \
	"./${file}.out" "$@"
}

cc-run-test(){
	local file
	if [ -z "$1" ]; then
		echo "Usage: cc-run <file> [args...]" >&2
		return 1
	fi

	cc-clean

	file="$1"
	shift

	cc -std=c99 "${file}" -o "${file}.out" -Wall -Wextra -Werror -DTEST=please && \
	"./${file}.out" "$@"
}


cc-run-lax(){
	local file
	if [ -z "$1" ]; then
		echo "Usage: cc-run <file> [args...]" >&2
		return 1
	fi

	cc-clean

	file="$1"
	shift

	cc -std=c99 "${file}" -o "${file}.out" -DTEST=please && \
	"./${file}.out" "$@"
}

cc-test(){
	local test base
	cc-clean
	if ! ls *_test.c >/dev/null 2>&1; then
		echo "No _test.c files found" >&2
		return 1
	fi
	for test in *_test.c; do
		base="${test%.c}"
		cc "${test}" -o "${base}.out" -Wall -Wextra -Werror
	done
	for test in *_test.out; do
		"./${test}"
	done
	# cc-clean
}
