tmp
This commit is contained in:
parent
101ef375ef
commit
5c7ee99d43
32 changed files with 232 additions and 2023 deletions
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue