This commit is contained in:
Ilusha 2024-03-14 09:00:14 +03:00 committed by Ilya Shurupov
parent 101ef375ef
commit 5c7ee99d43
32 changed files with 232 additions and 2023 deletions

View file

@ -44,104 +44,118 @@ auto script = R"(
print false;
)";
TEST_DEF_STATIC(Entry) {
auto method = NDO_CAST(MethodObject, NDO->create("method"));
auto interpreter = NDO_CAST(InterpreterObject, NDO->create("interpreter"));
SUITE(Interpreter) {
TEST(Entry) {
objTestModule.initialize();
{
auto method = NDO_CAST(MethodObject, NDO->create("method"));
auto interpreter = NDO_CAST(InterpreterObject, NDO->create("interpreter"));
interpreter->getMember<LinkObject>("target method")->setLink(method);
interpreter->getMember<LinkObject>("target method")->setLink(method);
method->mScript->mReadable->val = script;
method->compile();
method->mScript->mReadable->val = script;
method->compile();
interpreter->exec();
interpreter->exec();
NDO->destroy(interpreter);
NDO->destroy(interpreter);
printf("\n");
}
TEST_DEF_STATIC(SimpleSave) {
auto method = NDO_CAST(MethodObject, NDO->create("method"));
auto interpreter = NDO_CAST(InterpreterObject, NDO->create("interpreter"));
interpreter->getMember<LinkObject>("target method")->setLink(method);
method->mScript->mReadable->val = script;
method->compile();
interpreter->exec();
NDO->save(interpreter, "interp.o");
auto interpreterLoaded = NDO_CAST(InterpreterObject, NDO->load("interp.o"));
interpreterLoaded->exec();
NDO->destroy(interpreterLoaded);
NDO->destroy(interpreter);
printf("\n");
}
TEST_DEF_STATIC(Simple) {
auto compileStartCount = getObjCount();
auto method = NDO_CAST(MethodObject, NDO->create("method"));
auto interpreter = NDO_CAST(InterpreterObject, NDO->create("interpreter"));
interpreter->getMember<LinkObject>("target method")->setLink(method);
auto exec = [&](const char* script){
method->mScript->mReadable->val = script;
method->compile();
auto startCount = getObjCount();
interpreter->exec();
if (getObjCount() != startCount) {
TEST(false && "Mem leaks in interpreter");
printf("\n");
}
printf("\n");
};
exec("10 + 15;");
exec("print 10 + 15 * 10;");
exec("print 10 + 15 * (10 + 10) + 5;");
exec("print 10 + 15;");
exec("print (10 + 15) * 20;");
exec("var k : int;");
exec("var k : int; print k;");
NDO->destroy(interpreter);
if (getObjCount() != compileStartCount) {
TEST(false && "Mem leaks in compiler and interpreter");
objTestModule.deinitialize();
}
}
TEST_DEF_STATIC(Complex) {
auto method = NDO_CAST(MethodObject, NDO->create("method"));
auto interpreter = NDO_CAST(InterpreterObject, NDO->create("interpreter"));
TEST(SimpleSave) {
objTestModule.initialize();
interpreter->getMember<LinkObject>("target method")->setLink(method);
{
auto method = NDO_CAST(MethodObject, NDO->create("method"));
auto interpreter = NDO_CAST(InterpreterObject, NDO->create("interpreter"));
method->mScript->mReadable->val = script1;
method->compile();
interpreter->getMember<LinkObject>("target method")->setLink(method);
interpreter->exec();
method->mScript->mReadable->val = script;
method->compile();
NDO->destroy(interpreter);
}
interpreter->exec();
NDO->save(interpreter, "interp.o");
auto interpreterLoaded = NDO_CAST(InterpreterObject, NDO->load("interp.o"));
interpreterLoaded->exec();
NDO->destroy(interpreterLoaded);
NDO->destroy(interpreter);
printf("\n");
}
objTestModule.deinitialize();
}
TEST_OFF(Simple) {
objTestModule.initialize();
{
auto compileStartCount = getObjCount();
auto method = NDO_CAST(MethodObject, NDO->create("method"));
auto interpreter = NDO_CAST(InterpreterObject, NDO->create("interpreter"));
interpreter->getMember<LinkObject>("target method")->setLink(method);
auto exec = [&](const char* script) {
method->mScript->mReadable->val = script;
method->compile();
auto startCount = getObjCount();
interpreter->exec();
if (getObjCount() != startCount) {
CHECK(false && "Mem leaks in interpreter");
}
printf("\n");
};
exec("10 + 15;");
exec("print 10 + 15 * 10;");
exec("print 10 + 15 * (10 + 10) + 5;");
exec("print 10 + 15;");
exec("print (10 + 15) * 20;");
exec("var k : int;");
exec("var k : int; print k;");
NDO->destroy(interpreter);
if (getObjCount() != compileStartCount) {
CHECK(false && "Mem leaks in compiler and interpreter");
}
}
objTestModule.deinitialize();
}
TEST(Complex) {
objTestModule.initialize();
{
auto method = NDO_CAST(MethodObject, NDO->create("method"));
auto interpreter = NDO_CAST(InterpreterObject, NDO->create("interpreter"));
interpreter->getMember<LinkObject>("target method")->setLink(method);
method->mScript->mReadable->val = script1;
method->compile();
interpreter->exec();
NDO->destroy(interpreter);
}
TEST_DEF(Interpreter) {
if (objTestModule.initialize()) {
testEntry();
testSimple();
testSimpleSave();
// testComplex();
objTestModule.deinitialize();
}
}