!15 add some methods for PikaStdLib.String()

Merge pull request !15 from 牧之/master
This commit is contained in:
李昂 2022-06-02 12:33:21 +00:00 committed by Gitee
commit e4ca504db3
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
5 changed files with 258 additions and 4 deletions

View File

@ -51,8 +51,12 @@ class String(TinyObj):
def __str__(self) -> str: ...
def startwith(self,prefix:str)->int:...
def endwith(self,suffix:str)->int:...
def isdigit(self)->int:...
def islower(self)->int:...
def isalnum(self)->int:...
def isalpha(self)->int:...
def isspace(self)->int:...
class ByteArray(List):
# convert a string to ByteArray

View File

@ -1,5 +1,5 @@
#include "PikaStdData_String.h"
#include "../PLOOC/PikaStdData_String_Util.h"
Arg* PikaStdData_String___iter__(PikaObj* self) {
obj_setInt(self, "__iter_i", 0);
return arg_setRef(NULL, "", self);
@ -88,3 +88,58 @@ int PikaStdData_String_endwith(PikaObj *self, char* suffix){
}
return 1;
}
int PikaStdData_String_isdigit(PikaObj *self){
char *str = obj_getStr(self,"str");
int i=0;
while(str[i]!='\0'){
if(!isdigit((int)str[i]))
return 0;
i++;
}
return 1;
}
int PikaStdData_String_islower(PikaObj *self){
char *str = obj_getStr(self,"str");
int i=0;
while(str[i]!='\0'){
if(!islower((int)str[i]))
return 0;
i++;
}
return 1;
}
int PikaStdData_String_isalnum(PikaObj *self){
char *str = obj_getStr(self,"str");
int i=0;
while(str[i]!='\0'){
if(!isalnum((int)str[i]))
return 0;
i++;
}
return 1;
}
int PikaStdData_String_isalpha(PikaObj *self){
char *str = obj_getStr(self,"str");
int i=0;
while(str[i]!='\0'){
if(!isalpha((int)str[i]))
return 0;
i++;
}
return 1;
}
int PikaStdData_String_isspace(PikaObj *self){
char *str = obj_getStr(self,"str");
int i=0;
while(str[i]!='\0'){
if(!isspace((int)str[i]))
return 0;
i++;
}
return 1;
}

View File

@ -51,8 +51,12 @@ class String(TinyObj):
def __str__(self) -> str: ...
def startwith(self,prefix:str)->int:...
def endwith(self,suffix:str)->int:...
def isdigit(self)->int:...
def islower(self)->int:...
def isalnum(self)->int:...
def isalpha(self)->int:...
def isspace(self)->int:...
class ByteArray(List):
# convert a string to ByteArray

View File

@ -1,5 +1,5 @@
#include "PikaStdData_String.h"
#include "../PLOOC/PikaStdData_String_Util.h"
Arg* PikaStdData_String___iter__(PikaObj* self) {
obj_setInt(self, "__iter_i", 0);
return arg_setRef(NULL, "", self);
@ -88,3 +88,58 @@ int PikaStdData_String_endwith(PikaObj *self, char* suffix){
}
return 1;
}
int PikaStdData_String_isdigit(PikaObj *self){
char *str = obj_getStr(self,"str");
int i=0;
while(str[i]!='\0'){
if(!isdigit((int)str[i]))
return 0;
i++;
}
return 1;
}
int PikaStdData_String_islower(PikaObj *self){
char *str = obj_getStr(self,"str");
int i=0;
while(str[i]!='\0'){
if(!islower((int)str[i]))
return 0;
i++;
}
return 1;
}
int PikaStdData_String_isalnum(PikaObj *self){
char *str = obj_getStr(self,"str");
int i=0;
while(str[i]!='\0'){
if(!isalnum((int)str[i]))
return 0;
i++;
}
return 1;
}
int PikaStdData_String_isalpha(PikaObj *self){
char *str = obj_getStr(self,"str");
int i=0;
while(str[i]!='\0'){
if(!isalpha((int)str[i]))
return 0;
i++;
}
return 1;
}
int PikaStdData_String_isspace(PikaObj *self){
char *str = obj_getStr(self,"str");
int i=0;
while(str[i]!='\0'){
if(!isspace((int)str[i]))
return 0;
i++;
}
return 1;
}

View File

@ -2243,3 +2243,139 @@ TEST(pikaMain, string_endwith) {
obj_deinit(pikaMain);
EXPECT_EQ(pikaMemNow(), 0);
}
TEST(pikaMain, string_isdigit) {
/* init */
pikaMemInfo.heapUsedMax = 0;
PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
/* run */
obj_run(pikaMain,
"a = PikaStdData.String('test')\n"
"b = PikaStdData.String('1234')\n"
"c = PikaStdData.String('test1234')\n"
"res1 = a.isdigit()\n"
"res2 = b.isdigit()\n"
"res3 = c.isdigit()\n"
);
/* collect */
int res1 = obj_getInt(pikaMain, "res1");
int res2 = obj_getInt(pikaMain, "res2");
int res3 = obj_getInt(pikaMain, "res3");
/* assert */
EXPECT_EQ(res1, 0);
EXPECT_EQ(res2, 1);
EXPECT_EQ(res3, 0);
/* deinit */
obj_deinit(pikaMain);
EXPECT_EQ(pikaMemNow(), 0);
}
TEST(pikaMain, string_islower) {
/* init */
pikaMemInfo.heapUsedMax = 0;
PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
/* run */
obj_run(pikaMain,
"a = PikaStdData.String('test')\n"
"b = PikaStdData.String('1234')\n"
"c = PikaStdData.String('Test')\n"
"res1 = a.islower()\n"
"res2 = b.islower()\n"
"res3 = c.islower()\n"
);
/* collect */
int res1 = obj_getInt(pikaMain, "res1");
int res2 = obj_getInt(pikaMain, "res2");
int res3 = obj_getInt(pikaMain, "res3");
/* assert */
EXPECT_EQ(res1, 1);
EXPECT_EQ(res2, 0);
EXPECT_EQ(res3, 0);
/* deinit */
obj_deinit(pikaMain);
EXPECT_EQ(pikaMemNow(), 0);
}
TEST(pikaMain, string_isalnum) {
/* init */
pikaMemInfo.heapUsedMax = 0;
PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
/* run */
obj_run(pikaMain,
"a = PikaStdData.String('test1234')\n"
"b = PikaStdData.String('1234')\n"
"c = PikaStdData.String(' ')\n"
"res1 = a.isalnum()\n"
"res2 = b.isalnum()\n"
"res3 = c.isalnum()\n"
);
/* collect */
int res1 = obj_getInt(pikaMain, "res1");
int res2 = obj_getInt(pikaMain, "res2");
int res3 = obj_getInt(pikaMain, "res3");
/* assert */
EXPECT_EQ(res1, 1);
EXPECT_EQ(res2, 1);
EXPECT_EQ(res3, 0);
/* deinit */
obj_deinit(pikaMain);
EXPECT_EQ(pikaMemNow(), 0);
}
TEST(pikaMain, string_isalpha) {
/* init */
pikaMemInfo.heapUsedMax = 0;
PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
/* run */
obj_run(pikaMain,
"a = PikaStdData.String('test')\n"
"b = PikaStdData.String('1234')\n"
"c = PikaStdData.String(' ')\n"
"res1 = a.isalpha()\n"
"res2 = b.isalpha()\n"
"res3 = c.isalpha()\n"
);
/* collect */
int res1 = obj_getInt(pikaMain, "res1");
int res2 = obj_getInt(pikaMain, "res2");
int res3 = obj_getInt(pikaMain, "res3");
/* assert */
EXPECT_EQ(res1, 1);
EXPECT_EQ(res2, 0);
EXPECT_EQ(res3, 0);
/* deinit */
obj_deinit(pikaMain);
EXPECT_EQ(pikaMemNow(), 0);
}
TEST(pikaMain, string_isspace) {
/* init */
pikaMemInfo.heapUsedMax = 0;
PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
/* run */
obj_run(pikaMain,
"a = PikaStdData.String('test')\n"
"b = PikaStdData.String(' ')\n"
"res1 = a.isspace()\n"
"res2 = b.isspace()\n"
);
/* collect */
int res1 = obj_getInt(pikaMain, "res1");
int res2 = obj_getInt(pikaMain, "res2");
/* assert */
EXPECT_EQ(res1, 0);
EXPECT_EQ(res2, 1);
/* deinit */
obj_deinit(pikaMain);
EXPECT_EQ(pikaMemNow(), 0);
}