mirror of
https://github.com/darlinghq/darling-libdispatch.git
synced 2024-11-23 12:09:44 +00:00
5bceb4b74b
They were imported from apple/swift-corelibs-libdispatch@34f383d344, so the tests are slightly newer than the actual libdispatch code, but that shouldn't be a problem.
123 lines
3.0 KiB
C
123 lines
3.0 KiB
C
/*
|
|
* Copyright (c) 2008-2011 Apple Inc. All rights reserved.
|
|
*
|
|
* @APPLE_APACHE_LICENSE_HEADER_START@
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*
|
|
* @APPLE_APACHE_LICENSE_HEADER_END@
|
|
*/
|
|
|
|
#include <math.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <sys/param.h>
|
|
|
|
int
|
|
has_prefix(const char* str, const char* prefix)
|
|
{
|
|
return (strncmp(str, prefix, strlen(prefix)) == 0);
|
|
}
|
|
|
|
int
|
|
print_summary(FILE* f, long total, long pass, long fail, long skip)
|
|
{
|
|
double dpass = 100.0 ,dfail = 0.0, dskip = 0.0;
|
|
fprintf(f, "Total: %ld\n", total);
|
|
if (total) {
|
|
dpass = ((double)pass / (double)(total - skip)) * 10000.0;
|
|
dpass = floor(dpass) / 100.0;
|
|
|
|
dfail = ((double)fail / (double)(total - skip)) * 10000.0;
|
|
dfail = ceil(dfail) / 100.0;
|
|
|
|
dskip = ((double)skip / (double)total) * 10000.0;
|
|
dskip = ceil(dskip) / 100.0;
|
|
}
|
|
fprintf(f, "Passed: %ld (%0.2lf%%)\nFailed: %ld (%0.2lf%%)\nSkipped: %ld (%0.2lf%%)\n\n", pass, dpass, fail, dfail, skip, dskip);
|
|
return 0;
|
|
}
|
|
|
|
int
|
|
main(int argc, char* argv[])
|
|
{
|
|
if (argc > 1) {
|
|
fprintf(stderr, "%s: usage: summarize\n", argv[0]);
|
|
exit(1);
|
|
}
|
|
|
|
/*
|
|
FILE* f = fopen(argv[1], "w");
|
|
if (f == NULL) {
|
|
perror(argv[1]);
|
|
exit(1);
|
|
}
|
|
*/
|
|
FILE* f = stdout;
|
|
|
|
fprintf(f, "\n==================================================\n");
|
|
fprintf(f, "[SUMMARY] Test Summary\n");
|
|
fprintf(f, "==================================================\n\n");
|
|
|
|
size_t len;
|
|
char* ln, lastln[1024];
|
|
int first_test = 1;
|
|
long total = 0;
|
|
long pass = 0;
|
|
long fail = 0;
|
|
long skip = 0;
|
|
long total_total = 0;
|
|
long total_pass = 0;
|
|
long total_fail = 0;
|
|
long total_skip = 0;
|
|
for(;;) {
|
|
ln = fgetln(stdin, &len);
|
|
//if (ln) fprintf(stdout, "%.*s", (int)len, ln);
|
|
if (ln == NULL || (has_prefix(ln, "[TEST]") &&
|
|
strncmp(ln, lastln, MIN(len,1024)))) {
|
|
if (total || !first_test) {
|
|
print_summary(f, total, pass, fail, skip);
|
|
first_test = 0;
|
|
}
|
|
total_total += total;
|
|
total_pass += pass;
|
|
total_fail += fail;
|
|
total_skip += skip;
|
|
total = 0;
|
|
pass = 0;
|
|
fail = 0;
|
|
skip = 0;
|
|
if (ln) {
|
|
fprintf(f, "%.*s", (int)len, ln);
|
|
strncpy(lastln, ln, MIN(len,1024));
|
|
} else {
|
|
fprintf(f, "[TOTAL]\n");
|
|
print_summary(f, total_total, total_pass, total_fail, total_skip);
|
|
break;
|
|
}
|
|
} else if (has_prefix(ln, "[PASS]")) {
|
|
++total;
|
|
++pass;
|
|
} else if (has_prefix(ln, "[FAIL]")) {
|
|
++total;
|
|
++fail;
|
|
} else if (has_prefix(ln, "[SKIP]")) {
|
|
++total;
|
|
++skip;
|
|
}
|
|
}
|
|
|
|
return (total_fail ? EXIT_FAILURE : EXIT_SUCCESS);
|
|
}
|