diff --git a/DynamicInt64Array.h b/DynamicInt64Array.h index 92fbe17..2de4987 100644 --- a/DynamicInt64Array.h +++ b/DynamicInt64Array.h @@ -1,7 +1,7 @@ //myHelper/DynamicInt64Array.h //Matthew Ellison // Created: 03-08-19 -//Modified: 03-09-19 +//Modified: 03-10-19 //This is the implementation for a dynamic array in c /* Copyright (C) 2019 Matthew Ellison @@ -298,6 +298,47 @@ bool isSortedDynamicInt64Array(struct DynamicInt64Array* ary){ return true; } +//Compares 2 DynamicInt64Array. Returns 0 if equal, -1 if ary1 is < ary2, and 1 if ary1 > ary2 +int compareDynamicInt64Array(struct DynamicInt64Array* ary1, struct DynamicInt64Array* ary2){ + //Make sure they are the same size + if(ary1->size < ary2->size){ + return -1; + } + + //Step through every element in each array, checking that they are the same + for(uint64_t location = 0;location < ary1->size;++location){ + //If an element is not the same see if ary1 is larger or smaller than ary2 + if(ary1->ptr[location] != ary2->ptr[location]){ + if(ary1->ptr[location] < ary2->ptr[location]){ + return -1; + } + else{ + return 1; + } + } + } + + //If it made it all the way through the loop without triggering an inequality they are equal + return 0; +} + +//Performs a deep copy on a DynamicInt64Array +void copyDynamicInt64Array(struct DynamicInt64Array* ary1, struct DynamicInt64Array* ary2){ + //Make sure the second array is empty + if(ary2->size != 0){ + destroyDynamicInt64Array(ary2); + initDynamicInt64Array(ary2); + } + + //Reserve the propper amount of space + reserveDynamicInt64Array(ary2, ary1->size); + + //Look through every element in the first array and copy it to the second + for(uint64_t location = 0;location < ary1->size;++location){ + pushBackDynamicInt64Array(ary2, ary1->ptr[location]); + } +} + //This function returns the sum of all elements in a DynamicInt64Array int64_t getSumDynamicInt64Array(struct DynamicInt64Array* ary){ int64_t sum = 0; diff --git a/testDynamicInt64Array.c b/testDynamicInt64Array.c index 1bf84af..dd59c3a 100644 --- a/testDynamicInt64Array.c +++ b/testDynamicInt64Array.c @@ -1,7 +1,7 @@ //myHelper/DynamicInt64Array.h //Matthew Ellison // Created: 03-08-19 -//Modified: 03-09-19 +//Modified: 03-10-19 //This is the test for my dynamic array in c /* Copyright (C) 2019 Matthew Ellison @@ -178,8 +178,42 @@ int main(){ return 1; } + //Test copy function + struct DynamicInt64Array testAry2; + initDynamicInt64Array(&testAry2); + copyDynamicInt64Array(&testAry, &testAry2); + if((testAry.ptr[0] == testAry2.ptr[0]) && (testAry.ptr[1] == testAry2.ptr[1]) && (testAry.ptr[2] == testAry2.ptr[2]) && (testAry.ptr[3] == testAry2.ptr[3]) && (testAry.ptr[4] == testAry2.ptr[4]) && (testAry.ptr[5] == testAry2.ptr[5])){ + printf("copy is working correctly\n"); + } + else{ + printf("There is something wrong with copy\n"); + return 1; + } + + //Test compare function + //Test equals + if(compareDynamicInt64Array(&testAry, &testAry2) != 0){ + printf("There is a problem with compare equals\n"); + return 1; + } + //Test lessThan + pushBackDynamicInt64Array(&testAry2, 7); + if(compareDynamicInt64Array(&testAry, &testAry2) != -1){ + printf("There is a problem with compare less than\n"); + return 1; + } + //Test greaterThan + if(compareDynamicInt64Array(&testAry2, &testAry) != 1){ + printf("There is a problem with compare greater than\n"); + return 1; + } + else{ + printf("compare is working correctly\n"); + } + //Release all of the memory allocated by the array destroyDynamicInt64Array(&testAry); + destroyDynamicInt64Array(&testAry2); printf("\n\nEND OF TESTS\n");