move stuff to Handle

This commit is contained in:
2023-12-27 00:11:31 +01:00
parent 6829aabfa6
commit f6a59c85e8
14 changed files with 257 additions and 250 deletions

View File

@@ -4,89 +4,98 @@
#include <gtest/gtest.h>
#include "ConsUtils.h"
#include "MemoryContext.h"
using namespace ConsUtils;
TEST(GCTest, GCTest) {
MemoryContext mc;
{
MCHandle c = cons(nullptr, nullptr);
Handle c = Handle::cons(nullptr, nullptr);
mc.request_gc_and_wait();
append(c, makeNumCell(1));
append(c, makeNumCell(2));
Handle::append(c, Handle::makeNumCell(1));
Handle::append(c, Handle::makeNumCell(2));
mc.request_gc_and_wait();
EXPECT_EQ(val(car(c)), 1);
EXPECT_EQ(val(car(cdr(c))), 2);
EXPECT_EQ(c.car().val(), 1);
EXPECT_EQ(c.cdr().car().val(), 2);
}
mc.request_gc_and_wait();
mc.request_gc_and_wait();
mc.request_gc_and_wait();
EXPECT_EQ(mc.cell_count(), 0);
{
MCHandle c = cons(nullptr, nullptr);
Handle c = Handle::cons(nullptr, nullptr);
mc.request_gc_and_wait();
push(c, makeNumCell(1));
push(c, makeNumCell(2));
Handle::push(c, Handle::makeNumCell(1));
Handle::push(c, Handle::makeNumCell(2));
mc.request_gc_and_wait();
EXPECT_EQ(val(car(c)), 2);
EXPECT_EQ(val(car(cdr(c))), 1);
EXPECT_EQ(c.car().val(), 2);
EXPECT_EQ(c.cdr().car().val(), 1);
}
mc.request_gc_and_wait();
mc.request_gc_and_wait();
mc.request_gc_and_wait();
EXPECT_EQ(mc.cell_count(), 0);
}
TEST(GCTest, GCTestAppend) {
MemoryContext mc;
for (int i = 0; i < 25000; i++) {
MCHandle c = cons(nullptr, nullptr);
Handle c = Handle::cons(nullptr, nullptr);
mc.request_gc();
append(c, makeNumCell(1));
Handle::append(c, Handle::makeNumCell(1));
mc.request_gc();
EXPECT_EQ(val(car(c)), 1);
EXPECT_EQ(c.car().val(), 1);
}
mc.request_gc_and_wait();
mc.request_gc_and_wait();
mc.request_gc_and_wait();
EXPECT_EQ(mc.cell_count(), 0);
}
TEST(GCTest, GCTestPop) {
MemoryContext mc;
{
MCHandle c = cons(nullptr, nullptr);
Handle c = Handle::cons(nullptr, nullptr);
static constexpr int test_size = 20000;
for (int i = 0; i < test_size; i++) {
mc.request_gc();
push(c, makeNumCell(i));
Handle::push(c, Handle::makeNumCell(i));
}
for (int i = test_size - 1; i >= 0; i--) {
mc.request_gc();
EXPECT_EQ(i, val(pop(c)));
EXPECT_EQ(i, Handle::pop(c).val());
}
}
mc.request_gc_and_wait();
mc.request_gc_and_wait();
mc.request_gc_and_wait();
EXPECT_EQ(mc.cell_count(), 0);
}
TEST(GCTest, GCTestAppend2) {
MemoryContext mc;
MCHandle c = cons(nullptr, nullptr);
Handle c = Handle::cons(nullptr, nullptr);
static constexpr int test_size = 2000;
for (int i = 0; i < test_size; i++) {
mc.request_gc();
append(c, makeNumCell(i));
Handle::append(c, Handle::makeNumCell(i));
}
for (int i = 0; i < test_size; i++) {
mc.request_gc();
EXPECT_EQ(i, val(pop(c)));
EXPECT_EQ(i, Handle::pop(c).val());
}
mc.request_gc_and_wait();
mc.request_gc_and_wait();
EXPECT_EQ(mc.cell_count(), 0);
}
TEST(GCTest, GCTestAppend3) {
MemoryContext mc;
for (int i = 0; i < 250000; i++) {
Handle c = Handle::cons(nullptr, nullptr);
Handle::append(c, Handle::makeNumCell(1));
Handle::append(c, Handle::makeNumCell(2));
mc.request_gc();
Handle n = c.cdr();
c.setcdr(nullptr);
EXPECT_EQ(n.car().val(), 2);
EXPECT_EQ(c.car().val(), 1);
}
mc.request_gc_and_wait();
mc.request_gc_and_wait();
mc.request_gc_and_wait();
EXPECT_EQ(mc.cell_count(), 0);
}

View File

@@ -1,6 +1,5 @@
#include <gtest/gtest.h>
#include "ConsUtils.h"
#include "VM.h"
TEST(VMTest, BasicHello) {
@@ -9,12 +8,12 @@ TEST(VMTest, BasicHello) {
{
MemoryContext mc;
VM vm(ssin, ssout);
MCHandle newc(ConsUtils::cons(nullptr, nullptr));
ConsUtils::append(newc, ConsUtils::makeStrCell("NIL"));
ConsUtils::append(newc, ConsUtils::makeStrCell("LDC"));
ConsUtils::append(newc, ConsUtils::makeNumCell('h'));
ConsUtils::append(newc, ConsUtils::makeStrCell("PUTCHAR"));
ConsUtils::append(newc, ConsUtils::makeStrCell("STOP"));
Handle newc(Handle::cons(nullptr, nullptr));
Handle::append(newc, Handle::makeStrCell("NIL"));
Handle::append(newc, Handle::makeStrCell("LDC"));
Handle::append(newc, Handle::makeNumCell('h'));
Handle::append(newc, Handle::makeStrCell("PUTCHAR"));
Handle::append(newc, Handle::makeStrCell("STOP"));
vm.loadControl(newc);
vm.run();
}

View File

@@ -63,7 +63,6 @@ TEST(VMWithParserTest, RecFunction) {
}
mc.request_gc_and_wait();
mc.request_gc_and_wait();
mc.request_gc_and_wait();
EXPECT_EQ(mc.cell_count(), 0);
ssout.flush();
EXPECT_EQ(ssout.str(), "6765");