/** * avetestc.c - An non-interactive unit test of the average procedure. */ #include #include #include #include "average.h" int errors = 0; // The count of errors /** * Procedure: * report * Parameters * values, an array of integers * count, an integer * expected, an integer * Purpose: * Check if we get a result we expect. * Produces: * [Nothing; Called for the side effect.] * Pre: * values[] contains at least count values * count > 0 */ void report (int values[], int count, int expected) { int i; int ave = average (values, count); if (ave != expected) { ++errors; printf ("For average ({%d", values[0]); for (i = 1; i < count; i++) { printf (",%d", values[i]); } // for printf ("}), expected %d, got %d.\n", expected, ave); } } // report int main () { int values1[] = { 10, 20, 40, 0, 80 }; int values2[] = { -20, -30, -40 }; int values3[] = { -20, 10, 40, -10, 80 }; int values4[] = { INT_MAX, INT_MAX, INT_MAX, INT_MAX }; int values5[] = { INT_MIN, INT_MIN, INT_MIN, INT_MIN }; int values6[] = { 44, 10, 19 }; int values7[] = { 1 }; int i; report (values6, 3, 24); report (values6, 1, 44); report (values6, 2, 27); report (values7, 1, 1); /* report (values1, 5); report (values1, 3); report (values2, 3); report (values3, 1); report (values3, 3); report (values3, 5); */ for (i = 1; i <= 4; i++) report (values4, i, INT_MAX); for (i = 1; i <= 4; i++) report (values5, i, INT_MIN); // And we're done if (errors) return EXIT_FAILURE; else return EXIT_SUCCESS; } // main