UNIXworkcode

1 /* 2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 3 * 4 * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions are met: 8 * 9 * 1. Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * 12 * 2. Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution. 15 * 16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 26 * POSSIBILITY OF SUCH DAMAGE. 27 */ 28 29 #include "ucx/test.h" 30 31 UcxTestSuite* ucx_test_suite_new() { 32 UcxTestSuite* suite = (UcxTestSuite*) malloc(sizeof(UcxTestSuite)); 33 if (suite != NULL) { 34 suite->success = 0; 35 suite->failure = 0; 36 suite->tests = NULL; 37 } 38 39 return suite; 40 } 41 42 void ucx_test_suite_free(UcxTestSuite* suite) { 43 UcxTestList *l = suite->tests; 44 while (l != NULL) { 45 UcxTestList *e = l; 46 l = l->next; 47 free(e); 48 } 49 free(suite); 50 } 51 52 int ucx_test_register(UcxTestSuite* suite, UcxTest test) { 53 if (suite->tests) { 54 UcxTestList *newelem = (UcxTestList*) malloc(sizeof(UcxTestList)); 55 if (newelem) { 56 newelem->test = test; 57 newelem->next = NULL; 58 59 UcxTestList *last = suite->tests; 60 while (last->next) { 61 last = last->next; 62 } 63 last->next = newelem; 64 65 return EXIT_SUCCESS; 66 } else { 67 return EXIT_FAILURE; 68 } 69 } else { 70 suite->tests = (UcxTestList*) malloc(sizeof(UcxTestList)); 71 if (suite->tests) { 72 suite->tests->test = test; 73 suite->tests->next = NULL; 74 75 return EXIT_SUCCESS; 76 } else { 77 return EXIT_FAILURE; 78 } 79 } 80 } 81 82 void ucx_test_run(UcxTestSuite* suite, FILE* output) { 83 suite->success = 0; 84 suite->failure = 0; 85 for (UcxTestList* elem = suite->tests ; elem ; elem = elem->next) { 86 elem->test(suite, output); 87 } 88 fwrite("\nAll test completed.\n", 1, 21, output); 89 fprintf(output, " Total: %u\n Success: %u\n Failure: %u\n", 90 suite->success+suite->failure, suite->success, suite->failure); 91 } 92