| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 |
- #include "test_common.h"
- TEST_START
- 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);
- }
- TEST(gc, heap_failed1) {
- /* init */
- PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
- /* run */
- obj_run(pikaMain,
- "recv_buf = PikaStdData.List()\n"
- "RECV_MAX_SIZE=128\n"
- "iteri = 0\n"
- "for i in range(0, int(RECV_MAX_SIZE)):\n"
- " recv_buf.append(0)\n"
- " iteri += 1\n"
- "iteri");
- /* assert */
- EXPECT_STREQ("128\r\n", log_buff[0]);
- #if PIKA_GC_MARK_SWEEP_ENABLE
- int cnt = pikaGC_count();
- EXPECT_EQ(cnt != 0, 1);
- pikaGC_markDump();
- int cnt_marked = pikaGC_countMarked();
- EXPECT_EQ(cnt, cnt_marked);
- /* deinit */
- #endif
- obj_deinit(pikaMain);
- #if PIKA_GC_MARK_SWEEP_ENABLE
- cnt = pikaGC_count();
- EXPECT_EQ(cnt, 0);
- #endif
- EXPECT_EQ(pikaMemNow(), 0);
- }
- #if PIKA_GC_MARK_SWEEP_ENABLE
- TEST(gc, circle) {
- /* init */
- PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
- /* run */
- pikaVM_runSingleFile(pikaMain, "test/python/gc/gc_circle.py");
- /* assert */
- /* deinit */
- obj_deinit(pikaMain);
- EXPECT_EQ(pikaMemNow(), 0);
- }
- TEST(gc, circle2) {
- /* init */
- PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
- /* run */
- pikaVM_runSingleFile(pikaMain, "test/python/gc/gc_circle2.py");
- /* assert */
- /* deinit */
- obj_deinit(pikaMain);
- EXPECT_EQ(pikaMemNow(), 0);
- }
- TEST(gc, tree1) {
- /* init */
- PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
- /* run */
- pikaVM_runSingleFile(pikaMain, "test/python/gc/gc_tree1.py");
- /* assert */
- /* deinit */
- obj_deinit(pikaMain);
- EXPECT_EQ(pikaMemNow(), 0);
- }
- #endif
- TEST_END
|