Template
Compare commits
11
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
804294b96e | ||
|
|
8051686a37 | ||
|
|
39965a95c4 | ||
|
|
8b0fa4601a | ||
|
|
f59489779b | ||
|
|
31a76162ee | ||
|
|
b76ffa054a | ||
|
|
4cfe6d9c50 | ||
|
|
82c72eaf81 | ||
|
|
a027c070d2 | ||
|
|
94517bf236 |
No files matched your search
+8
-62
@@ -1,62 +1,8 @@
|
||||
# ---> C
|
||||
# Prerequisites
|
||||
*.d
|
||||
|
||||
# Object files
|
||||
*.o
|
||||
*.ko
|
||||
*.obj
|
||||
*.elf
|
||||
|
||||
# Linker output
|
||||
*.ilk
|
||||
*.map
|
||||
*.exp
|
||||
|
||||
# Precompiled Headers
|
||||
*.gch
|
||||
*.pch
|
||||
|
||||
# Libraries
|
||||
*.lib
|
||||
*.la
|
||||
*.lo
|
||||
|
||||
# Shared objects (inc. Windows DLLs)
|
||||
*.dll
|
||||
*.so
|
||||
*.so.*
|
||||
*.dylib
|
||||
|
||||
# Executables
|
||||
*.exe
|
||||
*.out
|
||||
*.app
|
||||
*.i*86
|
||||
*.x86_64
|
||||
*.hex
|
||||
Startcode/doble_initial
|
||||
Startcode/doble
|
||||
Startcode/unitTests
|
||||
|
||||
# Debug files
|
||||
*.dSYM/
|
||||
*.su
|
||||
*.idb
|
||||
*.pdb
|
||||
|
||||
# Kernel Module Compile Results
|
||||
*.mod*
|
||||
*.cmd
|
||||
.tmp_versions/
|
||||
modules.order
|
||||
Module.symvers
|
||||
Mkfile.old
|
||||
dkms.conf
|
||||
|
||||
# IDE folders
|
||||
.vscode/
|
||||
.idea/
|
||||
|
||||
# macOS
|
||||
.DS_Store
|
||||
doble_initial.exe
|
||||
highscores.txt
|
||||
runStackTest.exe
|
||||
stack.o
|
||||
runNumbersTest.exe
|
||||
numbers.o
|
||||
.vscode/launch.json
|
||||
.vscode/settings.json
|
||||
Binary file not shown.
@@ -1,26 +0,0 @@
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <time.h>
|
||||
#include <string.h>
|
||||
#include "numbers.h"
|
||||
#include "bintree.h"
|
||||
|
||||
//TODO: getDuplicate und createNumbers implementieren
|
||||
/* * * Erzeugen eines Arrays mit der vom Nutzer eingegebenen Anzahl an Zufallszahlen.
|
||||
* Sicherstellen, dass beim Befüllen keine Duplikate entstehen.
|
||||
* Duplizieren eines zufälligen Eintrags im Array.
|
||||
* in `getDuplicate()`: Sortieren des Arrays und Erkennen der doppelten Zahl durch Vergleich benachbarter Elemente. */
|
||||
|
||||
// Returns len random numbers between 1 and 2x len in random order which are all different, except for two entries.
|
||||
// Returns NULL on errors. Use your implementation of the binary search tree to check for possible duplicates while
|
||||
// creating random numbers.
|
||||
unsigned int *createNumbers(unsigned int len)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
// Returns only the only number in numbers which is present twice. Returns zero on errors.
|
||||
unsigned int getDuplicate(const unsigned int numbers[], unsigned int len)
|
||||
{
|
||||
|
||||
}
|
||||
@@ -1,33 +0,0 @@
|
||||
#include <stdlib.h>
|
||||
#include "stack.h"
|
||||
|
||||
//TODO: grundlegende Stackfunktionen implementieren:
|
||||
/* * `push`: legt ein Element oben auf den Stack,
|
||||
* `pop`: entfernt das oberste Element,
|
||||
* `top`: liefert das oberste Element zurück,
|
||||
* `clearStack`: gibt den gesamten Speicher frei. */
|
||||
|
||||
// Pushes data as pointer onto the stack.
|
||||
StackNode *push(StackNode *stack, void *data)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
// Deletes the top element of the stack (latest added element) and releases its memory. (Pointer to data has to be
|
||||
// freed by caller.)
|
||||
StackNode *pop(StackNode *stack)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
// Returns the data of the top element.
|
||||
void *top(StackNode *stack)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
// Clears stack and releases all memory.
|
||||
void clearStack(StackNode *stack)
|
||||
{
|
||||
|
||||
}
|
||||
@@ -2,16 +2,17 @@
|
||||
#include "stack.h"
|
||||
#include "bintree.h"
|
||||
|
||||
//TODO: binären Suchbaum implementieren
|
||||
// TODO: binären Suchbaum implementieren
|
||||
/* * `addToTree`: fügt ein neues Element in den Baum ein (rekursiv),
|
||||
* `clearTree`: gibt den gesamten Baum frei (rekursiv),
|
||||
* `treeSize`: zählt die Knoten im Baum (rekursiv),
|
||||
* `nextTreeData`: Traversierung mit Hilfe des zuvor implementierten Stacks. */
|
||||
* `clearTree`: gibt den gesamten Baum frei (rekursiv),
|
||||
* `treeSize`: zählt die Knoten im Baum (rekursiv),
|
||||
* `nextTreeData`: Traversierung mit Hilfe des zuvor implementierten Stacks. */
|
||||
|
||||
// Adds a copy of data's pointer destination to the tree using compareFct for ordering. Accepts duplicates
|
||||
// if isDuplicate is NULL, otherwise ignores duplicates and sets isDuplicate to 1 (or to 0 if a new entry is added).
|
||||
TreeNode *addToTree(TreeNode *root, const void *data, size_t dataSize, CompareFctType compareFct, int *isDuplicate)
|
||||
{
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -26,11 +27,36 @@ void *nextTreeData(TreeNode *root)
|
||||
// Releases all memory resources (including data copies).
|
||||
void clearTree(TreeNode *root)
|
||||
{
|
||||
|
||||
if (root == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (root->left != NULL)
|
||||
{
|
||||
clearTree(root->left);
|
||||
free(root->left);
|
||||
}
|
||||
else if (root->right != NULL)
|
||||
{
|
||||
clearTree(root->right);
|
||||
free(root->right);
|
||||
}
|
||||
root->data = NULL;
|
||||
}
|
||||
|
||||
// Returns the number of entries in the tree given by root.
|
||||
unsigned int treeSize(const TreeNode *root)
|
||||
{
|
||||
int counterL, counterR = 0;
|
||||
if (root->left != NULL)
|
||||
{
|
||||
counterL = treeSize(root->left) + 1;
|
||||
}
|
||||
else if (root->right != NULL)
|
||||
{
|
||||
counterR = treeSize(root->right) + 1;
|
||||
}
|
||||
|
||||
return counterL + counterR;
|
||||
}
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -1,49 +1,55 @@
|
||||
CC = gcc
|
||||
FLAGS = -g -Wall -lm
|
||||
|
||||
ifeq ($(OS),Windows_NT)
|
||||
include makefile_windows.variables
|
||||
else
|
||||
UNAME = $(shell uname)
|
||||
ifeq ($(UNAME),Linux)
|
||||
include makefile_linux.variables
|
||||
else
|
||||
include makefile_mac.variables
|
||||
endif
|
||||
endif
|
||||
|
||||
raylibfolder = ./raylib
|
||||
unityfolder = ./unity
|
||||
|
||||
# --------------------------
|
||||
# Initiales Programm bauen (zum ausprobieren)
|
||||
# --------------------------
|
||||
doble_initial:
|
||||
$(CC) -o doble_initial $(BINARIES)/libdoble_complete.a
|
||||
|
||||
# --------------------------
|
||||
# Selbst implementiertes Programm bauen
|
||||
# --------------------------
|
||||
program_obj_files = stack.o bintree.o numbers.o timer.o highscore.o
|
||||
|
||||
doble : main.o $(program_obj_files)
|
||||
$(CC) $(FLAGS) $^ -o doble
|
||||
|
||||
$(program_obj_files): %.o: %.c
|
||||
$(CC) -c $(FLAGS) $^ -o $@
|
||||
|
||||
# --------------------------
|
||||
# Unit Tests
|
||||
# --------------------------
|
||||
unitTests:
|
||||
echo "needs to be implemented"
|
||||
|
||||
# --------------------------
|
||||
# Clean
|
||||
# --------------------------
|
||||
clean:
|
||||
ifeq ($(OS),Windows_NT)
|
||||
del /f *.o doble
|
||||
else
|
||||
rm -f *.o doble
|
||||
CC = gcc
|
||||
FLAGS = -g -Wall -lm
|
||||
|
||||
ifeq ($(OS),Windows_NT)
|
||||
include makefile_windows.variables
|
||||
else
|
||||
UNAME = $(shell uname)
|
||||
ifeq ($(UNAME),Linux)
|
||||
include makefile_linux.variables
|
||||
else
|
||||
include makefile_mac.variables
|
||||
endif
|
||||
endif
|
||||
|
||||
raylibfolder = ./raylib
|
||||
unityfolder = ./unity
|
||||
|
||||
# --------------------------
|
||||
# Initiales Programm bauen (zum ausprobieren)
|
||||
# --------------------------
|
||||
doble_initial:
|
||||
$(CC) -o doble_initial $(BINARIES)/libdoble_complete.a
|
||||
|
||||
# --------------------------
|
||||
# Selbst implementiertes Programm bauen
|
||||
# --------------------------
|
||||
program_obj_files = stack.o bintree.o numbers.o timer.o highscore.o
|
||||
|
||||
doble : main.o $(program_obj_files)
|
||||
$(CC) $(FLAGS) $^ -o doble
|
||||
|
||||
$(program_obj_filesobj_files): %.o: %.c
|
||||
$(CC) -c $(FLAGS) $^ -o $@
|
||||
|
||||
# --------------------------
|
||||
# Unit Tests
|
||||
# --------------------------
|
||||
unitTests: stack.o test_stack.c $(unityfolder)/unity.c
|
||||
$(CC) $(FLAGS) -I$(unityfolder) -o runStackTest test_stack.c stack.o $(unityfolder)/unity.c
|
||||
|
||||
# --------------------------
|
||||
# numbers.c Tests
|
||||
# --------------------------
|
||||
numbersTests: numbers.o test_numbers.c $(unityfolder)/unity.c
|
||||
$(CC) $(FLAGS) -I$(unityfolder) -o runNumbersTest test_numbers.c numbers.o $(unityfolder)/unity.c
|
||||
|
||||
# --------------------------
|
||||
# Clean
|
||||
# --------------------------
|
||||
clean:
|
||||
ifeq ($(OS),Windows_NT)
|
||||
del /f *.o doble
|
||||
else
|
||||
rm -f *.o doble
|
||||
endif
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -0,0 +1,163 @@
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <time.h>
|
||||
#include <string.h>
|
||||
#include "numbers.h"
|
||||
#include "bintree.h"
|
||||
|
||||
// TODO: getDuplicate und createNumbers implementieren
|
||||
/* * * Erzeugen eines Arrays mit der vom Nutzer eingegebenen Anzahl an Zufallszahlen.
|
||||
* Sicherstellen, dass beim Befüllen keine Duplikate entstehen.
|
||||
* Duplizieren eines zufälligen Eintrags im Array.
|
||||
* in `getDuplicate()`: Sortieren des Arrays und Erkennen der doppelten Zahl durch Vergleich benachbarter Elemente. */
|
||||
|
||||
// Returns len random numbers between 1 and 2x len in random order which are all different, except for two entries.
|
||||
// Returns NULL on errors. Use your implementation of the binary search tree to check for possible duplicates while
|
||||
// creating random numbers.
|
||||
unsigned int checkArray(unsigned int *array, unsigned int len, unsigned int number)
|
||||
{
|
||||
int free = 1;
|
||||
|
||||
for (int i = 0; i < len; i++)
|
||||
{
|
||||
if (array[i] == number)
|
||||
{
|
||||
free = 0;
|
||||
}
|
||||
}
|
||||
|
||||
return free;
|
||||
}
|
||||
|
||||
unsigned int *createNumbers(unsigned int len)
|
||||
{
|
||||
srand(time(NULL));
|
||||
unsigned int *array = (unsigned int*)malloc(len * sizeof(unsigned int));
|
||||
int randomNr, counter;
|
||||
|
||||
if(array == NULL)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
for (int i = 0; i < len; i++)
|
||||
{
|
||||
counter = 0;
|
||||
do
|
||||
{
|
||||
if (counter == 9)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
randomNr = rand() % (2 * len + 1);
|
||||
counter++;
|
||||
} while (!checkArray(array, i, randomNr));
|
||||
|
||||
array[i] = randomNr;
|
||||
printf("%u ", array[i]);
|
||||
}
|
||||
|
||||
printf("\n");
|
||||
return array;
|
||||
}
|
||||
|
||||
void merge(unsigned int arr[], unsigned int left, unsigned int mid, unsigned int right)
|
||||
{
|
||||
unsigned int i, j, k;
|
||||
unsigned int n1 = mid - left + 1;
|
||||
unsigned int n2 = right - mid;
|
||||
|
||||
// Create temporary arrays
|
||||
unsigned int leftArr[n1], rightArr[n2];
|
||||
|
||||
// Copy data to temporary arrays
|
||||
for (i = 0; i < n1; i++)
|
||||
leftArr[i] = arr[left + i];
|
||||
for (j = 0; j < n2; j++)
|
||||
rightArr[j] = arr[mid + 1 + j];
|
||||
|
||||
// Merge the temporary arrays back into arr[left..right]
|
||||
i = 0;
|
||||
j = 0;
|
||||
k = left;
|
||||
while (i < n1 && j < n2)
|
||||
{
|
||||
if (leftArr[i] <= rightArr[j])
|
||||
{
|
||||
arr[k] = leftArr[i];
|
||||
i++;
|
||||
}
|
||||
else
|
||||
{
|
||||
arr[k] = rightArr[j];
|
||||
j++;
|
||||
}
|
||||
k++;
|
||||
}
|
||||
|
||||
// Copy the remaining elements of leftArr[], if any
|
||||
while (i < n1)
|
||||
{
|
||||
arr[k] = leftArr[i];
|
||||
i++;
|
||||
k++;
|
||||
}
|
||||
|
||||
// Copy the remaining elements of rightArr[], if any
|
||||
while (j < n2)
|
||||
{
|
||||
arr[k] = rightArr[j];
|
||||
j++;
|
||||
k++;
|
||||
}
|
||||
}
|
||||
|
||||
void mergeSort(unsigned int arr[], unsigned int left, unsigned int right)
|
||||
{
|
||||
if (left < right)
|
||||
{
|
||||
|
||||
// Calculate the midpoint
|
||||
unsigned int mid = left + (right - left) / 2;
|
||||
|
||||
// Sort first and second halves
|
||||
mergeSort(arr, left, mid);
|
||||
mergeSort(arr, mid + 1, right);
|
||||
|
||||
// Merge the sorted halves
|
||||
merge(arr, left, mid, right);
|
||||
}
|
||||
}
|
||||
|
||||
// Returns only the only number in numbers which is present twice. Returns zero on errors.
|
||||
unsigned int getDuplicate(const unsigned int numbers[], unsigned int len)
|
||||
{
|
||||
unsigned int temp[len];
|
||||
unsigned int duplicate = 0;
|
||||
|
||||
/*if(numbers == NULL || (sizeof(numbers) / sizeof(typeof(numbers)) != len))
|
||||
{
|
||||
return 0;S
|
||||
}*/
|
||||
|
||||
for (int i = 0; i < len; i++)
|
||||
{
|
||||
temp[i] = numbers[i];
|
||||
}
|
||||
|
||||
// Sorting arr using mergesort
|
||||
mergeSort(temp, 0, len - 1);
|
||||
|
||||
for (int i = 0; i < len - 1; i++)
|
||||
{
|
||||
duplicate = temp[i];
|
||||
if (duplicate == temp[i + 1])
|
||||
{
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return duplicate;
|
||||
}
|
||||
File renamed without changes.
Binary file not shown.
@@ -0,0 +1,91 @@
|
||||
#include <stdlib.h>
|
||||
#include "stack.h"
|
||||
|
||||
// TODO: grundlegende Stackfunktionen implementieren:
|
||||
/* * `push`: legt ein Element oben auf den Stack,
|
||||
* `pop`: entfernt das oberste Element,
|
||||
* `top`: liefert das oberste Element zurück,
|
||||
* `clearStack`: gibt den gesamten Speicher frei. */
|
||||
|
||||
// Pushes data as pointer onto the stack.
|
||||
StackNode *push(StackNode *stack, void *data)
|
||||
{
|
||||
StackNode *tempNode, *newNode;
|
||||
|
||||
newNode = malloc(sizeof(StackNode));
|
||||
newNode->value = *(int *)data;
|
||||
newNode->next = NULL;
|
||||
|
||||
if (stack == NULL)
|
||||
{
|
||||
stack = newNode;
|
||||
return stack;
|
||||
}
|
||||
|
||||
tempNode = stack;
|
||||
while (tempNode->next != NULL)
|
||||
{
|
||||
tempNode = tempNode->next;
|
||||
}
|
||||
tempNode->next = newNode;
|
||||
|
||||
return stack;
|
||||
}
|
||||
|
||||
// Deletes the top element of the stack (latest added element) and releases its memory. (Pointer to data has to be
|
||||
// freed by caller.)
|
||||
StackNode *pop(StackNode *stack)
|
||||
{
|
||||
StackNode *tempNode;
|
||||
|
||||
if (stack == NULL)
|
||||
{
|
||||
return stack;
|
||||
}
|
||||
|
||||
tempNode = stack;
|
||||
while (tempNode->next->next != NULL)
|
||||
{
|
||||
tempNode = tempNode->next;
|
||||
}
|
||||
free(tempNode->next);
|
||||
tempNode->next = NULL;
|
||||
|
||||
return stack;
|
||||
}
|
||||
|
||||
// Returns the data of the top element.
|
||||
void *top(StackNode *stack)
|
||||
{
|
||||
StackNode *tempNode;
|
||||
|
||||
if (stack == NULL)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
tempNode = stack;
|
||||
while (tempNode->next != NULL)
|
||||
{
|
||||
tempNode = tempNode->next;
|
||||
}
|
||||
|
||||
return &tempNode->value;
|
||||
}
|
||||
|
||||
// Clears stack and releases all memory.
|
||||
void clearStack(StackNode *stack)
|
||||
{
|
||||
StackNode *tempNode;
|
||||
|
||||
if (stack == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
tempNode = stack;
|
||||
while (tempNode != NULL)
|
||||
{
|
||||
tempNode = pop(tempNode);
|
||||
}
|
||||
}
|
||||
+29
-25
@@ -1,25 +1,29 @@
|
||||
#ifndef STACK_H
|
||||
#define STACK_H
|
||||
|
||||
/* A stack is a special type of queue which uses the LIFO (last in, first out) principle.
|
||||
This means that with each new element all other elements are pushed deeper into the stack.
|
||||
The latest element is taken from the stack. */
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
//TODO: passenden Datentyp als struct anlegen
|
||||
|
||||
// Pushes data as pointer onto the stack.
|
||||
StackNode *push(StackNode *stack, void *data);
|
||||
|
||||
// Deletes the top element of the stack (latest added element) and releases its memory. (Pointer to data has to be
|
||||
// freed by caller.)
|
||||
StackNode *pop(StackNode *stack);
|
||||
|
||||
// Returns the data of the top element.
|
||||
void *top(StackNode *stack);
|
||||
|
||||
// Clears stack and releases all memory.
|
||||
void clearStack(StackNode *stack);
|
||||
|
||||
#endif
|
||||
#ifndef STACK_H
|
||||
#define STACK_H
|
||||
|
||||
/* A stack is a special type of queue which uses the LIFO (last in, first out) principle.
|
||||
This means that with each new element all other elements are pushed deeper into the stack.
|
||||
The latest element is taken from the stack. */
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
//TODO: passenden Datentyp als struct anlegen
|
||||
typedef struct Node {
|
||||
int value;
|
||||
struct Node* next;
|
||||
} StackNode;
|
||||
|
||||
// Pushes data as pointer onto the stack.
|
||||
StackNode *push(StackNode *stack, void *data);
|
||||
|
||||
// Deletes the top element of the stack (latest added element) and releases its memory. (Pointer to data has to be
|
||||
// freed by caller.)
|
||||
StackNode *pop(StackNode *stack);
|
||||
|
||||
// Returns the data of the top element.
|
||||
void *top(StackNode *stack);
|
||||
|
||||
// Clears stack and releases all memory.
|
||||
void clearStack(StackNode *stack);
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,47 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include "numbers.h"
|
||||
#include "unity.h"
|
||||
|
||||
void createNumbersTest()
|
||||
{
|
||||
unsigned int *array;
|
||||
unsigned int len = 6;
|
||||
|
||||
array = createNumbers(len);
|
||||
for (int i = 0; i < len; i++)
|
||||
{
|
||||
printf("%u ", array[i]);
|
||||
}
|
||||
printf("\n");
|
||||
TEST_ASSERT_NOT_NULL(array);
|
||||
}
|
||||
|
||||
void duplicateTest()
|
||||
{
|
||||
unsigned int array[6] = {1, 4, 5, 2, 3, 1};
|
||||
unsigned int len = 6;
|
||||
|
||||
TEST_ASSERT_EQUAL_INT(1, getDuplicate(array, len));
|
||||
}
|
||||
|
||||
void setUp(void)
|
||||
{
|
||||
// Falls notwendig, kann hier Vorbereitungsarbeit gemacht werden
|
||||
}
|
||||
|
||||
void tearDown(void)
|
||||
{
|
||||
// Hier kann Bereinigungsarbeit nach jedem Test durchgeführt werden
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
UNITY_BEGIN();
|
||||
|
||||
printf("============================\nNumbers tests\n============================\n");
|
||||
RUN_TEST(createNumbersTest);
|
||||
RUN_TEST(duplicateTest);
|
||||
|
||||
return UNITY_END();
|
||||
}
|
||||
+112
@@ -0,0 +1,112 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include "stack.h"
|
||||
#include "unity.h"
|
||||
|
||||
void test_push(void)
|
||||
{
|
||||
StackNode *testNode;
|
||||
int data = 1;
|
||||
|
||||
// Test für leeren Stack
|
||||
testNode = push(NULL, &data);
|
||||
TEST_ASSERT_NOT_NULL(&testNode);
|
||||
TEST_ASSERT_NULL(testNode->next);
|
||||
TEST_ASSERT_EQUAL_INT(1, testNode->value);
|
||||
|
||||
data = 2;
|
||||
|
||||
// Test für nicht leeren Stack
|
||||
testNode = push(testNode, &data);
|
||||
TEST_ASSERT_NOT_NULL(&testNode);
|
||||
TEST_ASSERT_NOT_NULL(testNode->next);
|
||||
TEST_ASSERT_NULL(testNode->next->next);
|
||||
TEST_ASSERT_EQUAL_INT(1, testNode->value);
|
||||
TEST_ASSERT_EQUAL_INT(2, testNode->next->value);
|
||||
}
|
||||
|
||||
StackNode* setup(int value, StackNode* next) {
|
||||
StackNode* node = malloc(sizeof(StackNode)); // allocate memory on heap
|
||||
if (node == NULL) {
|
||||
perror("malloc failed");
|
||||
exit(EXIT_FAILURE); // or handle the error differently
|
||||
}
|
||||
node->value = value;
|
||||
node->next = next;
|
||||
return node;
|
||||
}
|
||||
|
||||
void test_pop(void)
|
||||
{
|
||||
StackNode* node2 = setup(3, NULL);
|
||||
StackNode* node1 = setup(2, node2);
|
||||
StackNode* header = setup(1, node1);
|
||||
StackNode* temp;
|
||||
|
||||
temp = pop(header);
|
||||
int after = 0;
|
||||
while(temp)
|
||||
{
|
||||
after++;
|
||||
temp = temp->next;
|
||||
}
|
||||
|
||||
|
||||
TEST_ASSERT_EQUAL_INT(2, after);
|
||||
TEST_ASSERT_NULL(node1->next);
|
||||
}
|
||||
|
||||
void test_top(void)
|
||||
{
|
||||
StackNode* node2 = setup(3, NULL);
|
||||
StackNode* node1 = setup(2, node2);
|
||||
StackNode* header = setup(1, node1);
|
||||
|
||||
int data = *(int *)top(header);
|
||||
TEST_ASSERT_EQUAL_INT(node2->value, data);
|
||||
}
|
||||
|
||||
void test_clear()
|
||||
{
|
||||
StackNode* node2 = setup(3, NULL);
|
||||
StackNode* node1 = setup(2, node2);
|
||||
StackNode* header = setup(1, node1);
|
||||
StackNode* temp;
|
||||
|
||||
clearStack(header);
|
||||
temp = header;
|
||||
|
||||
int after = 0;
|
||||
while(temp)
|
||||
{
|
||||
after++;
|
||||
temp = temp->next;
|
||||
}
|
||||
|
||||
|
||||
TEST_ASSERT_NULL(after);
|
||||
}
|
||||
|
||||
void setUp(void)
|
||||
{
|
||||
// Falls notwendig, kann hier Vorbereitungsarbeit gemacht werden
|
||||
}
|
||||
|
||||
void tearDown(void)
|
||||
{
|
||||
// Hier kann Bereinigungsarbeit nach jedem Test durchgeführt werden
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
UNITY_BEGIN();
|
||||
|
||||
printf("============================\nStack tests\n============================\n");
|
||||
|
||||
RUN_TEST(test_push);
|
||||
RUN_TEST(test_pop);
|
||||
RUN_TEST(test_top);
|
||||
RUN_TEST(test_clear);
|
||||
|
||||
return UNITY_END();
|
||||
}
|
||||
File renamed without changes.
File renamed without changes.
+10
@@ -0,0 +1,10 @@
|
||||
#ifndef UNITTTESTS_H
|
||||
#define UNITTTESTS_H
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
typedef int (*UnitTestType)(void);
|
||||
|
||||
#define RUN_UNIT_TEST(fct) printf("%80s: %d\n", #fct, fct())
|
||||
|
||||
#endif
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Reference in new issue
Block a user