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 = \
|
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
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
@ -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
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
|
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
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue