last commit ?

This commit is contained in:
Jack Halford 2017-11-23 17:55:55 +01:00
parent cae367e0fc
commit b2873fd6f6
7 changed files with 231 additions and 50 deletions

View file

@ -39,26 +39,25 @@ OBJ_DIR = objs/
SRC_BASE = \ SRC_BASE = \
ft_bzero.s\ ft_bzero.s\
ft_strcat.s\
ft_isalpha.s\
ft_isdigit.s\
ft_isalnum.s\
ft_isascii.s\
ft_isprint.s\
ft_toupper.s\
ft_tolower.s\
ft_puts.s\
\
ft_strlen.s\
ft_memset.s\
ft_memcpy.s\
ft_strdup.s\
\
ft_cat.s\ ft_cat.s\
\ ft_isalnum.s\
ft_isalpha.s\
ft_isascii.s\
ft_isdigit.s\
ft_islower.s\ ft_islower.s\
ft_isprint.s\
ft_isupper.s\ ft_isupper.s\
ft_max.s\
ft_memcpy.s\
ft_memset.s\
ft_min.s\
ft_putchar.s\ ft_putchar.s\
ft_puts.s\
ft_strcat.s\
ft_strdup.s\
ft_strlen.s\
ft_tolower.s\
ft_toupper.s
SRCS = $(addprefix $(SRC_DIR), $(SRC_BASE)) SRCS = $(addprefix $(SRC_DIR), $(SRC_BASE))
OBJS = $(addprefix $(OBJ_DIR), $(SRC_BASE:.s=.o)) OBJS = $(addprefix $(OBJ_DIR), $(SRC_BASE:.s=.o))
@ -101,8 +100,9 @@ fclean : clean
re : fclean all re : fclean all
test: $(NAME) test.c
@gcc test.c -I $(INC_DIR) -L. -lfts -o test test: $(NAME) main.c
gcc -Wall -Wextra -Werror main.c libfts.a
@printf "\r\033[38;5;117m✓ MAKE test\033[0m\033[K\n" @printf "\r\033[38;5;117m✓ MAKE test\033[0m\033[K\n"
.PHONY : fclean clean re run-gdb .PHONY : fclean clean re run-gdb

View file

@ -19,6 +19,7 @@ int ft_isprint(int i);
int ft_toupper(int i); int ft_toupper(int i);
int ft_tolower(int i); int ft_tolower(int i);
int ft_puts(char *s); int ft_puts(char *s);
/* /*
** PART_2 ** PART_2
*/ */
@ -26,14 +27,17 @@ int ft_strlen(char *s);
void *ft_memset(void *b, int c, size_t len); void *ft_memset(void *b, int c, size_t len);
void *ft_memcpy(void *dest, const void *src, size_t n); void *ft_memcpy(void *dest, const void *src, size_t n);
char *ft_strdup(const char *s1); char *ft_strdup(const char *s1);
/* /*
** PART_3 ** PART_3
*/ */
void ft_cat(int fd); void ft_cat(int fd);
/* /*
** PART_BONUS ** PART_BONUS
*/ */
int ft_isupper(int i); int ft_isupper(int i);
int ft_islower(int i); int ft_islower(int i);
int ft_putchar(int i); int ft_putchar(int i);
int ft_min(int a, int b);
int ft_max(int a, int b);

View file

@ -1,5 +1,6 @@
#include "libft.h" #include "libft.h"
#include <ctype.h> #include <ctype.h>
#include <math.h>
int ft_putstr(const char *str) int ft_putstr(const char *str)
{ {
@ -219,7 +220,7 @@ int test_puts()
} }
#endif #endif
#ifdef __APPLE__ #ifdef __APPLE__
// puts(NULL) segfaults on linux // puts(NULL) segfaults on linux because the compiler lets you shoot yourself
printf("Original:|"); ret = puts(NULL);printf("|\n"); printf("Original:|"); ret = puts(NULL);printf("|\n");
printf("Notre :|"); ret_cmp = ft_puts(NULL);printf("|\n"); printf("Notre :|"); ret_cmp = ft_puts(NULL);printf("|\n");
if (ret != ret_cmp) if (ret != ret_cmp)
@ -419,18 +420,15 @@ int test_strdup()
return (0); return (0);
} }
int test_cat(char ** argv) int test_cat(char **av)
{ {
ft_putstr(__func__); ft_putstr(":\n"); ft_putstr(__func__); ft_putstr(":\n");
/* ft_putstr("Wait for a user input:\n"); */ (void)av;
/* ft_cat(0); */ ft_cat(0);
ft_cat(open(__FILE__, O_RDONLY));
/* ft_putstr("\ntest.c:\n"); */ ft_cat(open(av[0], O_RDONLY));
/* ft_cat(open(__FILE__, O_RDONLY)); */ ft_cat(-42);
/* ft_putstr("\ntest binary:\n"); */
/* ft_cat(open("test", O_RDONLY)); */
return (0); return (0);
} }
@ -479,43 +477,193 @@ int test_putchar()
return(1); return(1);
} }
} }
ft_putstr(":\n");
return (0); return (0);
} }
int test_max()
{
ft_putstr(__func__); ft_putstr(":\n");
unsigned int a, b, ret, ret_cmp;
int ans = 0;
a = 5;
b = 6;
if ((ret = ft_max(a,b)) != (ret_cmp = fmax(a,b)))
{
dprintf(2, "FAILED max(%d, %d) => %d vs %d\n",a,b,ret,ret_cmp);
++ans;
}
a = 6;
b = 5;
if ((ret = ft_max(a,b)) != (ret_cmp = fmax(a,b)))
{
dprintf(2, "FAILED max(%d, %d) => %d vs %d\n",a,b,ret,ret_cmp);
++ans;
}
a = -10;
b = -12;
if ((ret = ft_max(a,b)) != (ret_cmp = fmax(a,b)))
{
dprintf(2, "FAILED max(%d, %d) => %d vs %d\n",a,b,ret,ret_cmp);
++ans;
}
a = -12;
b = -10;
if ((ret = ft_max(a,b)) != (ret_cmp = fmax(a,b)))
{
dprintf(2, "FAILED max(%d, %d) => %d vs %d\n",a,b,ret,ret_cmp);
++ans;
}
a = -10;
b = 12;
if ((ret = ft_max(a,b)) != (ret_cmp = fmax(a,b)))
{
dprintf(2, "FAILED max(%d, %d) => %d vs %d\n",a,b,ret,ret_cmp);
++ans;
}
a = -12;
b = 10;
if ((ret = ft_max(a,b)) != (ret_cmp = fmax(a,b)))
{
dprintf(2, "FAILED max(%d, %d) => %d vs %d\n",a,b,ret,ret_cmp);
++ans;
}
a = 0;
b = 10;
if ((ret = ft_max(a,b)) != (ret_cmp = fmax(a,b)))
{
dprintf(2, "FAILED max(%d, %d) => %d vs %d\n",a,b,ret,ret_cmp);
++ans;
}
a = -12;
b = 0;
if ((ret = ft_max(a,b)) != (ret_cmp = fmax(a,b)))
{
dprintf(2, "FAILED max(%d, %d) => %d vs %d\n",a,b,ret,ret_cmp);
++ans;
}
a = -2147483648;
b = 2147483647;
if ((ret = ft_max(a,b)) != (ret_cmp = fmax(a,b)))
{
dprintf(2, "FAILED max(%d, %d) => %d vs %d\n",a,b,ret,ret_cmp);
++ans;
}
return (ans);
}
int test_min()
{
ft_putstr(__func__); ft_putstr(":\n");
unsigned int a, b, ret, ret_cmp;
int ans = 0;
a = 5;
b = 6;
if ((ret = ft_min(a,b)) != (ret_cmp = fmin(a,b)))
{
dprintf(2, "FAILED min(%d, %d) => %d vs %d\n",a,b,ret,ret_cmp);
++ans;
}
a = 6;
b = 5;
if ((ret = ft_min(a,b)) != (ret_cmp = fmin(a,b)))
{
dprintf(2, "FAILED min(%d, %d) => %d vs %d\n",a,b,ret,ret_cmp);
++ans;
}
a = -10;
b = -12;
if ((ret = ft_min(a,b)) != (ret_cmp = fmin(a,b)))
{
dprintf(2, "FAILED min(%d, %d) => %d vs %d\n",a,b,ret,ret_cmp);
++ans;
}
a = -12;
b = -10;
if ((ret = ft_min(a,b)) != (ret_cmp = fmin(a,b)))
{
dprintf(2, "FAILED min(%d, %d) => %d vs %d\n",a,b,ret,ret_cmp);
++ans;
}
a = -10;
b = 12;
if ((ret = ft_min(a,b)) != (ret_cmp = fmin(a,b)))
{
dprintf(2, "FAILED min(%d, %d) => %d vs %d\n",a,b,ret,ret_cmp);
++ans;
}
a = -12;
b = 10;
if ((ret = ft_min(a,b)) != (ret_cmp = fmin(a,b)))
{
dprintf(2, "FAILED min(%d, %d) => %d vs %d\n",a,b,ret,ret_cmp);
++ans;
}
a = 0;
b = 10;
if ((ret = ft_min(a,b)) != (ret_cmp = fmin(a,b)))
{
dprintf(2, "FAILED min(%d, %d) => %d vs %d\n",a,b,ret,ret_cmp);
++ans;
}
a = -12;
b = 0;
if ((ret = ft_min(a,b)) != (ret_cmp = fmin(a,b)))
{
dprintf(2, "FAILED min(%d, %d) => %d vs %d\n",a,b,ret,ret_cmp);
++ans;
}
a = -2147483648;
b = 2147483647;
if ((ret = ft_min(a,b)) != (ret_cmp = fmin(a,b)))
{
dprintf(2, "FAILED min(%d, %d) => %d vs %d\n",a,b,ret,ret_cmp);
++ans;
}
return (ans);
}
int main(int argc, char **argv) int main(int argc, char **argv)
{ {
(void)argc; (void)argc;
(void)argv;
setbuf(stdout, NULL); setbuf(stdout, NULL);
ft_putstr("\nPART 1:\n_______\n"); ft_putstr("\nPART 1:\n_______\n");
if (test_bzero() || if (
test_isdigit() || test_bzero() ||
test_isalpha() ||
test_strcat() || test_strcat() ||
test_isascii() || test_isalpha() ||
test_isdigit() ||
test_isalnum() || test_isalnum() ||
test_isascii() ||
test_isprint() || test_isprint() ||
test_toupper() || test_toupper() ||
test_tolower() || test_tolower() ||
test_puts()) test_puts()
)
return (1); return (1);
ft_putstr("PART 2:\n_______\n"); ft_putstr("PART 2:\n_______\n");
if (test_strlen() || if (
test_strlen() ||
test_memset() || test_memset() ||
test_memcpy() || test_memcpy() ||
test_strdup()) test_strdup()
return (1); )
ft_putstr("\nPART BONUS:\n_______\n");
if (test_isupper() ||
test_islower() ||
test_isupper() ||
test_putchar())
return (1); return (1);
ft_putstr("\nPART 3:\n_______\n"); ft_putstr("\nPART 3:\n_______\n");
if (test_cat(argv)) if (test_cat(argv))
return (1); return (1);
ft_putstr("\nPART BONUS:\n_______\n");
if (
test_isupper() ||
test_islower() ||
test_putchar() ||
test_min() ||
test_max()
)
return (1);
puts("\033c\n\033[38;5;117mALL PASSED\n___________\n\033[0m"); puts("\033c\n\033[38;5;117mALL PASSED\n___________\n\033[0m");
return (0); return (0);
} }

View file

@ -8,14 +8,17 @@ section .bss
buf: resb BUFF_SIZE buf: resb BUFF_SIZE
section .text section .text
; void ft_cat(int fd)
_ft_cat: ; void ft_cat(int fd) _ft_cat:
ft_cat: ft_cat:
push rdi mov r8, rdi
cmp rdi, 0
jl end
lea rsi, [rel buf] lea rsi, [rel buf]
mov rdx, BUFF_SIZE mov rdx, BUFF_SIZE
mov rax, READ ; int read(int fd, void *buf, size_t count) mov rax, READ ; int read(int fd, void *buf, size_t count)
syscall syscall
jc end
cmp rax, 0 cmp rax, 0
jle end jle end
@ -23,11 +26,11 @@ ft_cat:
mov rdx, rax mov rdx, rax
mov rax, WRITE ; int write(int fd, const void *buf, size_t count) mov rax, WRITE ; int write(int fd, const void *buf, size_t count)
syscall syscall
jc end
cmp rax, 0 cmp rax, 0
jl end jl end
pop rdi mov rdi, r8
jmp ft_cat jmp ft_cat
end: end:
pop rax
ret ret

13
libftasm/srcs/ft_max.s Normal file
View file

@ -0,0 +1,13 @@
global _ft_max
global ft_max
section .text
; int ft_max(int a, int b)
_ft_max:
ft_max:
mov rax, rdi
cmp rdi, rsi
jge end
mov rax, rsi
end:
ret

13
libftasm/srcs/ft_min.s Normal file
View file

@ -0,0 +1,13 @@
global _ft_min
global ft_min
section .text
; int ft_min(int a, int b)
_ft_min:
ft_min:
mov rax, rdi
cmp rdi, rsi
jl end
mov rax, rsi
end:
ret

View file

@ -6,7 +6,7 @@ ft_strlen:
mov rax, 0 mov rax, 0
cmp rdi, 0 cmp rdi, 0
je end je end
t
mov rcx, -1 mov rcx, -1
cld cld
repnz scasb repnz scasb