mirror of
https://gitee.com/Lyon1998/pikapython.git
synced 2025-01-15 17:02:53 +08:00
b359062172
* add PLOOC * add PLOOC to kernal * remove unrequired files * remove pack * fix plooc ci in test/*.cpp * add test_common.h Co-authored-by: Gabriel Wang <embedded_zhuoran@Hotmail.com>
129 lines
3.4 KiB
C
129 lines
3.4 KiB
C
#include "gtest/gtest.h"
|
|
#include "test_common.h"
|
|
extern "C" {
|
|
#include "PikaMain.h"
|
|
#include "PikaParser.h"
|
|
#include "PikaStdLib_MemChecker.h"
|
|
#include "PikaVM.h"
|
|
#include "dataArgs.h"
|
|
#include "dataMemory.h"
|
|
#include "dataStrs.h"
|
|
#include "pikaScript.h"
|
|
#include "pika_config_gtest.h"
|
|
}
|
|
|
|
TEST(gc, root) {
|
|
PikaObj* root = newRootObj("root", New_PikaMain);
|
|
EXPECT_EQ(obj_refcntNow(root), 1);
|
|
Arg* refArg = arg_setRef(NULL, "", root);
|
|
EXPECT_EQ(obj_refcntNow(root), 2);
|
|
arg_deinit(refArg);
|
|
EXPECT_EQ(obj_refcntNow(root), 1);
|
|
obj_deinit(root);
|
|
EXPECT_EQ(pikaMemNow(), 0);
|
|
}
|
|
|
|
TEST(gc, ref1) {
|
|
/* init */
|
|
PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
|
|
/* run */
|
|
obj_run(pikaMain, "mem = PikaStdLib.MemChecker()");
|
|
PikaObj* mem = (PikaObj*)obj_getPtr(pikaMain, "mem");
|
|
EXPECT_EQ(obj_refcntNow(mem), 1);
|
|
/* deinit */
|
|
obj_deinit(pikaMain);
|
|
EXPECT_EQ(pikaMemNow(), 0);
|
|
}
|
|
|
|
TEST(gc, ref121) {
|
|
/* init */
|
|
PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
|
|
/* run */
|
|
obj_run(pikaMain, "mem = PikaStdLib.MemChecker()");
|
|
PikaObj* mem = (PikaObj*)obj_getPtr(pikaMain, "mem");
|
|
EXPECT_EQ(obj_refcntNow(mem), 1);
|
|
obj_run(pikaMain, "mem2 = mem");
|
|
EXPECT_EQ(obj_refcntNow(mem), 2);
|
|
obj_removeArg(pikaMain, "mem2");
|
|
EXPECT_EQ(obj_refcntNow(mem), 1);
|
|
/* deinit */
|
|
obj_deinit(pikaMain);
|
|
EXPECT_EQ(pikaMemNow(), 0);
|
|
}
|
|
|
|
TEST(gc, ref12) {
|
|
/* init */
|
|
PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
|
|
/* run */
|
|
obj_run(pikaMain, "mem = PikaStdLib.MemChecker()");
|
|
PikaObj* mem = (PikaObj*)obj_getPtr(pikaMain, "mem");
|
|
EXPECT_EQ(obj_refcntNow(mem), 1);
|
|
obj_run(pikaMain, "mem2 = mem");
|
|
EXPECT_EQ(obj_refcntNow(mem), 2);
|
|
/* deinit */
|
|
obj_deinit(pikaMain);
|
|
EXPECT_EQ(pikaMemNow(), 0);
|
|
}
|
|
|
|
TEST(gc, ref1210) {
|
|
/* init */
|
|
PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
|
|
/* run */
|
|
obj_run(pikaMain, "mem = PikaStdLib.MemChecker()");
|
|
PikaObj* mem = (PikaObj*)obj_getPtr(pikaMain, "mem");
|
|
EXPECT_EQ(obj_refcntNow(mem), 1);
|
|
obj_run(pikaMain, "mem2 = mem");
|
|
EXPECT_EQ(obj_refcntNow(mem), 2);
|
|
obj_removeArg(pikaMain, "mem2");
|
|
EXPECT_EQ(obj_refcntNow(mem), 1);
|
|
/* deinit */
|
|
obj_deinit(pikaMain);
|
|
EXPECT_EQ(pikaMemNow(), 0);
|
|
}
|
|
|
|
TEST(gc, ref_move) {
|
|
/* init */
|
|
PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
|
|
/* run */
|
|
obj_run(pikaMain, "mem = PikaStdLib.MemChecker()");
|
|
PikaObj* mem = (PikaObj*)obj_getPtr(pikaMain, "mem");
|
|
EXPECT_EQ(obj_refcntNow(mem), 1);
|
|
obj_run(pikaMain, "mem2 = mem");
|
|
EXPECT_EQ(obj_refcntNow(mem), 2);
|
|
obj_removeArg(pikaMain, "mem");
|
|
EXPECT_EQ(obj_refcntNow(mem), 1);
|
|
/* deinit */
|
|
obj_deinit(pikaMain);
|
|
EXPECT_EQ(pikaMemNow(), 0);
|
|
}
|
|
|
|
TEST(gc, factory) {
|
|
/* init */
|
|
PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
|
|
/* run */
|
|
obj_run(pikaMain,
|
|
"def factory():\n"
|
|
" _mem = PikaStdLib.MemChecker()\n"
|
|
" return _mem\n"
|
|
"mem = factory()\n"
|
|
);
|
|
/* collect */
|
|
PikaObj* mem = obj_getObj(pikaMain, "mem");
|
|
EXPECT_EQ(obj_refcntNow(mem), 1);
|
|
/* deinit */
|
|
obj_deinit(pikaMain);
|
|
EXPECT_EQ(pikaMemNow(), 0);
|
|
}
|
|
|
|
TEST(gc, not_out) {
|
|
/* init */
|
|
PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
|
|
/* run */
|
|
obj_run(pikaMain,
|
|
"PikaStdLib.MemChecker()\n"
|
|
);
|
|
/* deinit */
|
|
obj_deinit(pikaMain);
|
|
EXPECT_EQ(pikaMemNow(), 0);
|
|
}
|