| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276 |
- #define __OOC_CPP__
- #define __OOC_DEBUG__
- #include "BaseObj.h"
- #include "PikaCompiler.h"
- #include "PikaParser.h"
- #include "PikaVM.h"
- #include "TinyObj.h"
- #include "dataArgs.h"
- #include "dataMemory.h"
- #include "dataStrs.h"
- extern "C" {
- #include <stdio.h>
- #include "../fuzzypid/fuzzy_PID.h"
- #include "PikaMain.h"
- #include "PikaMath_Operator.h"
- #include "PikaStdLib_MemChecker.h"
- #include "PikaStdLib_SysObj.h"
- #include "pikaScript.h"
- #include "pika_config_gtest.h"
- #include "pika_hal.h"
- #include "../jrpc/jrpc.h"
- char* PikaStdData_Dict___str__(PikaObj* self);
- char* PikaStdData_List___str__(PikaObj* self);
- extern PikaMemInfo g_PikaMemInfo;
- /* the log_buff of printf */
- extern char log_buff[LOG_BUFF_MAX][LOG_SIZE];
- }
- #define TEST_RUN_SINGLE_FILE(_test_suite_, _test_name_, _file_name_) \
- TEST(_test_suite_, _test_name_) { \
- g_PikaMemInfo.heapUsedMax = 0; \
- PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain); \
- extern unsigned char pikaModules_py_a[]; \
- obj_linkLibrary(pikaMain, pikaModules_py_a); \
- /* run */ \
- __platform_printf("BEGIN\r\n"); \
- pikaVM_runSingleFile(pikaMain, _file_name_); \
- /* assert */ \
- /* deinit */ \
- obj_deinit(pikaMain); \
- EXPECT_EQ(pikaMemNow(), 0); \
- }
- extern "C" {
- volatile static FILE* _f_getchar_fp = NULL;
- static char _f_getchar(void) {
- char c = 0;
- size_t n = fread(&c, 1, 1, (FILE*)_f_getchar_fp);
- if (n > 0) {
- return c;
- }
- pika_platform_printf("f_getchar error\r\n");
- pika_assert(0);
- return -1;
- }
- static char _fmem_getchar(void) {
- char c = 0;
- size_t n = fread(&c, 1, 1, (FILE*)_f_getchar_fp);
- if (n > 0) {
- return c;
- }
- return 0;
- }
- void pikaScriptShell_withGetchar(PikaObj* self, sh_getchar getchar_fn);
- }
- #define TEST_RUN_REPL_FILE(_test_suite_, _test_name_, _file_name_) \
- TEST(_test_suite_, _test_name_) { \
- /* init */ \
- g_PikaMemInfo.heapUsedMax = 0; \
- PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain); \
- extern unsigned char pikaModules_py_a[]; \
- obj_linkLibrary(pikaMain, pikaModules_py_a); \
- /* run */ \
- __platform_printf("BEGIN\r\n"); \
- _f_getchar_fp = fopen(_file_name_, "rb"); \
- pikaScriptShell_withGetchar(pikaMain, _f_getchar); \
- fclose((FILE*)_f_getchar_fp); \
- /* collect */ \
- /* assert */ \
- /* deinit */ \
- obj_deinit(pikaMain); \
- EXPECT_EQ(pikaMemNow(), 0); \
- }
- #define TEST_RUN_SINGLE_FILE_PASS(_test_suite_, _test_name_, _file_name_) \
- TEST(_test_suite_, _test_name_) { \
- g_PikaMemInfo.heapUsedMax = 0; \
- PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain); \
- extern unsigned char pikaModules_py_a[]; \
- obj_linkLibrary(pikaMain, pikaModules_py_a); \
- /* run */ \
- __platform_printf("BEGIN\r\n"); \
- pikaVM_runSingleFile(pikaMain, _file_name_); \
- /* assert */ \
- EXPECT_STREQ(log_buff[0], "PASS\r\n"); \
- EXPECT_STREQ(log_buff[1], "BEGIN\r\n"); \
- /* deinit */ \
- obj_deinit(pikaMain); \
- EXPECT_EQ(pikaMemNow(), 0); \
- }
- #define TEST_RUN_LINES_REPL(_test_suite_, _test_name_, _lines_) \
- TEST(_test_suite_, _test_name_) { \
- /* init */ \
- extern volatile pika_bool g_always_repl_mode; \
- g_always_repl_mode = pika_false; \
- g_PikaMemInfo.heapUsedMax = 0; \
- PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain); \
- extern unsigned char pikaModules_py_a[]; \
- obj_linkLibrary(pikaMain, pikaModules_py_a); \
- /* run */ \
- __platform_printf("BEGIN\r\n"); \
- _f_getchar_fp = fmemopen((void*)_lines_, strlen(_lines_), "rb"); \
- pikaScriptShell_withGetchar(pikaMain, _fmem_getchar); \
- fclose((FILE*)_f_getchar_fp); \
- /* collect */ \
- /* assert */ \
- /* deinit */ \
- obj_deinit(pikaMain); \
- EXPECT_EQ(pikaMemNow(), 0); \
- g_always_repl_mode = pika_true; \
- }
- #define TEST_RUN_SINGLE_FILE_ASSERT(_test_suite_, _test_name_, _file_name_, \
- __expt__) \
- TEST(_test_suite_, _test_name_) { \
- g_PikaMemInfo.heapUsedMax = 0; \
- PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain); \
- extern unsigned char pikaModules_py_a[]; \
- obj_linkLibrary(pikaMain, pikaModules_py_a); \
- /* run */ \
- __platform_printf("BEGIN\r\n"); \
- pikaVM_runSingleFile(pikaMain, _file_name_); \
- /* assert */ \
- EXPECT_TRUE((__expt__)); \
- /* deinit */ \
- obj_deinit(pikaMain); \
- EXPECT_EQ(pikaMemNow(), 0); \
- }
- #define TEST_RUN_SINGLE_FILE_EXCEPT_OUTPUT(_test_suite_, _test_name_, \
- _file_name_, _except_output_) \
- TEST(_test_suite_, _test_name_) { \
- g_PikaMemInfo.heapUsedMax = 0; \
- PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain); \
- extern unsigned char pikaModules_py_a[]; \
- obj_linkLibrary(pikaMain, pikaModules_py_a); \
- /* run */ \
- pikaVM_runSingleFile(pikaMain, _file_name_); \
- /* assert */ \
- EXPECT_STREQ(log_buff[0], (_except_output_)); \
- /* deinit */ \
- obj_deinit(pikaMain); \
- EXPECT_EQ(pikaMemNow(), 0); \
- }
- #define TEST_RUN_SINGLE_FILE_EXCEPT_OUTPUT2(_test_suite_, _test_name_, \
- _file_name_, _except_output1_, \
- _except_output2_) \
- TEST(_test_suite_, _test_name_) { \
- g_PikaMemInfo.heapUsedMax = 0; \
- PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain); \
- extern unsigned char pikaModules_py_a[]; \
- obj_linkLibrary(pikaMain, pikaModules_py_a); \
- /* run */ \
- __platform_printf("BEGIN\r\n"); \
- pikaVM_runSingleFile(pikaMain, _file_name_); \
- /* assert */ \
- EXPECT_STREQ(log_buff[0], (_except_output1_)); \
- EXPECT_STREQ(log_buff[1], (_except_output2_)); \
- EXPECT_STREQ(log_buff[2], "BEGIN\r\n"); \
- /* deinit */ \
- obj_deinit(pikaMain); \
- EXPECT_EQ(pikaMemNow(), 0); \
- }
- #define TEST_RUN_SINGLE_FILE_EXCEPT_OUTPUT_INDEXED( \
- _test_suite_, _test_name_, _file_name_, _index_, _except_output_) \
- TEST(_test_suite_, _test_name_) { \
- g_PikaMemInfo.heapUsedMax = 0; \
- PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain); \
- extern unsigned char pikaModules_py_a[]; \
- obj_linkLibrary(pikaMain, pikaModules_py_a); \
- /* run */ \
- __platform_printf("BEGIN\r\n"); \
- pikaVM_runSingleFile(pikaMain, _file_name_); \
- /* assert */ \
- EXPECT_STREQ(log_buff[_index_], (_except_output_)); \
- /* deinit */ \
- obj_deinit(pikaMain); \
- EXPECT_EQ(pikaMemNow(), 0); \
- }
- #define TEST_RUN_LINES(_test_suite_, _test_name_, _lines_) \
- TEST(_test_suite_, _test_name_) { \
- PikaObj* self = newRootObj("root", New_PikaMain); \
- extern unsigned char pikaModules_py_a[]; \
- obj_linkLibrary(self, pikaModules_py_a); \
- obj_run(self, (_lines_)); /* collect */ /* assert */ \
- obj_deinit(self); \
- EXPECT_EQ(pikaMemNow(), 0); \
- }
- #define TEST_RUN_LINES_NO_OUTPUT(_test_suite_, _test_name_, _lines_) \
- TEST(_test_suite_, _test_name_) { \
- PikaObj* self = newRootObj("root", New_PikaMain); \
- extern unsigned char pikaModules_py_a[]; \
- obj_linkLibrary(self, pikaModules_py_a); \
- pika_platform_printf("BEGIN\r\n"); \
- obj_run(self, (_lines_)); /* collect */ /* assert */ \
- EXPECT_STREQ(log_buff[0], "BEGIN\r\n"); \
- obj_deinit(self); \
- EXPECT_EQ(pikaMemNow(), 0); \
- }
- #define TEST_RUN_LINES_PASS(_test_suite_, _test_name_, _lines_) \
- TEST(_test_suite_, _test_name_) { \
- PikaObj* self = newRootObj("root", New_PikaMain); \
- extern unsigned char pikaModules_py_a[]; \
- obj_linkLibrary(self, pikaModules_py_a); \
- obj_run(self, (_lines_)); /* collect */ /* assert */ \
- EXPECT_STREQ(log_buff[0], "PASS\r\n"); \
- obj_deinit(self); \
- EXPECT_EQ(pikaMemNow(), 0); \
- }
- #define TEST_RUN_LINES_EXCEPT_OUTPUT(_test_suite_, _test_name_, _lines_, \
- _except_output_) \
- TEST(_test_suite_, _test_name_) { \
- PikaObj* self = newRootObj("root", New_PikaMain); \
- extern unsigned char pikaModules_py_a[]; \
- obj_linkLibrary(self, pikaModules_py_a); \
- obj_run(self, (_lines_)); /* collect */ /* assert */ \
- EXPECT_STREQ(log_buff[0], (_except_output_)); \
- obj_deinit(self); \
- EXPECT_EQ(pikaMemNow(), 0); \
- }
- #define TEST_RUN_LINES_EXCEPT_OUTPUT2(_test_suite_, _test_name_, _lines_, \
- _except_output1_, _except_output2_) \
- TEST(_test_suite_, _test_name_) { \
- PikaObj* self = newRootObj("root", New_PikaMain); \
- extern unsigned char pikaModules_py_a[]; \
- obj_linkLibrary(self, pikaModules_py_a); \
- obj_run(self, (_lines_)); /* collect */ /* assert */ \
- EXPECT_STREQ(log_buff[0], (_except_output1_)); \
- EXPECT_STREQ(log_buff[1], (_except_output2_)); \
- obj_deinit(self); \
- EXPECT_EQ(pikaMemNow(), 0); \
- }
- #define TEST_RUN_LINES_EXCEPT_OUTPUT_INDEXED( \
- _test_suite_, _test_name_, _lines_, _index_, _except_output_) \
- TEST(_test_suite_, _test_name_) { \
- PikaObj* self = newRootObj("root", New_PikaMain); \
- extern unsigned char pikaModules_py_a[]; \
- obj_linkLibrary(self, pikaModules_py_a); \
- obj_run(self, (_lines_)); /* collect */ /* assert */ \
- EXPECT_STREQ(log_buff[_index_], (_except_output_)); \
- obj_deinit(self); \
- EXPECT_EQ(pikaMemNow(), 0); \
- }
- #if USE_GOOGLE_TEST
- #include "gtest/gtest.h"
- #define TEST_START
- #define TEST_END
- #else
- #include "test_purec.h"
- #endif
|