6
6
//
7
7
// ===----------------------------------------------------------------------===//
8
8
9
+ #include " src/__support/CPP/bit.h"
9
10
#include " src/stdio/fclose.h"
10
11
#include " src/stdio/fgets.h"
11
12
#include " src/stdio/fopen.h"
12
13
#include " src/stdio/printf.h"
14
+ #include " src/stdlib/getenv.h"
13
15
#include " src/stdlib/strtod.h"
14
16
#include " src/stdlib/strtof.h"
17
+ #include " src/string/strtok.h"
15
18
#include " test/UnitTest/Test.h"
16
19
#include < stdint.h>
17
20
@@ -57,8 +60,8 @@ int checkFile(char *inputFileName, int *totalFails, int *totalBitDiffs,
57
60
int32_t curFails = 0 ; // Only counts actual failures, not bitdiffs.
58
61
int32_t curBitDiffs = 0 ; // A bitdiff is when the expected result and actual
59
62
// result are off by +/- 1 bit.
60
- char * line = nullptr ;
61
- char *num = nullptr ;
63
+ char line[ 100 ] ;
64
+ char *num;
62
65
63
66
auto *fileHandle = LIBC_NAMESPACE::fopen (inputFileName, " r" );
64
67
@@ -68,7 +71,7 @@ int checkFile(char *inputFileName, int *totalFails, int *totalBitDiffs,
68
71
return 1 ;
69
72
}
70
73
71
- while (LIBC_NAMESPACE::fgets (line, 100 , fileHandle)) {
74
+ while (LIBC_NAMESPACE::fgets (line, sizeof (line) , fileHandle)) {
72
75
if (line[0 ] == ' #' ) {
73
76
continue ;
74
77
}
@@ -84,9 +87,9 @@ int checkFile(char *inputFileName, int *totalFails, int *totalBitDiffs,
84
87
85
88
double doubleResult = LIBC_NAMESPACE::strtod (num, nullptr );
86
89
87
- uint32_t floatRaw = *( uint32_t *)(& floatResult);
90
+ uint32_t floatRaw = LIBC_NAMESPACE::cpp::bit_cast< uint32_t >( floatResult);
88
91
89
- uint64_t doubleRaw = *( uint64_t *)(& doubleResult);
92
+ uint64_t doubleRaw = LIBC_NAMESPACE::cpp::bit_cast< uint64_t >( doubleResult);
90
93
91
94
if (!(expectedFloatRaw == floatRaw)) {
92
95
if (expectedFloatRaw == floatRaw + 1 ||
@@ -150,22 +153,24 @@ TEST(LlvmLibcStrToFloatComparisonTest, CheckFile) {
150
153
151
154
int total = 0 ;
152
155
153
- char filename[] = " str_to_float_comparison_data.txt" ;
154
- LIBC_NAMESPACE::printf (" Starting file %s\n " , filename);
155
- int curResult =
156
- checkFile (filename, &fails, &bitdiffs, detailedBitDiffs, &total);
157
- if (curResult == 1 ) {
158
- result = 1 ;
159
- } else if (curResult == 2 ) {
160
- result = 2 ;
156
+ char *files = LIBC_NAMESPACE::getenv (" FILES" );
157
+ for (char *file = LIBC_NAMESPACE::strtok (files, " ," ); file != nullptr ;
158
+ file = LIBC_NAMESPACE::strtok (nullptr , " ," )) {
159
+ int curResult =
160
+ checkFile (file, &fails, &bitdiffs, detailedBitDiffs, &total);
161
+ if (curResult == 1 ) {
162
+ result = 1 ;
163
+ } else if (curResult == 2 ) {
164
+ result = 2 ;
165
+ }
161
166
}
162
167
163
168
EXPECT_EQ (result, 0 );
164
169
EXPECT_EQ (fails, 0 );
165
170
EXPECT_EQ (bitdiffs, 0 );
166
- EXPECT_EQ (detailedBitDiffs[0 ], 0 );
167
- EXPECT_EQ (detailedBitDiffs[1 ], 0 );
168
- EXPECT_EQ (detailedBitDiffs[2 ], 0 );
169
- EXPECT_EQ (detailedBitDiffs[3 ], 0 );
170
- EXPECT_EQ (total, 0 );
171
+ EXPECT_EQ (detailedBitDiffs[0 ], 0 ); // float low
172
+ EXPECT_EQ (detailedBitDiffs[1 ], 0 ); // float high
173
+ EXPECT_EQ (detailedBitDiffs[2 ], 0 ); // double low
174
+ EXPECT_EQ (detailedBitDiffs[3 ], 0 ); // double high
175
+ EXPECT_EQ (total, 6 );
171
176
}
0 commit comments