Skip to content
Snippets Groups Projects
Commit 42523a25 authored by orestis.malaspin's avatar orestis.malaspin
Browse files

Merge branch '3-add-makefile-with-structure' into 'main'

Resolve "add makefile with structure"

Closes #3

See merge request !3
parents c4e5b4ad a6cadd6d
No related branches found
No related tags found
1 merge request!3Resolve "add makefile with structure"
# Object files
*.o *.o
main *.exe
\ No newline at end of file
# Executables
main
Makefile 0 → 100644
CC:=gcc
CFLAGS:=-g -Wall -Wextra -pedantic -fsanitize=address
LDFLGS:=-fsanitize=address
NAME:=stack
$(NAME): main.o $(NAME).o
$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)
test: $(NAME)_test.o $(NAME).o
$(CC) $(CFLAGS) -o $@ $^
./test
$(NAME).o: $(NAME).h
$(NAME)_test.o: $(NAME).h
.PHONY: clean
clean:
rm -f *.o $(NAME) test
# stack # Stack
```
📦project
┣ 📜main.c
┣ 📜stack.c
┣ 📜stack.h
┣ 📜.gitignore
┣ 📜Makefile
┗ 📜README.md
```
main.c 0 → 100644
#include "stack.h"
#include <stdio.h>
#include <stdlib.h>
int main(void) {
return EXIT_SUCCESS;
}
#include "stack.h"
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include "stack.h"
#define DEFAULT_CAPACITY 4 #define DEFAULT_CAPACITY 4
void stack_init(stack *s) void stack_init(stack *s) {
{ s->top = -1;
s->top = -1;
s->capacity = DEFAULT_CAPACITY; s->capacity = DEFAULT_CAPACITY;
s->data = malloc(sizeof(int) * DEFAULT_CAPACITY); s->data = malloc(sizeof(int) * DEFAULT_CAPACITY);
} }
void stack_destroy(stack *s){ void stack_destroy(stack *s) {
free(s->data); free(s->data);
s->data = NULL; s->data = NULL;
s->capacity = -1; s->capacity = -1;
s->top = -1; s->top = -1;
} }
void stack_pop(stack *s, int *value){ void stack_pop(stack *s, int *value) {
if (stack_is_empty(*s)) { if (stack_is_empty(*s)) {
return; return;
} }
if (s->top == s->capacity/4){ if (s->top == s->capacity / 4) {
s->capacity /= 2; s->capacity /= 2;
s->data = realloc(s->data, sizeof(int)*s->capacity); s->data = realloc(s->data, sizeof(int) * s->capacity);
} }
*value = s->data[s->top]; *value = s->data[s->top];
s->top -= 1; s->top -= 1;
} }
void stack_peek(stack s, int *value){ void stack_peek(stack s, int *value) {
if (!stack_is_empty(s)) { if (!stack_is_empty(s)) {
*value = s.data[s.top]; *value = s.data[s.top];
} }
} }
void stack_print(const stack s) { void stack_print(const stack s) {
//TODO: replace if statement with following as soon as relevant function is implemented // TODO: replace if statement with following as soon as relevant function is
//if (!stack_is_empty()) { // implemented if (!stack_is_empty()) {
if (s.top >= 0) { if (s.top >= 0) {
printf(" TOP\n--------------------\n"); printf(" TOP\n--------------------\n");
for (int* spot = s.data + s.top; spot >= s.data; --spot) { for (int *spot = s.data + s.top; spot >= s.data; --spot) {
printf("%8d | %12d\n", spot - s.data, *spot); printf("%8ld | %12d\n", spot - s.data, *spot);
} }
printf("--------------------\n BOTTOM\n"); printf("--------------------\n BOTTOM\n");
} else { } else {
printf("STACK EMPTY\n"); printf("STACK EMPTY\n");
} }
} }
void stack_clone(stack s, stack *clone) { void stack_clone(stack s, stack *clone) {
clone->top = s.top; clone->top = s.top;
clone->capacity = s.capacity; clone->capacity = s.capacity;
clone->data = malloc(sizeof(int) * s.capacity); clone->data = malloc(sizeof(int) * s.capacity);
for (int i = 0; i <= s.top && i < s.capacity; i++) { for (int i = 0; i <= s.top && i < s.capacity; i++) {
clone->data[i] = s.data[i]; clone->data[i] = s.data[i];
} }
} }
int get_length(stack s) int get_length(stack s) {
{
return s.top + 1; return s.top + 1;
} }
...@@ -19,3 +19,4 @@ int get_length(stack s); ...@@ -19,3 +19,4 @@ int get_length(stack s);
void stack_print(const stack s); void stack_print(const stack s);
#endif #endif
#include "minunit.h" #include "minunit.h"
#include "stack.h" #include "stack.h"
#include <stdlib.h>
MU_TEST(stack_init_test) { MU_TEST(stack_init_test) {
// Arrange // Arrange
...@@ -20,8 +21,8 @@ MU_TEST_SUITE(stack_test_suite) { ...@@ -20,8 +21,8 @@ MU_TEST_SUITE(stack_test_suite) {
MU_RUN_TEST(stack_init_test); MU_RUN_TEST(stack_init_test);
} }
int main () { int main() {
MU_RUN_SUITE(stack_test_suite); MU_RUN_SUITE(stack_test_suite);
MU_REPORT(); MU_REPORT();
return MU_EXIT_CODE; return MU_EXIT_CODE;
} }
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment