fix parse err, open assert on rust-msc-

add test about while data[:]

add test for list_list slice

release cross build
This commit is contained in:
lyon 2023-03-08 20:33:45 +08:00
parent f9ef744bf5
commit 8ad1427f51
6 changed files with 98 additions and 2 deletions

View File

@ -12,7 +12,7 @@
// "program": "${workspaceFolder}/build/boot/demo06-pikamain/pikascript_demo06-pikamain",
"args": [
// "--gtest_filter=pikaui.*"
"--gtest_filter=InstructUnit.base"
"--gtest_filter=parser.for_in_split"
],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",

View File

@ -2015,7 +2015,7 @@ AST* AST_parseLine_withBlockStack_withBlockDeepth(char* line,
char* arg_in = strsPopToken(list_buffs, &line_buff, ' ');
AST_setNodeAttr(ast, "arg_in", arg_in);
strsPopToken(list_buffs, &line_buff, ' ');
char* list_in = strsPopToken(list_buffs, &line_buff, ':');
char* list_in = Cursor_splitCollect(list_buffs, line_buff, ":", 0);
list_in = strsAppend(list_buffs, "iter(", list_in);
list_in = strsAppend(list_buffs, list_in, ")");
list_in = strsCopy(&buffs, list_in);

View File

@ -2300,6 +2300,53 @@ TEST(vm, slice_str_end) {
obj_deinit(pikaMain);
EXPECT_EQ(pikaMemNow(), 0);
}
TEST(vm, slice_list) {
/* init */
g_PikaMemInfo.heapUsedMax = 0;
PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
/* run */
__platform_printf("BEGIN\r\n");
obj_run(pikaMain, "[1,2,3][1:]");
/* collect */
/* assert */
EXPECT_STREQ(log_buff[0], "[2, 3]\r\n");
EXPECT_STREQ(log_buff[1], "BEGIN\r\n");
/* deinit */
obj_deinit(pikaMain);
EXPECT_EQ(pikaMemNow(), 0);
}
TEST(vm, slice_list_list) {
/* init */
g_PikaMemInfo.heapUsedMax = 0;
PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
/* run */
__platform_printf("BEGIN\r\n");
obj_run(pikaMain,
"l = "
"[[\"ID\",\"TCP_URL\",\"VERSION\",\"SENSOR_SCAN_s\",\"DATA_UPLOAD_"
"s\",\"ACT_LOGIC_SCAN_s\",\"NETWORK\",\"AUTO_ACT\",\"START_TIME\"],"
"[\"ABC123\",\"iot.365sn.cn/operate/h/"
"1234\",\"V1.1\",60,1800,0.5,\"4G\",\"TRUE\",1669017826]]\n"
"ll = l[1:]\n"
"print(len(l), l)\n"
"print(len(ll),ll)\n");
/* collect */
/* assert */
EXPECT_STREQ(log_buff[0],
"9 ['ABC123', 'iot.365sn.cn/operate/h/1234', 'V1.1', 60, "
"1800, 0.500000, '4G', 'TRUE', 1669017826]\r\n");
EXPECT_STREQ(log_buff[1],
"2 [['ID', 'TCP_URL', 'VERSION', 'SENSOR_SCAN_s', "
"'DATA_UPLOAD_s', 'ACT_LOGIC_SCAN_s', 'NETWORK', 'AUTO_ACT', "
"'START_TIME'], ['ABC123', 'iot.365sn.cn/operate/h/1234', "
"'V1.1', 60, 1800, 0.500000, '4G', 'TRUE', 1669017826]]\r\n");
/* deinit */
obj_deinit(pikaMain);
EXPECT_EQ(pikaMemNow(), 0);
}
#endif
#if !PIKA_NANO_ENABLE

View File

@ -5408,6 +5408,54 @@ TEST(parser, not_in_or) {
EXPECT_EQ(pikaMemNow(), 0);
}
TEST(parser, for_in_split) {
g_PikaMemInfo.heapUsedMax = 0;
Args* buffs = New_strBuff();
char* lines =
"for rows in data[1:]:\n"
" print(rows)"
"while data[1:]:\n"
" print(data[1:])\n";
printf("%s\r\n", lines);
char* pikaAsm = Parser_linesToAsm(buffs, lines);
printf("%s", pikaAsm);
EXPECT_STREQ(pikaAsm,
"B0\n"
"2 REF data\n"
"2 NUM 1\n"
"3 NUM 99999\n"
"2 OPT -\n"
"1 SLC \n"
"0 RUN iter\n"
"0 OUT $l0\n"
"B0\n"
"0 RUN $l0.__next__\n"
"0 OUT rows\n"
"0 EST rows\n"
"0 JEZ 2\n"
"B1\n"
"2 REF rows\n"
"1 RUN print\n"
"1 NUM 1\n"
"2 NUM 99999\n"
"1 OPT -\n"
"0 SLC \n"
"B1\n"
"2 REF data\n"
"2 NUM 1\n"
"3 NUM 99999\n"
"2 OPT -\n"
"1 SLC \n"
"0 RUN print\n"
"B0\n"
"0 JMP -1\n"
"B0\n"
"0 DEL $l0\n"
"B0\n");
args_deinit(buffs);
EXPECT_EQ(pikaMemNow(), 0);
}
#endif
TEST_END

View File

@ -5,3 +5,4 @@
#define PIKA_PATH_BUFF_SIZE 640
#define PIKA_BYTES_DEFAULT_SIZE 640
#define PIKA_READ_FILE_BUFF_SIZE 0x10000
#define PIKA_ASSERT_ENABLE 1