Compare commits
4 commits
6d885040f3
...
2010faadd6
Author | SHA1 | Date | |
---|---|---|---|
|
2010faadd6 | ||
|
f7e946afa9 | ||
|
8c0322456d | ||
|
5a02d6537d |
5 changed files with 104 additions and 9 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -5,3 +5,5 @@ docs
|
|||
zig-out
|
||||
zig-cache
|
||||
.zig-cache
|
||||
*.o
|
||||
*.elf
|
||||
|
|
20
.woodpecker/test.yaml
Normal file
20
.woodpecker/test.yaml
Normal file
|
@ -0,0 +1,20 @@
|
|||
when:
|
||||
- event: push
|
||||
branch: master
|
||||
|
||||
steps:
|
||||
- name: build
|
||||
image: debian
|
||||
commands:
|
||||
- apt update
|
||||
- apt install libcmocka-dev -y
|
||||
- apt install gcc -y
|
||||
- apt install make -y
|
||||
- make -j$(nproc) test/test.elf
|
||||
|
||||
- name: run-tests
|
||||
image: debian
|
||||
commands:
|
||||
- apt update
|
||||
- apt install libcmocka0 -y
|
||||
- ./test/test.elf
|
23
Makefile
23
Makefile
|
@ -1,10 +1,10 @@
|
|||
# Compiler
|
||||
CC := gcc
|
||||
|
||||
GITHASH := $(shell git rev-parse --short HEAD)
|
||||
CC ?= gcc
|
||||
|
||||
# GITHASH := $(shell git rev-parse --short HEAD | echo "")
|
||||
#
|
||||
# Compiler flags
|
||||
CFLAGS := -Wall -Wextra -Wpedantic -std=c2x
|
||||
CFLAGS := -Wall -Wextra -Wpedantic -Wunused -std=c99 -Isrc
|
||||
|
||||
# Directories
|
||||
SRC_DIR := src
|
||||
|
@ -25,6 +25,14 @@ TARGET := $(BUILD_DIR)/CTree
|
|||
# Default target
|
||||
all: $(TARGET)
|
||||
|
||||
test/test.o: test/test.c
|
||||
|
||||
test/test.elf: test/test.o src/tree.o
|
||||
$(CC) $(CFLAGS) $^ -o $@
|
||||
|
||||
test: test/test.elf
|
||||
./test/test.elf
|
||||
|
||||
# Rule to build the target executable
|
||||
$(TARGET): $(OBJS)
|
||||
$(CC) $(CFLAGS) $^ -o $@
|
||||
|
@ -41,18 +49,17 @@ run: $(TARGET)
|
|||
fmt:
|
||||
clang-format -i $(SRCS) $(HEADERS)
|
||||
|
||||
# Clean rule
|
||||
clean:
|
||||
rm -rf $(BUILD_DIR) $(TARGET)
|
||||
rm -rf $(BUILD_DIR) $(TARGET) test/test.o tester docs
|
||||
|
||||
docs:
|
||||
PROJECT_NUMBER=git-$(GITHASH) doxygen Doxyfile
|
||||
|
||||
cppcheck:
|
||||
cppcheck --enable=all --inconclusive --std=c11 --language=c --platform=unix64 --suppress=missingIncludeSystem $(SRCS)
|
||||
cppcheck --enable=all --inconclusive --std=c99 --language=c --platform=unix64 --suppress=missingIncludeSystem $(SRCS) test/test.c
|
||||
|
||||
valgrind: $(TARGET)
|
||||
valgrind --leak-check=full --show-leak-kinds=all --track-origins=yes ./$(TARGET)
|
||||
|
||||
# Mark rules as phony
|
||||
.PHONY: all run clean docs docs
|
||||
.PHONY: all run clean docs docs test
|
||||
|
|
|
@ -56,4 +56,4 @@ bool tree_contains(Node *node, int data);
|
|||
// Print the tree in order
|
||||
void tree_inorder(Node *node);
|
||||
|
||||
#endif // TREE_H
|
||||
#endif // TREE_H
|
||||
|
|
66
test/test.c
Normal file
66
test/test.c
Normal file
|
@ -0,0 +1,66 @@
|
|||
#include "tree.h"
|
||||
|
||||
// Function prototypes for helper functions
|
||||
void test_insert(Tree *tree);
|
||||
void test_remove(Tree *tree);
|
||||
void test_contains(Tree *tree);
|
||||
void test_inorder(Tree *tree);
|
||||
|
||||
int main() {
|
||||
Tree tree = { .root = NULL };
|
||||
|
||||
printf("\n-- Testing Insert --\n");
|
||||
test_insert(&tree);
|
||||
|
||||
printf("\n-- Testing Contains --\n");
|
||||
test_contains(&tree);
|
||||
|
||||
printf("\n-- Testing Inorder Traversal --\n");
|
||||
test_inorder(&tree);
|
||||
|
||||
printf("\n-- Testing Remove --\n");
|
||||
test_remove(&tree);
|
||||
|
||||
printf("\n-- Clearing Tree --\n");
|
||||
tree_clear(&tree);
|
||||
printf("Tree cleared.\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void test_insert(Tree *tree) {
|
||||
int values[] = {10, 5, 15, 3, 7, 12, 18};
|
||||
for (int i = 0; i < 7; i++) {
|
||||
printf("Inserting %d\n", values[i]);
|
||||
tree_insert(tree, values[i]);
|
||||
}
|
||||
}
|
||||
|
||||
void test_remove(Tree *tree) {
|
||||
int values_to_remove[] = {15, 5, 10};
|
||||
for (int i = 0; i < 3; i++) {
|
||||
printf("Removing %d\n", values_to_remove[i]);
|
||||
if (tree_remove(&tree->root, values_to_remove[i]) == 0) {
|
||||
printf("Successfully removed %d\n", values_to_remove[i]);
|
||||
} else {
|
||||
printf("Failed to remove %d\n", values_to_remove[i]);
|
||||
}
|
||||
}
|
||||
printf("Remaining elements (in-order traversal):\n");
|
||||
tree_inorder(tree->root);
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
void test_contains(Tree *tree) {
|
||||
int values_to_check[] = {7, 15, 20};
|
||||
for (int i = 0; i < 3; i++) {
|
||||
printf("Checking if tree contains %d: %s\n", values_to_check[i],
|
||||
tree_contains(tree->root, values_to_check[i]) ? "Yes" : "No");
|
||||
}
|
||||
}
|
||||
|
||||
void test_inorder(Tree *tree) {
|
||||
printf("Tree elements (in-order traversal):\n");
|
||||
tree_inorder(tree->root);
|
||||
printf("\n");
|
||||
}
|
Loading…
Reference in a new issue