Compare commits

...

4 commits

Author SHA1 Message Date
Imbus
2010faadd6 Woodpecker testing
All checks were successful
/ test (push) Successful in 6s
ci/woodpecker/push/test Pipeline was successful
2024-12-28 22:02:21 +01:00
Imbus
f7e946afa9 Formatting 2024-12-28 21:48:56 +01:00
Imbus
8c0322456d Ignore 2024-12-28 21:48:39 +01:00
Imbus
5a02d6537d Tests 2024-12-28 21:48:32 +01:00
5 changed files with 104 additions and 9 deletions

2
.gitignore vendored
View file

@ -5,3 +5,5 @@ docs
zig-out
zig-cache
.zig-cache
*.o
*.elf

20
.woodpecker/test.yaml Normal file
View 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

View file

@ -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

View file

@ -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
View 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");
}