VirtualBox

source: vbox/trunk/src/libs/softfloat-3e/testfloat/source/verCases_common.c@ 107044

Last change on this file since 107044 was 94551, checked in by vboxsync, 3 years ago

libs/softfloat: Copied TestFloat-3e from vendor branch and to testfloat subdir. bugref:9898

  • Property svn:eol-style set to native
File size: 4.3 KB
Line 
1
2/*============================================================================
3
4This C source file is part of TestFloat, Release 3e, a package of programs for
5testing the correctness of floating-point arithmetic complying with the IEEE
6Standard for Floating-Point, by John R. Hauser.
7
8Copyright 2011, 2012, 2013, 2014, 2017, 2018 The Regents of the University of
9California. All rights reserved.
10
11Redistribution and use in source and binary forms, with or without
12modification, are permitted provided that the following conditions are met:
13
14 1. Redistributions of source code must retain the above copyright notice,
15 this list of conditions, and the following disclaimer.
16
17 2. Redistributions in binary form must reproduce the above copyright notice,
18 this list of conditions, and the following disclaimer in the documentation
19 and/or other materials provided with the distribution.
20
21 3. Neither the name of the University nor the names of its contributors may
22 be used to endorse or promote products derived from this software without
23 specific prior written permission.
24
25THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
26EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
27WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
28DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
29DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
30(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
31LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
32ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
33(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
34SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
35
36=============================================================================*/
37
38#include <stdbool.h>
39#include <stdint.h>
40#include <stdlib.h>
41#include <stdio.h>
42#include <signal.h>
43#include "platform.h"
44#include "verCases.h"
45
46const char *verCases_functionNamePtr;
47uint_fast8_t verCases_roundingPrecision = 0;
48int verCases_roundingCode = 0;
49int verCases_tininessCode = 0;
50bool verCases_usesExact = false;
51bool verCases_exact;
52bool verCases_checkNaNs = false;
53bool verCases_checkInvInts = false;
54uint_fast32_t verCases_maxErrorCount = 0;
55bool verCases_errorStop = false;
56
57volatile sig_atomic_t verCases_stop = false;
58
59bool verCases_anyErrors = false;
60
61void verCases_exitWithStatus( void )
62{
63
64 exit( verCases_anyErrors ? EXIT_FAILURE : EXIT_SUCCESS );
65
66}
67
68uint_fast32_t verCases_tenThousandsCount, verCases_errorCount;
69
70void verCases_writeTestsPerformed( int count )
71{
72
73 if ( verCases_tenThousandsCount ) {
74 fprintf(
75 stderr,
76 "\r%lu%04d tests performed",
77 (unsigned long) verCases_tenThousandsCount,
78 count
79 );
80 } else {
81 fprintf( stderr, "\r%d tests performed", count );
82 }
83 if ( verCases_errorCount ) {
84 fprintf(
85 stderr,
86 "; %lu error%s found.\n",
87 (unsigned long) verCases_errorCount,
88 (verCases_errorCount == 1) ? "" : "s"
89 );
90 } else {
91 fputs( ".\n", stderr );
92 if ( verCases_tenThousandsCount ) {
93 fprintf(
94 stdout,
95 "In %lu%04d tests, no errors found in ",
96 (unsigned long) verCases_tenThousandsCount,
97 count
98 );
99 } else {
100 fprintf( stdout, "In %d tests, no errors found in ", count );
101 }
102 verCases_writeFunctionName( stdout );
103 fputs( ".\n", stdout );
104 fflush( stdout );
105 }
106
107}
108
109void verCases_perTenThousand( void )
110{
111
112 ++verCases_tenThousandsCount;
113 if ( verCases_stop ) {
114 verCases_writeTestsPerformed( 0 );
115 verCases_exitWithStatus();
116 }
117 fprintf(
118 stderr, "\r%3lu0000", (unsigned long) verCases_tenThousandsCount );
119
120}
121
122void verCases_writeErrorFound( int count )
123{
124
125 fputc( '\r', stderr );
126 if ( verCases_errorCount == 1 ) {
127 fputs( "Errors found in ", stdout );
128 verCases_writeFunctionName( stdout );
129 fputs( ":\n", stdout );
130 }
131 if ( verCases_stop ) {
132 verCases_writeTestsPerformed( count );
133 verCases_exitWithStatus();
134 }
135 verCases_anyErrors = true;
136
137}
138
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette