Compare commits
No commits in common. "f091b6c53adae22e88ed078e406efc74615cde9b" and "8331a437c01487a7f53fb43172e322ade6914e0e" have entirely different histories.
f091b6c53a
...
8331a437c0
35
Makefile
35
Makefile
|
@ -1,7 +1,5 @@
|
||||||
NAME = libasm
|
NAME = libasm
|
||||||
|
|
||||||
MAKE = make --no-print-directory
|
|
||||||
|
|
||||||
SRC = \
|
SRC = \
|
||||||
ft_strlen.s \
|
ft_strlen.s \
|
||||||
ft_strcpy.s \
|
ft_strcpy.s \
|
||||||
|
@ -9,37 +7,34 @@ SRC = \
|
||||||
ft_write.s \
|
ft_write.s \
|
||||||
ft_read.s \
|
ft_read.s \
|
||||||
ft_strdup.s \
|
ft_strdup.s \
|
||||||
|
ft_list_size.s \
|
||||||
SRCBONUS = \
|
ft_list_push_front.s \
|
||||||
ft_list_size_bonus.s \
|
ft_list_sort.s \
|
||||||
ft_list_push_front_bonus.s \
|
ft_list_remove_if.s \
|
||||||
ft_list_sort_bonus.s \
|
ft_atoi_base.s \
|
||||||
ft_list_remove_if_bonus.s \
|
|
||||||
ft_atoi_base_bonus.s \
|
|
||||||
|
|
||||||
OBJ = $(SRC:.s=.o)
|
OBJ = $(SRC:.s=.o)
|
||||||
OBJBONUS = $(SRCBONUS:.s=.o)
|
|
||||||
|
|
||||||
%.o:%.s
|
%.o:%.s
|
||||||
nasm -f elf64 $< -o $@
|
nasm -f elf64 $< -o $@
|
||||||
|
|
||||||
all: $(NAME)
|
all: $(NAME)
|
||||||
|
|
||||||
bonus: $(OBJ) $(OBJBONUS)
|
bonus: all
|
||||||
ar rcs libasm.a $(OBJ) $(OBJBONUS)
|
|
||||||
|
|
||||||
test_bonus: bonus
|
|
||||||
gcc -Wall -Werror -Wextra -pie main_bonus.c -L . -lasm -o test_bonus
|
|
||||||
|
|
||||||
$(NAME): $(OBJ)
|
$(NAME): $(OBJ)
|
||||||
ar rcs libasm.a $(OBJ)
|
ar rcs libasm.a $(OBJ)
|
||||||
|
|
||||||
clean:
|
test: $(NAME)
|
||||||
rm -fv $(OBJ) $(OBJBONUS)
|
gcc -Wall -Werror -Wextra -g ft_list_print.c main.c -L. -lasm -o libasm_unit_tests
|
||||||
|
|
||||||
fclean: clean
|
clean:
|
||||||
rm -fv libasm.a
|
rm $(OBJ)
|
||||||
|
|
||||||
|
fclean:
|
||||||
|
rm libasm.a
|
||||||
|
rm libasm_unit_tests
|
||||||
|
|
||||||
re: fclean all
|
re: fclean all
|
||||||
|
|
||||||
.PHONY: all bonus clean fclean re
|
.PHONY: all test
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
#include "libasm.h"
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
void ft_list_print(t_list *begin_list) {
|
||||||
|
while (begin_list) {
|
||||||
|
printf("%s", (char *)begin_list->data);
|
||||||
|
begin_list = begin_list->next;
|
||||||
|
}
|
||||||
|
}
|
19
ft_strcmp.s
19
ft_strcmp.s
|
@ -1,19 +1,20 @@
|
||||||
global ft_strcmp
|
global ft_strcmp
|
||||||
|
|
||||||
ft_strcmp:
|
ft_strcmp:
|
||||||
xor rcx, rcx
|
|
||||||
xor rax, rax
|
|
||||||
xor rdx, rdx
|
xor rdx, rdx
|
||||||
|
xor rax, rax
|
||||||
.loop:
|
.loop:
|
||||||
mov al, [rsi + rcx]
|
mov al, [rsi + rdx]
|
||||||
cmp byte [rdi + rcx], al
|
cmp byte [rdi + rdx], al
|
||||||
jne .done
|
jne .done
|
||||||
cmp byte [rdi + rcx], 0
|
cmp byte [rdi + rdx], 0
|
||||||
je .done
|
je .done
|
||||||
inc rcx
|
inc rdx
|
||||||
jmp .loop
|
jmp .loop
|
||||||
.done:
|
.done:
|
||||||
mov al, byte [rdi + rcx]
|
xor rax, rax
|
||||||
mov dl, byte [rsi + rcx]
|
xor rbx, rbx
|
||||||
sub rax, rdx
|
mov al, byte [rdi + rdx]
|
||||||
|
mov bl, byte [rsi + rdx]
|
||||||
|
sub rax, rbx
|
||||||
ret
|
ret
|
||||||
|
|
|
@ -0,0 +1,28 @@
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include "libasm.h"
|
||||||
|
|
||||||
|
void do_nothing(void *data) {
|
||||||
|
(void)data;
|
||||||
|
}
|
||||||
|
|
||||||
|
int ft_strcmp(const char *s1, const char *s2) {
|
||||||
|
printf("s1: %ss2: %s", s1, s2);
|
||||||
|
while (*s1 && *s2 && *s1 == *s2) {
|
||||||
|
s1++;
|
||||||
|
s2++;
|
||||||
|
}
|
||||||
|
return *s1 - *s2;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(void) {
|
||||||
|
t_list *l = NULL;
|
||||||
|
ft_list_push_front(&l, "Salut\n");
|
||||||
|
ft_list_print(l);
|
||||||
|
int test = ft_atoi_base("700chmod", "01234567");
|
||||||
|
printf("%d\n", test);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
41
main_bonus.c
41
main_bonus.c
|
@ -1,41 +0,0 @@
|
||||||
#include <assert.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include "libasm.h"
|
|
||||||
|
|
||||||
void test_ft_list(void) {
|
|
||||||
t_list *list = NULL;
|
|
||||||
|
|
||||||
assert(ft_list_size(list) == 0);
|
|
||||||
ft_list_push_front(&list, ft_strdup("abc"));
|
|
||||||
ft_list_push_front(&list, ft_strdup("cdb"));
|
|
||||||
ft_list_push_front(&list, ft_strdup("abc"));
|
|
||||||
ft_list_push_front(&list, ft_strdup("egh"));
|
|
||||||
ft_list_push_front(&list, ft_strdup("egb"));
|
|
||||||
ft_list_push_front(&list, ft_strdup("abc"));
|
|
||||||
assert(ft_list_size(list) == 6);
|
|
||||||
ft_list_push_front(&list, ft_strdup("dgb"));
|
|
||||||
ft_list_push_front(&list, ft_strdup("zzz"));
|
|
||||||
assert(ft_list_size(list) == 8);
|
|
||||||
ft_list_remove_if(&list, (void *)"abc", &ft_strcmp, &free);
|
|
||||||
assert(ft_list_size(list) == 5);
|
|
||||||
assert(ft_strcmp(list->data, "zzz") == 0);
|
|
||||||
ft_list_sort(&list, &ft_strcmp);
|
|
||||||
assert(ft_strcmp(list->data, "cdb") == 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
void test_ft_atoi_base(void) {
|
|
||||||
assert(ft_atoi_base("01", "01") == 1);
|
|
||||||
assert(ft_atoi_base("123chmod", "0123456789") == 123);
|
|
||||||
assert(ft_atoi_base("123", "0123456789") == 123);
|
|
||||||
assert(ft_atoi_base("+++++123", "0123456789") == 123);
|
|
||||||
assert(ft_atoi_base("+++++----123", "0123456789") == 123);
|
|
||||||
assert(ft_atoi_base("+-++++----123", "0123456789") == -123);
|
|
||||||
assert(ft_atoi_base("poneyvif", "poneyvif") == 342391);
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(void) {
|
|
||||||
test_ft_list();
|
|
||||||
test_ft_atoi_base();
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
BIN
test_bonus
BIN
test_bonus
Binary file not shown.
Loading…
Reference in New Issue