last commit ?
This commit is contained in:
parent
cae367e0fc
commit
b2873fd6f6
7 changed files with 231 additions and 50 deletions
|
|
@ -39,26 +39,25 @@ OBJ_DIR = objs/
|
|||
|
||||
SRC_BASE = \
|
||||
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_isalnum.s\
|
||||
ft_isalpha.s\
|
||||
ft_isascii.s\
|
||||
ft_isdigit.s\
|
||||
ft_islower.s\
|
||||
ft_isprint.s\
|
||||
ft_isupper.s\
|
||||
ft_max.s\
|
||||
ft_memcpy.s\
|
||||
ft_memset.s\
|
||||
ft_min.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))
|
||||
OBJS = $(addprefix $(OBJ_DIR), $(SRC_BASE:.s=.o))
|
||||
|
|
@ -101,8 +100,9 @@ fclean : clean
|
|||
|
||||
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"
|
||||
|
||||
.PHONY : fclean clean re run-gdb
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ int ft_isprint(int i);
|
|||
int ft_toupper(int i);
|
||||
int ft_tolower(int i);
|
||||
int ft_puts(char *s);
|
||||
|
||||
/*
|
||||
** PART_2
|
||||
*/
|
||||
|
|
@ -26,14 +27,17 @@ int ft_strlen(char *s);
|
|||
void *ft_memset(void *b, int c, size_t len);
|
||||
void *ft_memcpy(void *dest, const void *src, size_t n);
|
||||
char *ft_strdup(const char *s1);
|
||||
|
||||
/*
|
||||
** PART_3
|
||||
*/
|
||||
void ft_cat(int fd);
|
||||
|
||||
/*
|
||||
** PART_BONUS
|
||||
*/
|
||||
int ft_isupper(int i);
|
||||
int ft_islower(int i);
|
||||
int ft_putchar(int i);
|
||||
|
||||
int ft_min(int a, int b);
|
||||
int ft_max(int a, int b);
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
#include "libft.h"
|
||||
#include <ctype.h>
|
||||
#include <math.h>
|
||||
|
||||
int ft_putstr(const char *str)
|
||||
{
|
||||
|
|
@ -219,7 +220,7 @@ int test_puts()
|
|||
}
|
||||
#endif
|
||||
#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("Notre :|"); ret_cmp = ft_puts(NULL);printf("|\n");
|
||||
if (ret != ret_cmp)
|
||||
|
|
@ -419,18 +420,15 @@ int test_strdup()
|
|||
return (0);
|
||||
}
|
||||
|
||||
int test_cat(char ** argv)
|
||||
int test_cat(char **av)
|
||||
{
|
||||
ft_putstr(__func__); ft_putstr(":\n");
|
||||
|
||||
/* ft_putstr("Wait for a user input:\n"); */
|
||||
/* ft_cat(0); */
|
||||
|
||||
/* ft_putstr("\ntest.c:\n"); */
|
||||
/* ft_cat(open(__FILE__, O_RDONLY)); */
|
||||
|
||||
/* ft_putstr("\ntest binary:\n"); */
|
||||
/* ft_cat(open("test", O_RDONLY)); */
|
||||
(void)av;
|
||||
ft_cat(0);
|
||||
ft_cat(open(__FILE__, O_RDONLY));
|
||||
ft_cat(open(av[0], O_RDONLY));
|
||||
ft_cat(-42);
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
|
@ -479,43 +477,193 @@ int test_putchar()
|
|||
return(1);
|
||||
}
|
||||
}
|
||||
|
||||
ft_putstr(":\n");
|
||||
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)
|
||||
{
|
||||
(void)argc;
|
||||
(void)argv;
|
||||
setbuf(stdout, NULL);
|
||||
ft_putstr("\nPART 1:\n_______\n");
|
||||
if (test_bzero() ||
|
||||
test_isdigit() ||
|
||||
test_isalpha() ||
|
||||
if (
|
||||
test_bzero() ||
|
||||
test_strcat() ||
|
||||
test_isascii() ||
|
||||
test_isalpha() ||
|
||||
test_isdigit() ||
|
||||
test_isalnum() ||
|
||||
test_isascii() ||
|
||||
test_isprint() ||
|
||||
test_toupper() ||
|
||||
test_tolower() ||
|
||||
test_puts())
|
||||
test_puts()
|
||||
)
|
||||
return (1);
|
||||
ft_putstr("PART 2:\n_______\n");
|
||||
if (test_strlen() ||
|
||||
if (
|
||||
test_strlen() ||
|
||||
test_memset() ||
|
||||
test_memcpy() ||
|
||||
test_strdup())
|
||||
return (1);
|
||||
ft_putstr("\nPART BONUS:\n_______\n");
|
||||
if (test_isupper() ||
|
||||
test_islower() ||
|
||||
test_isupper() ||
|
||||
test_putchar())
|
||||
test_strdup()
|
||||
)
|
||||
return (1);
|
||||
ft_putstr("\nPART 3:\n_______\n");
|
||||
if (test_cat(argv))
|
||||
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");
|
||||
return (0);
|
||||
}
|
||||
|
|
@ -8,14 +8,17 @@ section .bss
|
|||
buf: resb BUFF_SIZE
|
||||
|
||||
section .text
|
||||
|
||||
_ft_cat: ; void ft_cat(int fd)
|
||||
; void ft_cat(int fd)
|
||||
_ft_cat:
|
||||
ft_cat:
|
||||
push rdi
|
||||
mov r8, rdi
|
||||
cmp rdi, 0
|
||||
jl end
|
||||
lea rsi, [rel buf]
|
||||
mov rdx, BUFF_SIZE
|
||||
mov rax, READ ; int read(int fd, void *buf, size_t count)
|
||||
syscall
|
||||
jc end
|
||||
cmp rax, 0
|
||||
jle end
|
||||
|
||||
|
|
@ -23,11 +26,11 @@ ft_cat:
|
|||
mov rdx, rax
|
||||
mov rax, WRITE ; int write(int fd, const void *buf, size_t count)
|
||||
syscall
|
||||
jc end
|
||||
cmp rax, 0
|
||||
jl end
|
||||
|
||||
pop rdi
|
||||
mov rdi, r8
|
||||
jmp ft_cat
|
||||
end:
|
||||
pop rax
|
||||
ret
|
||||
|
|
|
|||
13
libftasm/srcs/ft_max.s
Normal file
13
libftasm/srcs/ft_max.s
Normal 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
13
libftasm/srcs/ft_min.s
Normal 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
|
||||
|
|
@ -6,7 +6,7 @@ ft_strlen:
|
|||
mov rax, 0
|
||||
cmp rdi, 0
|
||||
je end
|
||||
t
|
||||
|
||||
mov rcx, -1
|
||||
cld
|
||||
repnz scasb
|
||||
|
|
|
|||
Loading…
Reference in a new issue