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

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

Binary file not shown.

View File

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

View File

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