animal shelter + adidas v1 .zip

This commit is contained in:
Rens Pastoor
2025-06-06 00:22:30 +02:00
parent 44025963ed
commit 122e5f8208
5 changed files with 34 additions and 17 deletions

Binary file not shown.

BIN
C/C2 AnimalShelter/build/main_test Normal file → Executable file

Binary file not shown.

View File

@@ -7,34 +7,39 @@
#include "animal.h" #include "animal.h"
int addAnimal(const Animal* animalPtr, Animal* animalArray, size_t animalArrayLength, size_t numberOfAnimalsPresent, size_t* newNumberOfAnimalsPresent){ int addAnimal(const Animal* animalPtr, Animal* animalArray, size_t animalArrayLength, size_t numberOfAnimalsPresent, size_t* newNumberOfAnimalsPresent){
int fault = 0; if (animalArray == NULL || animalPtr == NULL || newNumberOfAnimalsPresent == NULL || numberOfAnimalsPresent >= animalArrayLength) {
if (animalArray == NULL || animalPtr == NULL || numberOfAnimalsPresent >= animalArrayLength) { return -1; // Invalid
fault = -1; // Invalid
} else {
animalArray[numberOfAnimalsPresent] = *animalPtr;
++numberOfAnimalsPresent;
} }
*newNumberOfAnimalsPresent = numberOfAnimalsPresent; animalArray[numberOfAnimalsPresent] = *animalPtr;
return fault; *newNumberOfAnimalsPresent = numberOfAnimalsPresent + 1;
return 0;
} }
int removeAnimal(int animalId, Animal* animalArray, size_t numberOfAnimalsPresent, size_t* newNumberOfAnimalsPresent){ int removeAnimal(int animalId, Animal* animalArray, size_t numberOfAnimalsPresent, size_t* newNumberOfAnimalsPresent){
int fault = -1; int fault = -1;
size_t removedCount = 0;
if (animalArray == NULL || numberOfAnimalsPresent == 0) { if (animalArray == NULL || numberOfAnimalsPresent == 0) {
fault = -1; // Invalid fault = -1; // Invalid
} else { } else {
for (size_t i = 0; i < numberOfAnimalsPresent; ++i) { size_t writeIndex = 0;
if (animalArray[i].Id == animalId) {
// move the array elements to the left to remove the animal // Copy only animals that don't match the ID
for (size_t j = i; j < numberOfAnimalsPresent - 1; ++j) { for (size_t readIndex = 0; readIndex < numberOfAnimalsPresent; ++readIndex) {
animalArray[j] = animalArray[j + 1]; if (animalArray[readIndex].Id != animalId) {
if (writeIndex != readIndex) {
animalArray[writeIndex] = animalArray[readIndex];
} }
--numberOfAnimalsPresent; writeIndex++;
fault = 0; } else {
break; removedCount++;
fault = 0; // Found some animal(s) to remove
} }
} }
// Update the number of animals present
numberOfAnimalsPresent -= removedCount;
} }
*newNumberOfAnimalsPresent = numberOfAnimalsPresent; *newNumberOfAnimalsPresent = numberOfAnimalsPresent;
return fault; return fault;
} }

View File

@@ -17,11 +17,13 @@ const Animal originalArray[5] = {
// Arrays for testing // Arrays for testing
Animal animalArray[5]; Animal animalArray[5];
Animal searchArray[5]; Animal searchArray[5];
Animal idTestArray[5];
void administration_setUp(void) { void administration_setUp(void) {
// Reset both arrays before each test // Reset both arrays before each test
memcpy(animalArray, originalArray, sizeof(originalArray)); memcpy(animalArray, originalArray, sizeof(originalArray));
memcpy(searchArray, originalArray, sizeof(originalArray)); memcpy(searchArray, originalArray, sizeof(originalArray));
memcpy(idTestArray, originalArray, sizeof(originalArray));
} }
void administration_tearDown(void){} void administration_tearDown(void){}
@@ -40,6 +42,15 @@ void test_administration_remove_invalid(void){
TEST_ASSERT_EQUAL(3, newNumberOfAnimalsPresent); TEST_ASSERT_EQUAL(3, newNumberOfAnimalsPresent);
} }
void test_administration_remove_multiple_of_same_id(void){
Animal newAnimal = {.Id = 3, .Species = Dog, .Age = 3, .Sex = Male, .DateFound = {1, 1, 2023}};
idTestArray[3] = newAnimal;
size_t newNumberOfAnimalsPresent = 0;
int errorCode = removeAnimal(3, animalArray, 3, &newNumberOfAnimalsPresent);
TEST_ASSERT_EQUAL(0, errorCode);
TEST_ASSERT_EQUAL(2, newNumberOfAnimalsPresent);
}
void test_administration_add_valid(void){ void test_administration_add_valid(void){
Animal newAnimal = {.Id = 4, .Species = Dog, .Age = 3, .Sex = Male, .DateFound = {1, 1, 2023}}; Animal newAnimal = {.Id = 4, .Species = Dog, .Age = 3, .Sex = Male, .DateFound = {1, 1, 2023}};
size_t newNumberOfAnimalsPresent = 0; size_t newNumberOfAnimalsPresent = 0;
@@ -53,7 +64,7 @@ void test_administration_add_invalid(void){
size_t newNumberOfAnimalsPresent = 0; size_t newNumberOfAnimalsPresent = 0;
int errorCode = addAnimal(&newAnimal, animalArray, 3, 3, &newNumberOfAnimalsPresent); int errorCode = addAnimal(&newAnimal, animalArray, 3, 3, &newNumberOfAnimalsPresent);
TEST_ASSERT_EQUAL(-1, errorCode); TEST_ASSERT_EQUAL(-1, errorCode);
TEST_ASSERT_EQUAL(3, newNumberOfAnimalsPresent); TEST_ASSERT_NOT_EQUAL(4, newNumberOfAnimalsPresent);
} }
void test_administration_find_valid(void){ void test_administration_find_valid(void){
@@ -81,6 +92,7 @@ void run_administration_tests()
MY_RUN_TEST(test_administration_add_invalid); MY_RUN_TEST(test_administration_add_invalid);
MY_RUN_TEST(test_administration_find_valid); MY_RUN_TEST(test_administration_find_valid);
MY_RUN_TEST(test_administration_find_invalid); MY_RUN_TEST(test_administration_find_invalid);
MY_RUN_TEST(test_administration_remove_multiple_of_same_id);
UnityUnregisterSetupTearDown(); UnityUnregisterSetupTearDown();
} }

Binary file not shown.