ext/Python/pyctype-test.cpp (129 lines of code) (raw):
// Copyright (c) Facebook, Inc. and its affiliates. (http://www.facebook.com)
#include "Python.h"
#include "capi-fixture.h"
#include "capi-testing.h"
namespace py {
namespace testing {
using PyCTypeExtensionApiTest = ExtensionApi;
TEST_F(PyCTypeExtensionApiTest, IsAlnum) {
EXPECT_TRUE(Py_ISALNUM('a'));
EXPECT_TRUE(Py_ISALNUM('z'));
EXPECT_TRUE(Py_ISALNUM('A'));
EXPECT_TRUE(Py_ISALNUM('Z'));
EXPECT_TRUE(Py_ISALNUM('0'));
EXPECT_TRUE(Py_ISALNUM('9'));
EXPECT_FALSE(Py_ISALNUM('\x00'));
EXPECT_FALSE(Py_ISALNUM('\t'));
EXPECT_FALSE(Py_ISALNUM('_'));
EXPECT_FALSE(Py_ISALNUM('\x80'));
}
TEST_F(PyCTypeExtensionApiTest, IsAlpha) {
EXPECT_TRUE(Py_ISALPHA('a'));
EXPECT_TRUE(Py_ISALPHA('z'));
EXPECT_TRUE(Py_ISALPHA('A'));
EXPECT_TRUE(Py_ISALPHA('Z'));
EXPECT_FALSE(Py_ISALPHA('0'));
EXPECT_FALSE(Py_ISALPHA('9'));
EXPECT_FALSE(Py_ISALPHA('\x00'));
EXPECT_FALSE(Py_ISALPHA('\t'));
EXPECT_FALSE(Py_ISALPHA('_'));
EXPECT_FALSE(Py_ISALPHA('\x80'));
}
TEST_F(PyCTypeExtensionApiTest, IsDigit) {
EXPECT_TRUE(Py_ISDIGIT('0'));
EXPECT_TRUE(Py_ISDIGIT('9'));
EXPECT_FALSE(Py_ISDIGIT('a'));
EXPECT_FALSE(Py_ISDIGIT('z'));
EXPECT_FALSE(Py_ISDIGIT('A'));
EXPECT_FALSE(Py_ISDIGIT('Z'));
EXPECT_FALSE(Py_ISDIGIT('\x00'));
EXPECT_FALSE(Py_ISDIGIT('\t'));
EXPECT_FALSE(Py_ISDIGIT('_'));
EXPECT_FALSE(Py_ISDIGIT('\x80'));
}
TEST_F(PyCTypeExtensionApiTest, IsLower) {
EXPECT_TRUE(Py_ISLOWER('a'));
EXPECT_TRUE(Py_ISLOWER('z'));
EXPECT_FALSE(Py_ISLOWER('A'));
EXPECT_FALSE(Py_ISLOWER('Z'));
EXPECT_FALSE(Py_ISLOWER('0'));
EXPECT_FALSE(Py_ISLOWER('9'));
EXPECT_FALSE(Py_ISLOWER('\x00'));
EXPECT_FALSE(Py_ISLOWER('\t'));
EXPECT_FALSE(Py_ISLOWER('_'));
EXPECT_FALSE(Py_ISLOWER('\x80'));
}
TEST_F(PyCTypeExtensionApiTest, IsSpace) {
EXPECT_TRUE(Py_ISSPACE('\t'));
EXPECT_TRUE(Py_ISSPACE('\n'));
EXPECT_TRUE(Py_ISSPACE('\v'));
EXPECT_TRUE(Py_ISSPACE('\f'));
EXPECT_TRUE(Py_ISSPACE('\r'));
EXPECT_TRUE(Py_ISSPACE(' '));
// These are spaces in Unicode but not in pyctype.c
EXPECT_FALSE(Py_ISSPACE('\x1c'));
EXPECT_FALSE(Py_ISSPACE('\x1d'));
EXPECT_FALSE(Py_ISSPACE('\x1e'));
EXPECT_FALSE(Py_ISSPACE('\x1f'));
EXPECT_FALSE(Py_ISSPACE('a'));
EXPECT_FALSE(Py_ISSPACE('z'));
EXPECT_FALSE(Py_ISSPACE('A'));
EXPECT_FALSE(Py_ISSPACE('Z'));
EXPECT_FALSE(Py_ISSPACE('0'));
EXPECT_FALSE(Py_ISSPACE('9'));
EXPECT_FALSE(Py_ISSPACE('\x00'));
EXPECT_FALSE(Py_ISSPACE('_'));
EXPECT_FALSE(Py_ISSPACE('\x80'));
}
TEST_F(PyCTypeExtensionApiTest, IsUpper) {
EXPECT_TRUE(Py_ISUPPER('A'));
EXPECT_TRUE(Py_ISUPPER('Z'));
EXPECT_FALSE(Py_ISUPPER('a'));
EXPECT_FALSE(Py_ISUPPER('z'));
EXPECT_FALSE(Py_ISUPPER('0'));
EXPECT_FALSE(Py_ISUPPER('9'));
EXPECT_FALSE(Py_ISUPPER('\x00'));
EXPECT_FALSE(Py_ISUPPER('\t'));
EXPECT_FALSE(Py_ISUPPER('_'));
EXPECT_FALSE(Py_ISUPPER('\x80'));
}
TEST_F(PyCTypeExtensionApiTest, IsXDigit) {
EXPECT_TRUE(Py_ISXDIGIT('a'));
EXPECT_TRUE(Py_ISXDIGIT('f'));
EXPECT_TRUE(Py_ISXDIGIT('A'));
EXPECT_TRUE(Py_ISXDIGIT('F'));
EXPECT_TRUE(Py_ISXDIGIT('0'));
EXPECT_TRUE(Py_ISXDIGIT('9'));
EXPECT_FALSE(Py_ISXDIGIT('g'));
EXPECT_FALSE(Py_ISXDIGIT('z'));
EXPECT_FALSE(Py_ISXDIGIT('G'));
EXPECT_FALSE(Py_ISXDIGIT('Z'));
EXPECT_FALSE(Py_ISXDIGIT('\x00'));
EXPECT_FALSE(Py_ISXDIGIT('\t'));
EXPECT_FALSE(Py_ISXDIGIT('_'));
EXPECT_FALSE(Py_ISXDIGIT('\x80'));
}
TEST_F(PyCTypeExtensionApiTest, ToLower) {
EXPECT_EQ(Py_TOLOWER('A'), 'a');
EXPECT_EQ(Py_TOLOWER('Z'), 'z');
EXPECT_EQ(Py_TOLOWER('a'), 'a');
EXPECT_EQ(Py_TOLOWER('z'), 'z');
EXPECT_EQ(Py_TOLOWER('0'), '0');
EXPECT_EQ(Py_TOLOWER('9'), '9');
EXPECT_EQ(Py_TOLOWER('\x00'), '\x00');
EXPECT_EQ(Py_TOLOWER('\t'), '\t');
EXPECT_EQ(Py_TOLOWER('_'), '_');
EXPECT_EQ(Py_TOLOWER('\x80'), 0x80);
}
TEST_F(PyCTypeExtensionApiTest, ToUpper) {
EXPECT_EQ(Py_TOUPPER('a'), 'A');
EXPECT_EQ(Py_TOUPPER('z'), 'Z');
EXPECT_EQ(Py_TOUPPER('A'), 'A');
EXPECT_EQ(Py_TOUPPER('Z'), 'Z');
EXPECT_EQ(Py_TOUPPER('0'), '0');
EXPECT_EQ(Py_TOUPPER('9'), '9');
EXPECT_EQ(Py_TOUPPER('\x00'), '\x00');
EXPECT_EQ(Py_TOUPPER('\t'), '\t');
EXPECT_EQ(Py_TOUPPER('_'), '_');
EXPECT_EQ(Py_TOUPPER('\x80'), 0x80);
}
} // namespace testing
} // namespace py