# **************************************************************************** # # # # .--. _ # # test.sh |o_o || | # # |:_/ || |_ _ ___ __ # # By: houtworm // \ \ __| | | \ \/ / # # (| | )|_| |_| |> < # # Created: 2023/02/20 12:46:46 by houtworm /'\_ _/`\__|\__,_/_/\_\ # # Updated: 2023/03/11 08:08:25 by houtworm \___)=(___/ # # # # **************************************************************************** # #!/bin/bash OS=$(uname -s) FAULTS=0 PNAME=libft.a VALGRIND=0 which valgrind > /dev/null if [ $? -eq 0 ] then VALGRIND=1 else printf "\n\e[1;31mInstall Valgrind for extra Memory Checking\e[0;00m\n" fi mkdir -p tests/tmp HEADLOC=$(find ./ -name '*libft.h' | grep -v tests | grep -v ccls) cp $HEADLOC tests/tmp/libft.h testfunction() { CURFUNERR=0 rm tests/tmp/binary 2> /dev/null gcc -o tests/tmp/binary tests/$1.c libft.a 2> /dev/null ./tests/tmp/binary if [ $? -ne 0 ] then printf "\n\e[1;31mKO $1 $2 \e[0;00m\n" FAULTS=$(($FAULTS+1)) CURFUNERR=1 else gcc -g -fsanitize=address -o tests/tmp/binary tests/$1.c libft.a 2> /dev/null ./tests/tmp/binary 2> tests/tmp/memorycheck > /dev/null if [ $? -ne 0 ] then cat tests/tmp/memorycheck | grep "leaked" > /dev/null if [ $? -ne 1 ] then printf "\n\e[1;31mLeaks fsanitize $1 $2\e[0;00m\n" cat tests/tmp/memorycheck FAULTS=$(($FAULTS+1)) CURFUNERR=1 fi cat tests/tmp/memorycheck | grep "ABORT" > /dev/null if [ $? -ne 1 ] then printf "\n\e[1;31mError fsanitize $1 $2\e[0;00m\n" cat tests/tmp/memorycheck FAULTS=$(($FAULTS+1)) CURFUNERR=1 fi elif [ $VALGRIND -eq 1 ] then gcc -o tests/tmp/binary tests/$1.c libft.a 2> /dev/null valgrind --leak-check=full ./tests/tmp/binary 2> tests/tmp/memorycheck > /dev/null cat tests/tmp/memorycheck | grep indirectly | grep "[123456789] bytes" > /dev/null if [ $? -eq 0 ] then printf "\n\e[1;31mLeaks Valgrind $1 $2\e[0;00m\n" cat tests/tmp/memorycheck FAULTS=$(($FAULTS+1)) CURFUNERR=1 fi cat tests/tmp/memorycheck | grep definitely | grep "[123456789] bytes" > /dev/null if [ $? -eq 0 ] then printf "\n\e[1;31mLeaks Valgrind $1 $2\e[0;00m\n" cat tests/tmp/memorycheck FAULTS=$(($FAULTS+1)) CURFUNERR=1 fi fi fi if [ $CURFUNERR -eq 0 ] then printf "\e[1;32mOK \e[0;00m" fi } expectfsanitize() { CURFUNERR=0 gcc -o tests/tmp/binary tests/$1.c libft.a 2> /dev/null ./tests/tmp/binary if [ $? -ne 0 ] then printf "\n\e[1;31mKO $1 $2 \e[0;00m\n" FAULTS=$(($FAULTS+1)) CURFUNERR=1 else gcc -g -fsanitize=address -o tests/tmp/binary tests/$1.c libft.a 2> /dev/null ./tests/tmp/binary 2> tests/tmp/memorycheck > /dev/null if [ $3 ] then cat tests/tmp/memorycheck | grep "heap-buffer-overflow" > /dev/null if [ $? -eq 1 ] then printf "\n\e[1;31mYour calloc mallocs too much bytes $1 $2\e[0;00m\n" FAULTS=$(($FAULTS+1)) CURFUNERR=1 fi elif [ $? -ne 0 ] then cat tests/tmp/memorycheck | grep "leaked" > /dev/null if [ $? -ne 0 ] then printf "\n\e[1;31mNo Malloc $1 $2\e[0;00m\n" FAULTS=$(($FAULTS+1)) CURFUNERR=1 fi cat tests/tmp/memorycheck | grep "ABORT" > /dev/null if [ $? -ne 1 ] then printf "\n\e[1;31mError fsanitize $1 $2\e[0;00m\n" cat tests/tmp/memorycheck FAULTS=$(($FAULTS+1)) CURFUNERR=1 fi fi fi if [ $CURFUNERR -eq 0 ] then printf "\e[1;32mOK \e[0;00m" fi } testprintstdout() { CURFUNERR=0 gcc -o tests/tmp/binary tests/$1.c libft.a 2> /dev/null ./tests/tmp/binary > tests/tmp/output #mv tests/tmp/output tests/expected/$1 #write expected files diff tests/tmp/output tests/expected/$1 if [ $? -ne 0 ] then printf "\n\e[1;31mKO $1 $2 \e[0;00m\n" FAULTS=$(($FAULTS+1)) CURFUNERR=1 else gcc -g -fsanitize=address -o tests/tmp/binary tests/$1.c libft.a 2> /dev/null ./tests/tmp/binary > /dev/null 2> tests/tmp/memorycheck if [ $3 ] then cat tests/tmp/memorycheck | grep "heap-buffer-overflow" > /dev/null if [ $? -eq 1 ] then printf "\n\e[1;31mYour calloc mallocs too much bytes $1 $2\e[0;00m\n" FAULTS=$(($FAULTS+1)) CURFUNERR=1 fi elif [ $? -ne 0 ] then cat tests/tmp/memorycheck | grep "leaked" > /dev/null if [ $? -ne 1 ] then printf "\n\e[1;31mLeaks fsanitize $1 $2\e[0;00m\n" cat tests/tmp/memorycheck FAULTS=$(($FAULTS+1)) CURFUNERR=1 fi cat tests/tmp/memorycheck | grep "ABORT" > /dev/null if [ $? -ne 1 ] then printf "\n\e[1;31mError fsanitize $1 $2\e[0;00m\n" cat tests/tmp/memorycheck FAULTS=$(($FAULTS+1)) CURFUNERR=1 fi fi fi if [ $CURFUNERR -eq 0 ] then printf "\e[1;32mOK \e[0;00m" fi } testprintstderr() { CURFUNERR=0 gcc -o tests/tmp/binary tests/$1.c libft.a 2> /dev/null ./tests/tmp/binary 2> tests/tmp/output #mv tests/tmp/output tests/expected/$1 #write expected files diff tests/tmp/output tests/expected/$1 if [ $? -ne 0 ] then printf "\n\e[1;31mKO $1 $2 \e[0;00m\n" FAULTS=$(($FAULTS+1)) CURFUNERR=1 else gcc -g -fsanitize=address -o tests/tmp/binary tests/$1.c libft.a 2> /dev/null ./tests/tmp/binary 2> tests/tmp/memorycheck if [ $3 ] then cat tests/tmp/memorycheck | grep "heap-buffer-overflow" > /dev/null if [ $? -eq 1 ] then printf "\n\e[1;31mYour calloc mallocs too much bytes $1 $2\e[0;00m\n" FAULTS=$(($FAULTS+1)) CURFUNERR=1 fi elif [ $? -ne 0 ] then cat tests/tmp/memorycheck | grep "leaked" > /dev/null if [ $? -ne 1 ] then printf "\n\e[1;31mLeaks fsanitize $1 $2\e[0;00m\n" cat tests/tmp/memorycheck FAULTS=$(($FAULTS+1)) CURFUNERR=1 fi cat tests/tmp/memorycheck | grep "ABORT" > /dev/null if [ $? -ne 1 ] then printf "\n\e[1;31mError fsanitize $1 $2\e[0;00m\n" cat tests/tmp/memorycheck FAULTS=$(($FAULTS+1)) CURFUNERR=1 fi fi fi if [ $CURFUNERR -eq 0 ] then printf "\e[1;32mOK \e[0;00m" fi } testprintstdin() { CURFUNERR=0 gcc -o tests/tmp/binary tests/$1.c libft.a 2> /dev/null ./tests/tmp/binary 0> tests/tmp/output > /dev/null #mv tests/tmp/output tests/expected/$1 #write expected files diff tests/tmp/output tests/expected/$1 if [ $? -ne 0 ] then printf "\n\e[1;31mKO $1 $2 \e[0;00m\n" FAULTS=$(($FAULTS+1)) CURFUNERR=1 else gcc -g -fsanitize=address -o tests/tmp/binary tests/$1.c libft.a 2> /dev/null ./tests/tmp/binary 2> tests/tmp/memorycheck 0> /dev/null if [ $3 ] then cat tests/tmp/memorycheck | grep "heap-buffer-overflow" > /dev/null if [ $? -eq 1 ] then printf "\n\e[1;31mYour calloc mallocs too much bytes $1 $2\e[0;00m\n" FAULTS=$(($FAULTS+1)) CURFUNERR=1 fi elif [ $? -ne 0 ] then cat tests/tmp/memorycheck | grep "leaked" > /dev/null if [ $? -ne 1 ] then printf "\n\e[1;31mLeaks fsanitize $1 $2\e[0;00m\n" cat tests/tmp/memorycheck FAULTS=$(($FAULTS+1)) CURFUNERR=1 fi cat tests/tmp/memorycheck | grep "ABORT" > /dev/null if [ $? -ne 1 ] then printf "\n\e[1;31mError fsanitize $1 $2\e[0;00m\n" cat tests/tmp/memorycheck FAULTS=$(($FAULTS+1)) CURFUNERR=1 fi fi fi if [ $CURFUNERR -eq 0 ] then printf "\e[1;32mOK \e[0;00m" fi } testprintfd4() { CURFUNERR=0 gcc -o tests/tmp/binary tests/$1.c libft.a 2> /dev/null ./tests/tmp/binary 4> tests/tmp/output #mv tests/tmp/output tests/expected/$1 #write expected files diff tests/tmp/output tests/expected/$1 if [ $? -ne 0 ] then printf "\n\e[1;31mKO $1 $2 \e[0;00m\n" FAULTS=$(($FAULTS+1)) CURFUNERR=1 else gcc -g -fsanitize=address -o tests/tmp/binary tests/$1.c libft.a 2> /dev/null ./tests/tmp/binary 2> tests/tmp/memorycheck 4> /dev/null if [ $3 ] then cat tests/tmp/memorycheck | grep "heap-buffer-overflow" > /dev/null if [ $? -eq 1 ] then printf "\n\e[1;31mYour calloc mallocs too much bytes $1 $2\e[0;00m\n" FAULTS=$(($FAULTS+1)) CURFUNERR=1 fi elif [ $? -ne 0 ] then cat tests/tmp/memorycheck | grep "leaked" > /dev/null if [ $? -ne 1 ] then printf "\n\e[1;31mLeaks fsanitize $1 $2\e[0;00m\n" cat tests/tmp/memorycheck FAULTS=$(($FAULTS+1)) CURFUNERR=1 fi cat tests/tmp/memorycheck | grep "ABORT" > /dev/null if [ $? -ne 1 ] then printf "\n\e[1;31mError fsanitize $1 $2\e[0;00m\n" cat tests/tmp/memorycheck FAULTS=$(($FAULTS+1)) CURFUNERR=1 fi fi fi if [ $CURFUNERR -eq 0 ] then printf "\e[1;32mOK \e[0;00m" fi } checkfile() { ls $1 2> /dev/null | grep $1 > /dev/null if [ $? -ne $2 ] then printf "\e[1;31m\nMakefile does not create $1\e[0;00m\n" rm -rf tests/tmp exit 1 fi } searchobj() { FILES=$(find ./ -name '*.o' | wc -l) if [ $1 -eq 0 ] then if [ $FILES -ne 0 ] then printf "\e[1;31m\nObject files found after clean\e[0;00m\n" FAULTS=$(($FAULTS+1)) fi fi if [ $1 -eq 1 ] then if [ $FILES -eq 0 ] then printf "\e[1;31m\nObject files not found after make\e[0;00m\n" FAULTS=$(($FAULTS+1)) fi fi } checkrule() { make $1 > /dev/null 2>&1 if [ $? -eq 2 ] then printf "\e[1;31m\nMissing rule $1\e[0;00m\n" FAULTS=$(($FAULTS+1)) fi } relinkcheck() { make $1 2>&1 | grep -v Nothing > tests/tmp/relink && cat tests/tmp/relink | grep -v directory > /dev/null if [ $? -eq 0 ] then printf "\n\e[1;31mMakefile relinks\e\n[0;00m" cat tests/tmp/relink FAULTS=$(($FAULTS+1)) else printf "\e[1;32mOK\e[0;00m" fi } # Norm Check printf "\e[1;36mTesting Source with Norminette \e[0;00m" norminette $(find ./ -name '*.[ch]' | grep -v ./tests/ | grep -v ccls) > tests/tmp/norm if [ $? -eq 1 ] then printf "\e[1;31m\nYour shit is not norm!\e[0;00m" cat tests/tmp/norm | grep Error FAULTS=$(($FAULTS+1)) else printf "\e[1;32mOK\e[0;00m" fi printf "\n" # Makefile Rule Check printf "\e[1;36mTesting Makefile Rules \e[0;00m" checkrule all checkfile $PNAME 0 searchobj 1 checkrule clean searchobj 0 checkfile $PNAME 0 checkrule $PNAME searchobj 1 checkfile $PNAME 0 checkrule fclean searchobj 0 checkfile $PNAME 1 checkrule re searchobj 1 checkfile $PNAME 0 if [ $FAULTS -eq 0 ] then printf "\e[1;32mOK\e[0;00m" fi printf "\n" # Makefile Relink Check printf "\e[1;36mTesting Makefile Relink \e[0;00m" relinkcheck printf "\n" # ft_atoi printf "\e[1;36mTesting ft_atoi \e[0;00m" testfunction mandatory/atoi/test1 "Does not work with simple 12345" testfunction mandatory/atoi/test2 "Does not work with Min int" testfunction mandatory/atoi/test3 "Does not work with Max int" testfunction mandatory/atoi/test4 "Does not work with 0" testfunction mandatory/atoi/test5 "Does not work with Overflow" testfunction mandatory/atoi/test6 "Does not work with hallo as string" testfunction mandatory/atoi/test7 "Does not work with Letter in middle string" testfunction mandatory/atoi/test8 "Does not work with Letter at end of string" testfunction mandatory/atoi/test9 "Does not work with Minus in middle string" testfunction mandatory/atoi/test10 "Does not work with Plus in middle string" testfunction mandatory/atoi/test11 "Does not work with Space in middle string" testfunction mandatory/atoi/test12 "Does not work with NULL string" testfunction mandatory/atoi/test13 "Does not work with Plus beginning string" #testfunction mandatory/atoi/test14 "max int + 1" #testfunction mandatory/atoi/test15 "min int - 1" #testfunction mandatory/atoi/test16 "string with only \\0" #testfunction mandatory/atoi/test17 "\\t\\t1234\\t\\t" testfunction mandatory/atoi/test18 "\\n654\\n" testfunction mandatory/atoi/test19 "nothing" testfunction mandatory/atoi/test20 "c0ngr4tulat1ons" printf "\n" # ft_bzero printf "\e[1;36mTesting ft_bzero \e[0;00m" testfunction mandatory/bzero/test1 "Does not work with NULL string" testfunction mandatory/bzero/test2 "Does not work with More bytes than strlen" testfunction mandatory/bzero/test3 "Does not work with 0 bytes" testfunction mandatory/bzero/test4 "Does not work with 1 byte" testfunction mandatory/bzero/test5 "bzero is not writing zeros" printf "\n" # ft_calloc printf "\e[1;36mTesting ft_calloc \e[0;00m" testfunction mandatory/calloc/test1 'Calloced string is not all \\0' testfunction mandatory/calloc/test2 "Your size too small" expectfsanitize mandatory/calloc/test3 "Your size too big" 1 testfunction mandatory/calloc/test4 "first arg 0" testfunction mandatory/calloc/test5 "second arg 0" #testfunction mandatory/calloc/test6 "first arg -1" #testfunction mandatory/calloc/test7 "second arg -1" testfunction mandatory/calloc/test8 "count is too small" expectfsanitize mandatory/calloc/test9 "count is too big" 1 printf "\n" # ft_isalnum printf "\e[1;36mTesting ft_isalnum \e[0;00m" testfunction mandatory/isalnum/test1 '0' testfunction mandatory/isalnum/test2 '9' testfunction mandatory/isalnum/test3 'a' testfunction mandatory/isalnum/test4 'A' testfunction mandatory/isalnum/test5 'z' testfunction mandatory/isalnum/test6 'Z' testfunction mandatory/isalnum/test7 '/' testfunction mandatory/isalnum/test8 ':' testfunction mandatory/isalnum/test9 '@' testfunction mandatory/isalnum/test10 '[' testfunction mandatory/isalnum/test11 '{' testfunction mandatory/isalnum/test12 '`' testfunction mandatory/isalnum/test13 '~' testfunction mandatory/isalnum/test14 ',' testfunction mandatory/isalnum/test15 "'" testfunction mandatory/isalnum/test16 'space' testfunction mandatory/isalnum/test17 '\0' testfunction mandatory/isalnum/test18 '128' testfunction mandatory/isalnum/test19 'newline' testfunction mandatory/isalnum/test20 '-1' printf "\n" # ft_isalpha printf "\e[1;36mTesting ft_isalpha \e[0;00m" testfunction mandatory/isalpha/test1 'a' testfunction mandatory/isalpha/test2 'A' testfunction mandatory/isalpha/test3 'z' testfunction mandatory/isalpha/test4 'Z' testfunction mandatory/isalpha/test5 '0' testfunction mandatory/isalpha/test6 '9' testfunction mandatory/isalpha/test7 '@' testfunction mandatory/isalpha/test8 '[' testfunction mandatory/isalpha/test9 '{' testfunction mandatory/isalnum/test10 '`' testfunction mandatory/isalnum/test11 '~' testfunction mandatory/isalnum/test12 '\\' testfunction mandatory/isalnum/test13 ';' testfunction mandatory/isalnum/test14 ',' testfunction mandatory/isalnum/test15 "'" testfunction mandatory/isalpha/test16 'space' testfunction mandatory/isalpha/test17 '\\0' testfunction mandatory/isalpha/test18 '128' testfunction mandatory/isalpha/test19 'newline' testfunction mandatory/isalpha/test20 '-1' printf "\n" # ft_isascii printf "\e[1;36mTesting ft_isascii \e[0;00m" testfunction mandatory/isascii/test1 '1' testfunction mandatory/isascii/test2 '127' testfunction mandatory/isascii/test3 'a' testfunction mandatory/isascii/test4 '\\n' testfunction mandatory/isascii/test5 '\\0' testfunction mandatory/isascii/test6 '\\t' testfunction mandatory/isascii/test7 ' ' testfunction mandatory/isascii/test8 '0' testfunction mandatory/isascii/test9 '128' testfunction mandatory/isascii/test10 '255' testfunction mandatory/isascii/test11 '-1' printf "\n" # ft_isdigit printf "\e[1;36mTesting ft_isdigit \e[0;00m" testfunction mandatory/isdigit/test1 '0' testfunction mandatory/isdigit/test2 '1' testfunction mandatory/isdigit/test3 '2' testfunction mandatory/isdigit/test4 '3' testfunction mandatory/isdigit/test5 '4' testfunction mandatory/isdigit/test6 '5' testfunction mandatory/isdigit/test7 '6' testfunction mandatory/isdigit/test8 '7' testfunction mandatory/isdigit/test9 '8' testfunction mandatory/isdigit/test10 '9' testfunction mandatory/isdigit/test11 '\\n' testfunction mandatory/isdigit/test12 '\\0' testfunction mandatory/isdigit/test13 '\\t' testfunction mandatory/isdigit/test14 'a' testfunction mandatory/isdigit/test15 'z' testfunction mandatory/isdigit/test16 'A' testfunction mandatory/isdigit/test17 '/' testfunction mandatory/isdigit/test18 ':' testfunction mandatory/isdigit/test19 '+' testfunction mandatory/isdigit/test20 '-' printf "\n" # ft_isprint printf "\e[1;36mTesting ft_isprint \e[0;00m" testfunction mandatory/isprint/test1 'a' testfunction mandatory/isprint/test2 '\\n' testfunction mandatory/isprint/test3 'space' testfunction mandatory/isprint/test4 '~' testfunction mandatory/isprint/test5 '31' testfunction mandatory/isprint/test6 '127' testfunction mandatory/isprint/test7 '255' testfunction mandatory/isprint/test8 '\\' testfunction mandatory/isprint/test9 '*' testfunction mandatory/isprint/test10 '%' testfunction mandatory/isprint/test11 '\\0' printf "\n" # ft_itoa printf "\e[1;36mTesting ft_itoa \e[0;00m" testfunction mandatory/itoa/test1 '12345' testfunction mandatory/itoa/test2 'int min' testfunction mandatory/itoa/test3 'int max' #expectfsanitize mandatory/itoa/test4 'check if malloced' #instable sometimes testfunction mandatory/itoa/test5 '0' testfunction mandatory/itoa/test6 'int max + 1' testfunction mandatory/itoa/test7 'int min - 1' printf "\n" # ft_memccpy printf "\e[1;36mTesting ft_memccpy \e[0;00m" testfunction mandatory/memccpy/test1 'write 3 bytes' testfunction mandatory/memccpy/test2 'write 6 bytes but src[3] = c' testfunction mandatory/memccpy/test3 'src is only c' testfunction mandatory/memccpy/test4 'length 0' #testfunction mandatory/memccpy/test5 'length -1' testfunction mandatory/memccpy/test6 'no c in src' testfunction mandatory/memccpy/test7 'length is bigger than src' testfunction mandatory/memccpy/test8 'lenght is bigger than dst' testfunction mandatory/memccpy/test9 'check with \\0 in string' testfunction mandatory/memccpy/test10 'src NULL' testfunction mandatory/memccpy/test11 'dst NULL' testfunction mandatory/memccpy/test11 'src & dst NULL' testfunction mandatory/memccpy/test12 'c = \\0' printf "\n" # ft_memchr printf "\e[1;36mTesting ft_memchr \e[0;00m" testfunction mandatory/memchr/test1 'Match at third byte' testfunction mandatory/memchr/test2 'Match at first byte' testfunction mandatory/memchr/test3 'Match at last byte' testfunction mandatory/memchr/test4 'Match 1 byte further than length' testfunction mandatory/memchr/test5 'No match lenght longer than string' testfunction mandatory/memchr/test6 'string == NULL' testfunction mandatory/memchr/test7 'lenght = 0' testfunction mandatory/memchr/test8 'copy over \\0\\0' testfunction mandatory/memchr/test9 'char = \\0' printf "\n" # ft_memcmp printf "\e[1;36mTesting ft_memcmp \e[0;00m" testfunction mandatory/memcmp/test1 'Checking if p2 is subtracted from p1' testfunction mandatory/memcmp/test2 'Diff 1 byte after lenght' testfunction mandatory/memcmp/test3 'Match at first byte' testfunction mandatory/memcmp/test4 'Match at last byte of length' testfunction mandatory/memcmp/test5 'Match 1 byte longer than length' testfunction mandatory/memcmp/test6 'check with \\0 in string 1' testfunction mandatory/memcmp/test7 'check with \\0 in string 2' testfunction mandatory/memcmp/test8 'check with \\n in string 1' testfunction mandatory/memcmp/test9 'check with \\n in string 2' testfunction mandatory/memcmp/test10 'int 0' #testfunction mandatory/memcmp/test11 'int -1' testfunction mandatory/memcmp/test12 'int longer than first string' testfunction mandatory/memcmp/test13 'int longer than second string' testfunction mandatory/memcmp/test14 'int longer than both strings' testfunction mandatory/memcmp/test15 'First string NULL' testfunction mandatory/memcmp/test16 'Second string NULL' testfunction mandatory/memcmp/test17 'both strings NULL' printf "\n" # ft_memcpy printf "\e[1;36mTesting ft_memcpy \e[0;00m" testfunction mandatory/memcpy/test1 'Simple writing test' testfunction mandatory/memcpy/test2 'You write too little' testfunction mandatory/memcpy/test3 'You write too much' testfunction mandatory/memcpy/test4 'length longer than src' testfunction mandatory/memcpy/test5 'lenght longer than dst' testfunction mandatory/memcpy/test6 'lenght 0' testfunction mandatory/memcpy/test7 'copy over \\0\\0' testfunction mandatory/memcpy/test8 'src NULL' testfunction mandatory/memcpy/test9 'dst NULL' testfunction mandatory/memcpy/test9 'src & dst NULL' printf "\n" # ft_memmove printf "\e[1;36mTesting ft_memmove \e[0;00m" testfunction mandatory/memmove/test1 'Basic test moving bytes' testfunction mandatory/memmove/test2 'Moving 3 bytes' testfunction mandatory/memmove/test3 'Moving 5 bytes' testfunction mandatory/memmove/test4 'You move too little' testfunction mandatory/memmove/test5 'You move too much' testfunction mandatory/memmove/test6 'Length longer than src' testfunction mandatory/memmove/test7 'Length longer than dst' testfunction mandatory/memmove/test8 'Length is 0' testfunction mandatory/memmove/test9 'Move over \\0\\0' testfunction mandatory/memmove/test10 'Overlapping char*' testfunction mandatory/memmove/test11 'Overlapping char*' testfunction mandatory/memmove/test12 'dst = NULL' testfunction mandatory/memmove/test13 'src = NULL' testfunction mandatory/memmove/test14 'src & dst = NULL' printf "\n" # ft_memset printf "\e[1;36mTesting ft_memset \e[0;00m" testfunction mandatory/memset/test1 'Basic test' testfunction mandatory/memset/test2 'You write too much' testfunction mandatory/memset/test3 'You write too little' testfunction mandatory/memset/test4 'character \\0' testfunction mandatory/memset/test5 'character \\n' testfunction mandatory/memset/test6 'character \\t' testfunction mandatory/memset/test7 'int longer than string' testfunction mandatory/memset/test8 'int 0' testfunction mandatory/memset/test9 'string = NULL' printf "\n" # ft_putchar_fd printf "\e[1;36mTesting ft_putchar_fd \e[0;00m" testprintstdout mandatory/putchar_fd/test1 'a' testprintstdout mandatory/putchar_fd/test2 'z' testprintstdout mandatory/putchar_fd/test3 '1' testprintstdout mandatory/putchar_fd/test4 '0' testprintstdout mandatory/putchar_fd/test5 '4' testprintstdout mandatory/putchar_fd/test6 '8' testprintstdout mandatory/putchar_fd/test7 '7' testprintstdout mandatory/putchar_fd/test8 '10' testprintstdout mandatory/putchar_fd/test9 '13' testprintstdout mandatory/putchar_fd/test10 '24' testprintstdout mandatory/putchar_fd/test11 '\\n' testprintstdout mandatory/putchar_fd/test12 '\\0' testprintstdout mandatory/putchar_fd/test13 255 testprintstdout mandatory/putchar_fd/test14 -1 testprintstdout mandatory/putchar_fd/test15 'all chars' testprintstderr mandatory/putchar_fd/test16 'a' testprintstderr mandatory/putchar_fd/test17 '.' testprintstderr mandatory/putchar_fd/test18 '\\n' testprintstderr mandatory/putchar_fd/test19 '-1' testprintstderr mandatory/putchar_fd/test20 '128' printf "\n" # ft_putendl_fd printf "\e[1;36mTesting ft_putendl_fd \e[0;00m" testprintstdout mandatory/putendl_fd/test1 'a' testprintfd4 mandatory/putendl_fd/test2 'abc' testprintstdout mandatory/putendl_fd/test3 'all chars' testprintstdout mandatory/putendl_fd/test4 'huge fucking string' testprintstdout mandatory/putendl_fd/test5 '\\0hallo' testprintstdin mandatory/putendl_fd/test6 'br\\tan\\tdw\\teer' testprintstdout mandatory/putendl_fd/test7 '\\;' testprintstdout mandatory/putendl_fd/test8 'hallo\0' testprintfd4 mandatory/putendl_fd/test9 'hal\\0lo' testprintstdout mandatory/putendl_fd/test10 '\\n\\t\\0\\n' testprintstdout mandatory/putendl_fd/test11 '\\n\\n' testprintstdout mandatory/putendl_fd/test12 '\\0\\0\\0' testprintstdout mandatory/putendl_fd/test13 'NULL' testprintstderr mandatory/putendl_fd/test14 'all chars' testprintstderr mandatory/putendl_fd/test15 '\\0hallo' testprintstderr mandatory/putendl_fd/test16 'hall\\0o' testprintstderr mandatory/putendl_fd/test17 '\\n' testprintstderr mandatory/putendl_fd/test18 '\\n\\t\\0\\n' testprintstderr mandatory/putendl_fd/test19 '\\0\\0\\0' testprintstderr mandatory/putendl_fd/test20 'NULL' printf "\n" # ft_putnbr_fd printf "\e[1;36mTesting ft_putnbr_fd \e[0;00m" testprintstdout mandatory/putnbr_fd/test1 '12345' testprintstdout mandatory/putnbr_fd/test2 'min int' testprintstdout mandatory/putnbr_fd/test3 'max int' testprintstdout mandatory/putnbr_fd/test4 '0' testprintstdout mandatory/putnbr_fd/test5 'Max int + 1' testprintstdout mandatory/putnbr_fd/test6 'min int - 1' testprintstdout mandatory/putnbr_fd/test7 'numbers 1 - 10.000' testprintstdout mandatory/putnbr_fd/test8 'numbers 100.000 to 110.000' testprintstdout mandatory/putnbr_fd/test9 'numbers 500.000 to 520.000' testprintstdout mandatory/putnbr_fd/test10 'numbers 1M to 1.01M' testprintstderr mandatory/putnbr_fd/test11 '12345' testprintstderr mandatory/putnbr_fd/test12 'min int' testprintstderr mandatory/putnbr_fd/test13 'max int' testprintstderr mandatory/putnbr_fd/test14 '0' testprintstderr mandatory/putnbr_fd/test15 'max int + 1' testprintstderr mandatory/putnbr_fd/test16 'min int -1' testprintstderr mandatory/putnbr_fd/test17 'numbers 70.000 - 80.000' testprintstderr mandatory/putnbr_fd/test19 'numbers 200.000 to 210.000' testprintstderr mandatory/putnbr_fd/test18 'numbers 700.000 to 720.000' testprintstderr mandatory/putnbr_fd/test20 'numbers 2M to 2.01M' printf "\n" # ft_putstr_fd printf "\e[1;36mTesting ft_putstr_fd \e[0;00m" testprintstdout mandatory/putstr_fd/test1 'a' testprintfd4 mandatory/putstr_fd/test2 'abc' testprintstdout mandatory/putstr_fd/test3 'all chars' testprintstdout mandatory/putstr_fd/test4 'huge fucking string' testprintstdout mandatory/putstr_fd/test5 '\\0hallo' testprintstdin mandatory/putstr_fd/test6 'br\\tan\\tdw\\teer' testprintstdout mandatory/putstr_fd/test7 '\\;' testprintstdout mandatory/putstr_fd/test8 'hallo\\0' testprintfd4 mandatory/putstr_fd/test9 'hal\\0lo' testprintstdout mandatory/putstr_fd/test10 '\\n\\t\\0\\n' testprintstdout mandatory/putstr_fd/test11 '\\n\\n' testprintstdout mandatory/putstr_fd/test12 '\\0\\0\\0' testprintstdout mandatory/putstr_fd/test13 'NULL' testprintstderr mandatory/putstr_fd/test14 'all chars' testprintstderr mandatory/putstr_fd/test15 '\\0hallo' testprintstderr mandatory/putstr_fd/test16 'hall\\0o' testprintstderr mandatory/putstr_fd/test17 '\\n' testprintstderr mandatory/putstr_fd/test18 '\\n\\t\\0\\n' testprintstderr mandatory/putstr_fd/test19 '\\0\\0\\0' testprintstderr mandatory/putstr_fd/test20 'NULL' printf "\n" # ft_split printf "\e[1;36mTesting ft_split \e[0;00m" testfunction mandatory/split/test1 'Does not work with Basic Input' testfunction mandatory/split/test2 'Does not work without delimiter in string' testfunction mandatory/split/test3 'Does not work with \\0 character in string' testfunction mandatory/split/test4 'Does not work with \\n character in string' testfunction mandatory/split/test5 'Does not work with delimiter at end and begin' testfunction mandatory/split/test6 'Does not work with tabs' testfunction mandatory/split/test7 'Does not place \\0 at end of splitted strings' testfunction mandatory/split/test8 'Does not work with \\0 as delimiter' testfunction mandatory/split/test9 'Does not place NULL at end of array' testfunction mandatory/split/test10 'Does not work with delimiter at end' testfunction mandatory/split/test11 'Does not work with delimiter at begin' testfunction mandatory/split/test12 'Does not work with only delimiters in string' testfunction mandatory/split/test13 'non ascii delimiter' testfunction mandatory/split/test14 'string = NULL' printf "\n" # ft_strchr printf "\e[1;36mTesting ft_strchr \e[0;00m" testfunction mandatory/strchr/test1 'Match at third byte' testfunction mandatory/strchr/test2 'Match at first byte' testfunction mandatory/strchr/test3 'Match at last byte' testfunction mandatory/strchr/test4 'string == NULL' testfunction mandatory/strchr/test5 'make sure it stops at \\0' testfunction mandatory/strchr/test6 'char = \\0' testfunction mandatory/strchr/test7 'check if it places \\0 at end' printf "\n" # ft_strdup printf "\e[1;36mTesting ft_strdup \e[0;00m" testfunction mandatory/strdup/test1 'basic test' testfunction mandatory/strdup/test2 'You need to stop at \\0' testfunction mandatory/strdup/test3 'Test with \\t' testfunction mandatory/strdup/test4 'Test with \\n' testfunction mandatory/strdup/test5 'You need to terminate string with \\0' testfunction mandatory/strdup/test6 'str = "\\0\\0"' testfunction mandatory/strdup/test7 'str = NULL' printf "\n" # ft_strjoin printf "\e[1;36mTesting ft_strjoin \e[0;00m" testfunction mandatory/strjoin/test1 'Basic test' testfunction mandatory/strjoin/test2 'check /0 at end' testfunction mandatory/strjoin/test3 'test with \\n' testfunction mandatory/strjoin/test4 'test with \\t' testfunction mandatory/strjoin/test5 'string 1 is \\0\\0' testfunction mandatory/strjoin/test6 'string 2 is \\0\\0' testfunction mandatory/strjoin/test7 'Both strings are \\0\\0' testfunction mandatory/strjoin/test8 'String 1 is NULL' testfunction mandatory/strjoin/test9 'String 2 is NULL' testfunction mandatory/strjoin/test10 'Both strings are NULL' printf "\n" # ft_strlcat printf "\e[1;36mTesting ft_strlcat \e[0;00m" testfunction mandatory/strlcat/test1 'Basic test' testfunction mandatory/strlcat/test2 'Return values' testfunction mandatory/strlcat/test3 'check \\0 at end' testfunction mandatory/strlcat/test4 'Check return value if not writing whole src' testfunction mandatory/strlcat/test5 'half src' testfunction mandatory/strlcat/test6 'string 1 is \\0\\0' testfunction mandatory/strlcat/test7 'string 2 is \\0\\0' testfunction mandatory/strlcat/test8 'Both strings are \\0\\0' testfunction mandatory/strlcat/test9 'String 1 is NULL' testfunction mandatory/strlcat/test10 'String 2 is NULL' testfunction mandatory/strlcat/test11 'Both strings are NULL' printf "\n" # ft_strlcpy printf "\e[1;36mTesting ft_strlcpy \e[0;00m" testfunction mandatory/strlcpy/test1 'Simple writing test' testfunction mandatory/strlcpy/test2 'You write too little' testfunction mandatory/strlcpy/test3 'You write too much' testfunction mandatory/strlcpy/test4 'Return values write more than src' testfunction mandatory/strlcpy/test5 'Return values write less than src' testfunction mandatory/strlcpy/test6 'length longer than src' testfunction mandatory/strlcpy/test7 'lenght longer than dst' testfunction mandatory/strlcpy/test8 'lenght 0' testfunction mandatory/strlcpy/test9 'stop at \\0' testfunction mandatory/strlcpy/test10 'src = \\0\\0' testfunction mandatory/strlcpy/test11 'dst = \\0\\0' testfunction mandatory/strlcpy/test12 'src NULL' testfunction mandatory/strlcpy/test13 'dst NULL' testfunction mandatory/strlcpy/test14 'src and dst NULL' printf "\n" # ft_strlen printf "\e[1;36mTesting ft_strlen \e[0;00m" testfunction mandatory/strlen/test1 'Basic test' testfunction mandatory/strlen/test2 'Length 1' testfunction mandatory/strlen/test3 'Length 50' testfunction mandatory/strlen/test4 '\\n' testfunction mandatory/strlen/test5 '\\t' testfunction mandatory/strlen/test6 'making sure it stops at \\0' testfunction mandatory/strlen/test7 'str = \\0' testfunction mandatory/strlen/test8 'str = NULL' printf "\n" # ft_strmapi printf "\e[1;36mTesting ft_strmapi \e[0;00m" testfunction mandatory/strmapi/test1 'basic test' testfunction mandatory/strmapi/test2 'basic test with toupper' testfunction mandatory/strmapi/test3 'basic test with tolower' testfunction mandatory/strmapi/test4 'basic test with isdigit' testfunction mandatory/strmapi/test5 'Function = NULL' testfunction mandatory/strmapi/test6 'string = NULL' printf "\n" # ft_strncmp printf "\e[1;36mTesting ft_strncmp \e[0;00m" testfunction mandatory/strncmp/test1 'basic test' testfunction mandatory/strncmp/test2 'diff at first char' testfunction mandatory/strncmp/test3 'comparing too much' testfunction mandatory/strncmp/test4 'comparing too little' testfunction mandatory/strncmp/test5 'stop at \\0 str1' testfunction mandatory/strncmp/test6 'stop at \\0 str2' testfunction mandatory/strncmp/test7 'checking that p2 is subtracted from p1' testfunction mandatory/strncmp/test8 'length is 0' testfunction mandatory/strncmp/test9 'string 1 is \\0\\0' testfunction mandatory/strncmp/test10 'string 2 is \\0\\0' testfunction mandatory/strncmp/test11 'Both strings are \\0\\0' testfunction mandatory/strncmp/test12 'String 1 is NULL' testfunction mandatory/strncmp/test13 'String 2 is NULL' testfunction mandatory/strncmp/test14 'Both strings are NULL' printf "\n" # ft_strnstr printf "\e[1;36mTesting ft_strnstr \e[0;00m" testfunction mandatory/strnstr/test1 'basic test' testfunction mandatory/strnstr/test2 'looking too far' testfunction mandatory/strnstr/test3 'not looking far enough' testfunction mandatory/strnstr/test4 'str not in str' testfunction mandatory/strnstr/test5 'str at end' testfunction mandatory/strnstr/test6 'str at beginning' testfunction mandatory/strnstr/test7 'lenght reaches half of str' testfunction mandatory/strnstr/test8 '\\n in str' testfunction mandatory/strnstr/test9 '\\t in str' testfunction mandatory/strnstr/test10 '\\0 in str' testfunction mandatory/strnstr/test11 'string 1 is \\0\\0' testfunction mandatory/strnstr/test12 'string 2 is \\0\\0' testfunction mandatory/strnstr/test13 'Both strings are \\0\\0' testfunction mandatory/strnstr/test14 'String 1 is NULL' testfunction mandatory/strnstr/test15 'String 2 is NULL' testfunction mandatory/strnstr/test16 'Both strings are NULL' printf "\n" # ft_strrchr printf "\e[1;36mTesting ft_strrchr \e[0;00m" testfunction mandatory/strrchr/test1 'Match at second byte' testfunction mandatory/strrchr/test2 'Match at first byte' testfunction mandatory/strrchr/test3 'Match at last byte' testfunction mandatory/strrchr/test4 'reverse test' testfunction mandatory/strrchr/test5 'string == NULL' testfunction mandatory/strrchr/test6 'make sure it stops at \\0' testfunction mandatory/strrchr/test7 'char = \\0' testfunction mandatory/strrchr/test8 'check if it places \\0 at end' printf "\n" # ft_strtrim printf "\e[1;36mTesting ft_strtrim \e[0;00m" testfunction mandatory/strtrim/test1 'set at the very end' testfunction mandatory/strtrim/test2 'set in begin' testfunction mandatory/strtrim/test3 'set at begin and end' testfunction mandatory/strtrim/test4 'space before set in begin' testfunction mandatory/strtrim/test5 'space after set at the very end' testfunction mandatory/strtrim/test6 'set at begin and end' testfunction mandatory/strtrim/test7 'wrong char in middle of set end' testfunction mandatory/strtrim/test8 'wrong char in middle of set begin' testfunction mandatory/strtrim/test9 'set not in string' testfunction mandatory/strtrim/test10 'test with \\n' testfunction mandatory/strtrim/test11 'test with \\t' testfunction mandatory/strtrim/test12 'set = \\0\\0' testfunction mandatory/strtrim/test13 'str = \\0\\0' testfunction mandatory/strtrim/test14 'set & str = \\0\\0' testfunction mandatory/strtrim/test15 'set = NULL' testfunction mandatory/strtrim/test16 'str = NULL' testfunction mandatory/strtrim/test17 'set & str = NULL' printf "\n" # ft_substr printf "\e[1;36mTesting ft_substr \e[0;00m" testfunction mandatory/substr/test1 'count start too little' testfunction mandatory/substr/test2 'count start too far' testfunction mandatory/substr/test3 'copy too little' testfunction mandatory/substr/test4 'copy too much' testfunction mandatory/substr/test5 'start past strlen' testfunction mandatory/substr/test6 'len bigger than strlen' testfunction mandatory/substr/test7 'start 0' testfunction mandatory/substr/test8 'start 1' testfunction mandatory/substr/test9 'len 0' testfunction mandatory/substr/test10 'len 1' testfunction mandatory/substr/test11 'string = \\0' testfunction mandatory/substr/test12 'string = NULL' printf "\n" # ft_tolower printf "\e[1;36mTesting ft_tolower \e[0;00m" testfunction mandatory/tolower/test1 'A' testfunction mandatory/tolower/test2 'a' testfunction mandatory/tolower/test3 'N' testfunction mandatory/tolower/test4 'n' testfunction mandatory/tolower/test5 'Z' testfunction mandatory/tolower/test6 'z' testfunction mandatory/tolower/test7 '1' testfunction mandatory/tolower/test8 '9' testfunction mandatory/tolower/test9 '@' testfunction mandatory/tolower/test10 '[' testfunction mandatory/tolower/test11 '{' testfunction mandatory/tolower/test12 '`' printf "\n" # ft_toupper printf "\e[1;36mTesting ft_toupper \e[0;00m" testfunction mandatory/toupper/test1 'A' testfunction mandatory/toupper/test2 'a' testfunction mandatory/toupper/test3 'N' testfunction mandatory/toupper/test4 'n' testfunction mandatory/toupper/test5 'Z' testfunction mandatory/toupper/test6 'z' testfunction mandatory/toupper/test7 '1' testfunction mandatory/toupper/test8 '9' testfunction mandatory/toupper/test9 '@' testfunction mandatory/toupper/test10 '[' testfunction mandatory/toupper/test11 '{' testfunction mandatory/toupper/test12 '`' printf "\n" # Bonus Rule Check printf "\e[1;36mTesting Makefile Rule bonus \e[0;00m" make fclean > /dev/null make bonus >/dev/null 2>&1 if [ $? -eq 2 ] then printf "\e[1;31mNo bonus? I am a little dissapointed...\e[0;00m\n" if [ $FAULTS -eq 0 ] then printf "\e[1;35mBut we got no errors, Congratulations\e[0;00m\n" make fclean > /dev/null rm -rf tests/tmp exit 0 else printf "\e[1;31mAnd we got $FAULTS errors\nSo that's a bummer\e[0;00m\n" make fclean > /dev/null rm -rf tests/tmp exit 1 fi fi printf "\e[1;32mOK\e[0;00m" printf "\n" # Bonus Relink Check printf "\e[1;36mTesting Makefile Relink bonus \e[0;00m" relinkcheck bonus printf "\n" # ft_lstnew printf "\e[1;36mTesting ft_lstnew \e[0;00m" testfunction bonus/lstnew/test1 'String as content' testfunction bonus/lstnew/test2 'int as content' testfunction bonus/lstnew/test3 'NULL content' printf "\n" # ft_lstadd_front printf "\e[1;36mTesting ft_lstadd_front \e[0;00m" testfunction bonus/lstadd_front/test1 'check if adds to front' testfunction bonus/lstadd_front/test2 'add 2, check both positions' testfunction bonus/lstadd_front/test3 'list = next before add' testfunction bonus/lstadd_front/test4 '*lst = NULL' testfunction bonus/lstadd_front/test5 'lst = NULL' printf "\n" # ft_lstsize printf "\e[1;36mTesting ft_lstsize \e[0;00m" testfunction bonus/lstsize/test1 'give size 2' testfunction bonus/lstsize/test2 'give size 3' testfunction bonus/lstsize/test3 'give second count - 1' #testfunction bonus/lstsize/test4 'del middle' testfunction bonus/lstsize/test5 'lst = NULL' printf "\n" # ft_lstlast printf "\e[1;36mTesting ft_lstlast \e[0;00m" testfunction bonus/lstlast/test1 'give 2' #testfunction bonus/lstlast/test2 'add empty in between' testfunction bonus/lstlast/test3 'give 1' #testfunction bonus/lstlast/test4 'give 0' #testfunction bonus/lstlast/test5 'lst = NULL' printf "\n" # ft_lstadd_back printf "\e[1;36mTesting ft_lstadd_back \e[0;00m" testfunction bonus/lstadd_back/test1 'check if adds back' testfunction bonus/lstadd_back/test2 'add 2 check positions' #testfunction bonus/lstadd_back/test3 'delete second then add third' testfunction bonus/lstadd_back/test4 '*lst = NULL' #testfunction bonus/lstadd_back/test5 'lst = null' printf "\n" # ft_lstdelone printf "\e[1;36mTesting ft_lstdelone \e[0;00m" testfunction bonus/lstdelone/test1 'del at end check' testfunction bonus/lstdelone/test2 'del at front check' testfunction bonus/lstdelone/test3 'del in middle check' testfunction bonus/lstdelone/test4 'del = NULL' testfunction bonus/lstdelone/test5 'del with &free' printf "\n" # ft_lstclear printf "\e[1;36mTesting ft_lstclear \e[0;00m" testfunction bonus/lstclear/test1 'clear 1' testfunction bonus/lstclear/test2 'clear 2' #testfunction bonus/lstclear/test3 'clear with empty in between' testfunction bonus/lstclear/test4 'clear with &free' testfunction bonus/lstclear/test5 'lst = NULL' printf "\n" # ft_lstiter printf "\e[1;36mTesting ft_lstiter \e[0;00m" testfunction bonus/lstiter/test1 'iterate 1' testfunction bonus/lstiter/test2 'iterate 2' #testfunction bonus/lstiter/test3 'iterate with empty in between' testfunction bonus/lstiter/test4 'func = NULL' testfunction bonus/lstiter/test5 'lst = NULL' printf "\n" # ft_lstmap printf "\e[1;36mTesting ft_lstmap \e[0;00m" testfunction bonus/lstmap/test1 'map and check contents' testfunction bonus/lstmap/test2 'map 2' #testfunction bonus/lstmap/test3 'map with empty in between' testfunction bonus/lstmap/test4 'func = NULL' testfunction bonus/lstmap/test5 'lst = NULL' testfunction bonus/lstmap/test6 'del = NULL' printf "\n" # Conclusion if [ $FAULTS -eq 0 ] then printf "\e[1;35mwe got no errors, Congratulations\e[0;00m\n" else printf "\e[1;31mwe got $FAULTS errors\nSo that's a bummer\e[0;00m\n" make fclean > /dev/null rm -rf tests/tmp exit 1 fi make fclean > /dev/null rm -rf tests/tmp exit 0