Skip to content

Commit 503c090

Browse files
[libc] fix iswalpha signiture and test (#152343)
The iswalpha function is only working for characters in the ascii range right now, which isn't ideal. Also it was returning a bool when the function is supposed to return an int.
1 parent 477a65a commit 503c090

File tree

3 files changed

+42
-40
lines changed

3 files changed

+42
-40
lines changed

libc/src/wctype/iswalpha.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,6 @@
1414

1515
namespace LIBC_NAMESPACE_DECL {
1616

17-
LLVM_LIBC_FUNCTION(bool, iswalpha, (wint_t c)) { return internal::iswalpha(c); }
17+
LLVM_LIBC_FUNCTION(int, iswalpha, (wint_t c)) { return internal::iswalpha(c); }
1818

1919
} // namespace LIBC_NAMESPACE_DECL

libc/src/wctype/iswalpha.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
namespace LIBC_NAMESPACE_DECL {
1616

17-
bool iswalpha(wint_t c);
17+
int iswalpha(wint_t c);
1818

1919
} // namespace LIBC_NAMESPACE_DECL
2020

libc/test/src/wctype/iswalpha_test.cpp

Lines changed: 40 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -9,46 +9,48 @@
99
#include "src/__support/CPP/span.h"
1010
#include "src/wctype/iswalpha.h"
1111

12-
#include "test/UnitTest/LibcTest.h"
1312
#include "test/UnitTest/Test.h"
1413

15-
namespace {
16-
17-
// TODO: Merge the wctype tests using this framework.
18-
constexpr char WALPHA_ARRAY[] = {
19-
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
20-
'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
21-
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
22-
'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
23-
};
24-
25-
bool in_span(int ch, LIBC_NAMESPACE::cpp::span<const char> arr) {
26-
for (size_t i = 0; i < arr.size(); ++i)
27-
if (static_cast<int>(arr[i]) == ch)
28-
return true;
29-
return false;
30-
}
31-
32-
} // namespace
33-
3414
TEST(LlvmLibciswalpha, SimpleTest) {
35-
EXPECT_TRUE(LIBC_NAMESPACE::iswalpha('a'));
36-
EXPECT_TRUE(LIBC_NAMESPACE::iswalpha('B'));
37-
38-
EXPECT_FALSE(LIBC_NAMESPACE::iswalpha('3'));
39-
EXPECT_FALSE(LIBC_NAMESPACE::iswalpha(' '));
40-
EXPECT_FALSE(LIBC_NAMESPACE::iswalpha('?'));
41-
EXPECT_FALSE(LIBC_NAMESPACE::iswalpha('\0'));
42-
EXPECT_FALSE(LIBC_NAMESPACE::iswalpha(-1));
15+
EXPECT_NE(LIBC_NAMESPACE::iswalpha('a'), 0);
16+
EXPECT_NE(LIBC_NAMESPACE::iswalpha('B'), 0);
17+
18+
EXPECT_EQ(LIBC_NAMESPACE::iswalpha('3'), 0);
19+
EXPECT_EQ(LIBC_NAMESPACE::iswalpha(' '), 0);
20+
EXPECT_EQ(LIBC_NAMESPACE::iswalpha('?'), 0);
21+
EXPECT_EQ(LIBC_NAMESPACE::iswalpha('\0'), 0);
22+
EXPECT_EQ(LIBC_NAMESPACE::iswalpha(-1), 0);
4323
}
4424

45-
TEST(LlvmLibciswalpha, DefaultLocale) {
46-
// Loops through all characters, verifying that letters return
47-
// true and everything else returns false.
48-
for (int ch = -255; ch < 255; ++ch) {
49-
if (in_span(ch, WALPHA_ARRAY))
50-
EXPECT_TRUE(LIBC_NAMESPACE::iswalpha(ch));
51-
else
52-
EXPECT_FALSE(LIBC_NAMESPACE::iswalpha(ch));
53-
}
54-
}
25+
// TODO: once iswalpha supports more than just ascii-range characters add a
26+
// proper test.
27+
28+
// namespace {
29+
30+
// // TODO: Merge the wctype tests using this framework.
31+
// constexpr char WALPHA_ARRAY[] = {
32+
// 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
33+
// 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
34+
// 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
35+
// 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
36+
// };
37+
38+
// bool in_span(int ch, LIBC_NAMESPACE::cpp::span<const char> arr) {
39+
// for (size_t i = 0; i < arr.size(); ++i)
40+
// if (static_cast<int>(arr[i]) == ch)
41+
// return true;
42+
// return false;
43+
// }
44+
45+
// } // namespace
46+
47+
// TEST(LlvmLibciswalpha, DefaultLocale) {
48+
// // Loops through all characters, verifying that letters return
49+
// // true and everything else returns false.
50+
// for (int ch = -255; ch < 255; ++ch) {
51+
// if (in_span(ch, WALPHA_ARRAY))
52+
// EXPECT_TRUE(LIBC_NAMESPACE::iswalpha(ch));
53+
// else
54+
// EXPECT_FALSE(LIBC_NAMESPACE::iswalpha(ch));
55+
// }
56+
// }

0 commit comments

Comments
 (0)