animal shelter + adidas v1 .zip
This commit is contained in:
Binary file not shown.
BIN
C/C2 AnimalShelter/build/main_test
Normal file → Executable file
BIN
C/C2 AnimalShelter/build/main_test
Normal file → Executable file
Binary file not shown.
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
BIN
C/C6 Adidas.zip
BIN
C/C6 Adidas.zip
Binary file not shown.
Reference in New Issue
Block a user