tmp
This commit is contained in:
parent
aa2d8f1200
commit
c2ad9ce501
32 changed files with 232 additions and 2023 deletions
|
|
@ -1,6 +1,9 @@
|
|||
|
||||
#include "Testing.hpp"
|
||||
#include "Module.hpp"
|
||||
|
||||
#include "primitives/primitives.h"
|
||||
#include <UnitTest++/UnitTest++.h>
|
||||
#include <UnitTest++/TestReporterStdout.h>
|
||||
|
||||
extern tp::ModuleManifest objTestModule;
|
||||
extern tp::ModuleManifest objTestModule;
|
||||
|
||||
#define TEST_OFF(name) static void name()
|
||||
|
|
@ -2,6 +2,7 @@
|
|||
#include "ObjectTests.hpp"
|
||||
|
||||
#include "compiler/function.h"
|
||||
#include "parser/parser.h"
|
||||
#include "core/object.h"
|
||||
#include "interpreter/interpreter.h"
|
||||
#include "primitives/interpreterobject.h"
|
||||
|
|
@ -11,47 +12,51 @@
|
|||
using namespace tp;
|
||||
using namespace obj;
|
||||
|
||||
TEST_DEF_STATIC(Basic) {
|
||||
{
|
||||
// no errors
|
||||
auto method = NDO_CAST(MethodObject, NDO->create("method"));
|
||||
SUITE(Compiler) {
|
||||
TEST(Basic) {
|
||||
objTestModule.initialize();
|
||||
|
||||
method->mScript->mReadable->val = "print 1 * 20 + 10;";
|
||||
method->compile();
|
||||
{
|
||||
// no errors
|
||||
auto method = NDO_CAST(MethodObject, NDO->create("method"));
|
||||
|
||||
NDO->destroy(method);
|
||||
method->mScript->mReadable->val = "print 1 * 20 + 10;";
|
||||
method->compile();
|
||||
|
||||
assertNoLeaks();
|
||||
}
|
||||
NDO->destroy(method);
|
||||
|
||||
{
|
||||
// with errors
|
||||
auto method = NDO_CAST(MethodObject, NDO->create("method"));
|
||||
assertNoLeaks();
|
||||
}
|
||||
|
||||
method->mScript->mReadable->val = "print undefinedVariable;";
|
||||
method->compile();
|
||||
{
|
||||
// with errors
|
||||
auto method = NDO_CAST(MethodObject, NDO->create("method"));
|
||||
|
||||
NDO->destroy(method);
|
||||
method->mScript->mReadable->val = "print undefinedVariable;";
|
||||
method->compile();
|
||||
|
||||
assertNoLeaks();
|
||||
}
|
||||
}
|
||||
NDO->destroy(method);
|
||||
|
||||
TEST_DEF_STATIC(ErrorHandling) {
|
||||
Parser parser;
|
||||
assertNoLeaks();
|
||||
}
|
||||
|
||||
String stream = "var i = true; print (i + 1) * 10; invalidCharacter ";
|
||||
auto res = parser.parse(stream);
|
||||
|
||||
TEST(res.isError);
|
||||
|
||||
delete res.scope;
|
||||
}
|
||||
|
||||
TEST_DEF(Compiler) {
|
||||
if (objTestModule.initialize()) {
|
||||
testBasic();
|
||||
testErrorHandling();
|
||||
objTestModule.deinitialize();
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
TEST(ErrorHandling) {
|
||||
objTestModule.initialize();
|
||||
|
||||
obj::Parser parser;
|
||||
|
||||
String stream = "var i = true; print (i + 1) * 10; invalidCharacter ";
|
||||
auto res = parser.parse(stream);
|
||||
|
||||
CHECK(res.isError);
|
||||
|
||||
delete res.scope;
|
||||
|
||||
objTestModule.deinitialize();
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
|
@ -8,29 +8,30 @@
|
|||
using namespace tp;
|
||||
using namespace obj;
|
||||
|
||||
TEST_DEF_STATIC(BasicAPI) {
|
||||
auto integer = NDO_CAST(IntObject, NDO->create("int"));
|
||||
SUITE(Core) {
|
||||
TEST(BasicAPI) {
|
||||
objTestModule.initialize();
|
||||
|
||||
integer->val = 10;
|
||||
{
|
||||
auto integer = NDO_CAST(IntObject, NDO->create("int"));
|
||||
|
||||
printf("%s\n", NDO->toString(integer).read());
|
||||
integer->val = 10;
|
||||
|
||||
NDO->save(integer, "tmp.o");
|
||||
auto savedInt = NDO->load("tmp.o");
|
||||
printf("%s\n", NDO->toString(integer).read());
|
||||
|
||||
printf("%s\n", NDO->toString(savedInt).read());
|
||||
NDO->save(integer, "tmp.o");
|
||||
auto savedInt = NDO->load("tmp.o");
|
||||
|
||||
TEST(NDO->compare(integer, savedInt));
|
||||
TEST(NDO_CAST(IntObject, savedInt));
|
||||
TEST(integer->val == NDO_CAST(IntObject, savedInt)->val);
|
||||
printf("%s\n", NDO->toString(savedInt).read());
|
||||
|
||||
NDO->destroy(integer);
|
||||
NDO->destroy(savedInt);
|
||||
}
|
||||
CHECK(NDO->compare(integer, savedInt));
|
||||
CHECK(NDO_CAST(IntObject, savedInt));
|
||||
CHECK(integer->val == NDO_CAST(IntObject, savedInt)->val);
|
||||
|
||||
NDO->destroy(integer);
|
||||
NDO->destroy(savedInt);
|
||||
}
|
||||
|
||||
TEST_DEF(Core) {
|
||||
if (objTestModule.initialize()) {
|
||||
testBasicAPI();
|
||||
objTestModule.deinitialize();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,58 +6,59 @@
|
|||
using namespace tp;
|
||||
using namespace obj;
|
||||
|
||||
TEST_DEF_STATIC(Basic) {
|
||||
{
|
||||
Parser parser;
|
||||
SUITE(Parser) {
|
||||
TEST(Basic) {
|
||||
objTestModule.initialize();
|
||||
|
||||
String stream = "";
|
||||
auto res = parser.parse(stream);
|
||||
{
|
||||
Parser parser;
|
||||
|
||||
TEST(!res.isError);
|
||||
String stream = "";
|
||||
auto res = parser.parse(stream);
|
||||
|
||||
delete res.scope;
|
||||
}
|
||||
CHECK(!res.isError);
|
||||
|
||||
{
|
||||
Parser parser;
|
||||
delete res.scope;
|
||||
}
|
||||
|
||||
String stream = "var i = true;";
|
||||
auto res = parser.parse(stream);
|
||||
{
|
||||
Parser parser;
|
||||
|
||||
TEST(!res.isError);
|
||||
String stream = "var i = true;";
|
||||
auto res = parser.parse(stream);
|
||||
|
||||
delete res.scope;
|
||||
}
|
||||
CHECK(!res.isError);
|
||||
|
||||
{
|
||||
Parser parser;
|
||||
delete res.scope;
|
||||
}
|
||||
|
||||
String stream = "var i = true; print (i + 1) * 10;";
|
||||
auto res = parser.parse(stream);
|
||||
{
|
||||
Parser parser;
|
||||
|
||||
TEST(!res.isError);
|
||||
String stream = "var i = true; print (i + 1) * 10;";
|
||||
auto res = parser.parse(stream);
|
||||
|
||||
delete res.scope;
|
||||
}
|
||||
}
|
||||
CHECK(!res.isError);
|
||||
|
||||
TEST_DEF_STATIC(ErrorHandling) {
|
||||
Parser parser;
|
||||
|
||||
String stream = "var i = true; print (i + 1) * 10; invalidCharacter ";
|
||||
auto res = parser.parse(stream);
|
||||
|
||||
TEST(res.isError);
|
||||
|
||||
delete res.scope;
|
||||
}
|
||||
|
||||
TEST_DEF(Parser) {
|
||||
if (objTestModule.initialize()) {
|
||||
|
||||
testBasic();
|
||||
testErrorHandling();
|
||||
delete res.scope;
|
||||
}
|
||||
|
||||
objTestModule.deinitialize();
|
||||
}
|
||||
}
|
||||
|
||||
TEST(ErrorHandling) {
|
||||
objTestModule.initialize();
|
||||
|
||||
{
|
||||
Parser parser;
|
||||
String stream = "var i = true; print (i + 1) * 10; invalidCharacter ";
|
||||
auto res = parser.parse(stream);
|
||||
|
||||
CHECK(res.isError);
|
||||
|
||||
delete res.scope;
|
||||
}
|
||||
|
||||
objTestModule.deinitialize();
|
||||
}
|
||||
}
|
||||
|
|
@ -11,28 +11,29 @@
|
|||
using namespace tp;
|
||||
using namespace obj;
|
||||
|
||||
TEST_DEF_STATIC(Dict) {
|
||||
auto integer = NDO_CAST(IntObject, NDO->create("int"));
|
||||
integer->val = 10;
|
||||
SUITE(PrimitiveObjects) {
|
||||
TEST(Dict) {
|
||||
objTestModule.initialize();
|
||||
|
||||
auto dict = NDO_CAST(DictObject, NDO->create("dict"));
|
||||
{
|
||||
auto integer = NDO_CAST(IntObject, NDO->create("int"));
|
||||
integer->val = 10;
|
||||
|
||||
dict->put("val", integer);
|
||||
auto dict = NDO_CAST(DictObject, NDO->create("dict"));
|
||||
|
||||
NDO->save(dict, "dict.o");
|
||||
dict->put("val", integer);
|
||||
|
||||
auto dictLoaded = NDO_CAST(DictObject, NDO->load("dict.o"));
|
||||
NDO->save(dict, "dict.o");
|
||||
|
||||
TEST(dictLoaded->presents("val").isValid());
|
||||
TEST(NDO_CAST(IntObject, dictLoaded->get("val"))->val == 10);
|
||||
auto dictLoaded = NDO_CAST(DictObject, NDO->load("dict.o"));
|
||||
|
||||
NDO->destroy(dict);
|
||||
NDO->destroy(dictLoaded);
|
||||
}
|
||||
CHECK(dictLoaded->presents("val").isValid());
|
||||
CHECK(NDO_CAST(IntObject, dictLoaded->get("val"))->val == 10);
|
||||
|
||||
NDO->destroy(dict);
|
||||
NDO->destroy(dictLoaded);
|
||||
}
|
||||
|
||||
TEST_DEF(Primitives) {
|
||||
if (objTestModule.initialize()) {
|
||||
testDict();
|
||||
objTestModule.deinitialize();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,23 +0,0 @@
|
|||
|
||||
#include "ObjectTests.hpp"
|
||||
|
||||
using namespace tp;
|
||||
using namespace obj;
|
||||
|
||||
void testParser();
|
||||
void testCore();
|
||||
void testPrimitives();
|
||||
void testInterpreter();
|
||||
|
||||
tp::ModuleManifest* objDeps[] = { &gModuleObjects, nullptr };
|
||||
tp::ModuleManifest objTestModule("ObjectsTests", nullptr, nullptr, objDeps);
|
||||
|
||||
int main() {
|
||||
|
||||
testParser();
|
||||
testCore();
|
||||
testPrimitives();
|
||||
testInterpreter();
|
||||
|
||||
return 0;
|
||||
}
|
||||
12
Objects/tests/main.cpp
Normal file
12
Objects/tests/main.cpp
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
|
||||
#include "ObjectTests.hpp"
|
||||
|
||||
#include "primitives/primitives.h"
|
||||
|
||||
tp::ModuleManifest* objDeps[] = { &obj::gModuleObjects, nullptr };
|
||||
tp::ModuleManifest objTestModule("ObjectsTests", nullptr, nullptr, objDeps);
|
||||
|
||||
#include <UnitTest++/UnitTest++.h>
|
||||
#include <UnitTest++/TestReporterStdout.h>
|
||||
|
||||
int main(int /*argc*/, char** /*argv*/) { return UnitTest::RunAllTests(); }
|
||||
Loading…
Add table
Add a link
Reference in a new issue