diff --git a/.gitignore b/.gitignore index 845cda6..108080e 100644 --- a/.gitignore +++ b/.gitignore @@ -53,3 +53,5 @@ dkms.conf # debug information files *.dwo + +*build/ \ No newline at end of file diff --git a/src/hello.c b/src/hello.c new file mode 100644 index 0000000..807d128 --- /dev/null +++ b/src/hello.c @@ -0,0 +1,8 @@ +#include +int main() +{ + printf("Hello, world!\n"); + + + return 0; +} diff --git a/src/list/TestList.c b/src/list/TestList.c new file mode 100644 index 0000000..d1a6b2c --- /dev/null +++ b/src/list/TestList.c @@ -0,0 +1,92 @@ +#include "list.h" +#include +#include +#include +#include + +bool testInsertIntoEmpty(void) +{ + Node* head = NULL; + insertSorted(&head, 10); + bool result = (head != NULL && head->value == 10 && head->next == NULL); + freeList(head); + return result; +} + +bool testInsertCorrectOrder(void) +{ + Node* head = NULL; + insertSorted(&head, 5); + insertSorted(&head, 3); + insertSorted(&head, 7); + insertSorted(&head, 5); + + bool result = head != NULL && head->value == 3 && head->next != NULL && head->next->value == 5 && head->next->next != NULL && head->next->next->value == 5 && head->next->next->next != NULL && head->next->next->next->value == 7 && head->next->next->next->next == NULL; + + freeList(head); + return result; +} + +bool testDeleteExisting(void) +{ + Node* head = NULL; + insertSorted(&head, 1); + insertSorted(&head, 3); + insertSorted(&head, 5); + + bool result = deleteValue(&head, 3) == 1 && head != NULL && head->value == 1 && head->next != NULL && head->next->value == 5 && head->next->next == NULL; + + freeList(head); + return result; +} + +bool testDeleteNonExisting(void) +{ + Node* head = NULL; + insertSorted(&head, 4); + insertSorted(&head, 6); + + bool result = deleteValue(&head, 100) == 0; + freeList(head); + return result; +} + +bool testDeleteFromEmpty(void) +{ + Node* head = NULL; + return deleteValue(&head, 5) == 0; +} + +bool testDeleteFirstLast(void) +{ + Node* head = NULL; + insertSorted(&head, 2); + insertSorted(&head, 4); + insertSorted(&head, 6); + + bool result = deleteValue(&head, 2) == 1 && deleteValue(&head, 6) == 1 && head != NULL && head->value == 4 && head->next == NULL; + + freeList(head); + return result; +} + +int main(int argc, char* argv[]) +{ + if (argc >1 && strcmp(argv[1], "--test")==0){ + if (!testInsertIntoEmpty() || + !testInsertCorrectOrder() || + !testDeleteExisting() || + !testDeleteNonExisting() || + !testDeleteFromEmpty() || + !testDeleteFirstLast()) { + printf("Tests failed\n"); + return 1; + } + + printf("All tests passed\n"); + return 0; + + } + + return 0; +} \ No newline at end of file diff --git a/src/list/list.c b/src/list/list.c new file mode 100644 index 0000000..51a223d --- /dev/null +++ b/src/list/list.c @@ -0,0 +1,66 @@ +#include +#include +#include "list.h" + + +void insertSorted(Node** head, int value) { + Node* newNode = malloc(sizeof(Node)); + newNode->value = value; + newNode->next = NULL; + + if (*head == NULL || value < (*head)->value) { + newNode->next = *head; + *head = newNode; + return; + } + + + Node* current = *head; + while (current->next != NULL && current->next->value < value) { + current = current->next; + } + + newNode->next = current->next; + current->next = newNode; +} + +int deleteValue(Node** head, int value) { + Node* current = *head; + Node* prev = NULL; + + while (current != NULL && current->value != value) { + prev = current; + current = current->next; + } + + if (current == NULL) return 0; + + if (prev == NULL) *head = current->next; + else prev->next = current->next; + + free(current); + return 1; +} + +void printList(Node* head) { + if (head == NULL) { + printf("Список пуст.\n"); + return; + } + + printf("Список: "); + while (head != NULL) { + printf("%d ", head->value); + head = head->next; + } + printf("\n"); +} + + +void freeList(Node* head) { + while (head != NULL) { + Node* temp = head; + head = head->next; + free(temp); + } +} diff --git a/src/list/list.h b/src/list/list.h new file mode 100644 index 0000000..b678564 --- /dev/null +++ b/src/list/list.h @@ -0,0 +1,13 @@ +#pragma once + +typedef struct Node { + int value; + struct Node* next; +} Node; + +void insertSorted(Node** head, int value); +int deleteValue(Node** head, int value); +void printList(Node* head); +void freeList(Node* head); + +