From a119401b659832db1ab5ae99198d5b6ebe0be23d Mon Sep 17 00:00:00 2001 From: lyon1998 <645275593@qq.com> Date: Sat, 16 Oct 2021 18:59:46 +0800 Subject: [PATCH] test stack for str is ok --- port/linux/test/stack-test.cpp | 26 ++++++++++++++++++++++++ src/PikaParser.c | 3 ++- src/PikaParser.h | 3 ++- src/dataStack.c | 37 +++++++++++++++++++++++++--------- src/dataStack.h | 2 +- 5 files changed, 59 insertions(+), 12 deletions(-) create mode 100644 port/linux/test/stack-test.cpp diff --git a/port/linux/test/stack-test.cpp b/port/linux/test/stack-test.cpp new file mode 100644 index 000000000..33f50ff25 --- /dev/null +++ b/port/linux/test/stack-test.cpp @@ -0,0 +1,26 @@ +#include "gtest/gtest.h" +extern "C" { +#include "BaseObj.h" +#include "dataMemory.h" +#include "dataStack.h" +} +static int mem; + +TEST(stack, NEW) { + Stack* s = New_Stack(); + stack_deinit(s); + EXPECT_EQ(pikaMemNow(), 0); +} + +TEST(stack, str) { + Stack* s = New_Stack(); + stack_pushStr(s, (char*)"abc"); + stack_pushStr(s, (char*)"123"); + stack_pushStr(s, (char*)"xyz"); + char buff[32] = {0}; + EXPECT_STREQ(stack_popStr(s, buff), (char*)"xyz"); + EXPECT_STREQ(stack_popStr(s, buff), (char*)"123"); + EXPECT_STREQ(stack_popStr(s, buff), (char*)"abc"); + stack_deinit(s); + EXPECT_EQ(pikaMemNow(), 0); +} diff --git a/src/PikaParser.c b/src/PikaParser.c index 97db56abf..76edffb71 100644 --- a/src/PikaParser.c +++ b/src/PikaParser.c @@ -2,6 +2,7 @@ #include "PikaObj.h" #include "dataQueue.h" #include "dataQueueObj.h" +#include "dataStack.h" #include "dataStrs.h" char* strsPopStmts(Args* buffs, char* stmts) { @@ -138,7 +139,7 @@ static int32_t getPyLineBlockDeepth(char* line) { } } -AST* pikaParseLine(char* line, Args* blockStack) { +AST* pikaParseLine(char* line, Stack* blockStack) { AST* ast = New_queueObj(); Args* buffs = New_strBuff(); uint8_t blockDeepth = getPyLineBlockDeepth(line); diff --git a/src/PikaParser.h b/src/PikaParser.h index c342b1b20..370914c48 100644 --- a/src/PikaParser.h +++ b/src/PikaParser.h @@ -1,9 +1,10 @@ #ifndef __PIKA__PARSER__H #define __PIKA__PARSER__H #include "dataQueueObj.h" +#include "dataStack.h" typedef QueueObj AST; -AST* pikaParseLine(char* line, Args* blockStack); +AST* pikaParseLine(char* line, Stack* blockStack); char* pikaParseToAsm(Args* buffs, char* line); int32_t AST_deinit(AST* ast); char* AST_toPikaAsm(AST* ast, Args* buffs); diff --git a/src/dataStack.c b/src/dataStack.c index a578f350b..23e6627a5 100644 --- a/src/dataStack.c +++ b/src/dataStack.c @@ -1,15 +1,34 @@ -#include "dataQueue.h" #include "dataStack.h" +#include "dataQueue.h" -Stack* New_Stack(){ - +Stack* New_Stack() { + Args* args = New_args(NULL); + args_setInt(args, "top", 0); + Stack* stack = args; + return stack; } -int32_t stack_deinit(Stack* stack){ - +int32_t stack_deinit(Stack* stack) { + Args* args = stack; + args_deinit(args); + return 0; } -int32_t stack_pushStr(Stack* stack, char* str){ - +int32_t stack_pushStr(Stack* stack, char* str) { + Args* args = stack; + uint64_t top = args_getInt(args, "top"); + char buff[11]; + /* add top */ + char* topStr = fast_itoa(buff, top); + args_setInt(args, "top", top + 1); + return args_setStr(args, topStr, str); } -char* stack_popStr(Stack* queue, char* buff){ - +char* stack_popStr(Stack* queue, char* outBuff) { + Args* args = queue; + uint64_t top = args_getInt(args, "top") - 1; + char buff[11]; + /* sub top */ + args_setInt(args, "top", top); + char* topStr = fast_itoa(buff, top); + strcpy(outBuff, args_getStr(args, topStr)); + args_removeArg(args, topStr); + return outBuff; } \ No newline at end of file diff --git a/src/dataStack.h b/src/dataStack.h index 3e68384f0..d8003cae0 100644 --- a/src/dataStack.h +++ b/src/dataStack.h @@ -12,5 +12,5 @@ Stack* New_Stack(); int32_t stack_deinit(Stack* stack); int32_t stack_pushStr(Stack* stack, char* str); -char* stack_popStr(Stack* queue, char* buff); +char* stack_popStr(Stack* queue, char* outBuff); #endif \ No newline at end of file