Implements initial math library, several reworks for Userdata memory management
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
2019-08-17 14:42:48 +02:00
parent 13b382def2
commit 5e96250d96
11 changed files with 167 additions and 46 deletions

View File

@@ -22,14 +22,20 @@ class ModuleHandler{
MODULES.clear();
}
};
static Internal _internal;
static Internal* _internal;
static Internal* GetInternal(){
if (!_internal)
_internal = new Internal();
return _internal;
}
inline static bool DoesModuleExist(const string& moduleName){
return _internal.MODULES.find(moduleName) != _internal.MODULES.end();
return GetInternal()->MODULES.find(moduleName) != GetInternal()->MODULES.end();
}
inline static Script* ResolveModule(const string& moduleName){
return _internal.MODULES[moduleName];
return GetInternal()->MODULES[moduleName];
}
public:
@@ -39,7 +45,7 @@ public:
}
};
ModuleHandler::Internal ModuleHandler::_internal;
ModuleHandler::Internal* ModuleHandler::_internal = nullptr;
TEST_CASE( "Require simple return script", "[integration]" ) {
ModuleHandler::Initialize();

View File

@@ -65,7 +65,7 @@ end
delete parameter;
delete script;
delete variable;
UserDataStorage::ClearTypes();
UserDataStorage::RemoveType(HashedString::ConstHash("testObject"));
}
TEST_CASE( "Sets UserData value", "[integration]" ) {
@@ -84,7 +84,7 @@ end
REQUIRE(obj->foo == 5000);
delete obj;
delete parameter;
UserDataStorage::ClearTypes();
UserDataStorage::RemoveType(HashedString::ConstHash("testObject"));
}
TEST_CASE( "Calls UserData function", "[integration]" ) {
@@ -104,7 +104,7 @@ end
delete obj;
delete parameter;
delete result;
UserDataStorage::ClearTypes();
UserDataStorage::RemoveType(HashedString::ConstHash("testObject"));
}
TEST_CASE( "Calls UserData function with parameters", "[integration]" ) {
@@ -124,7 +124,7 @@ end
delete obj;
delete parameter;
delete result;
UserDataStorage::ClearTypes();
UserDataStorage::RemoveType(HashedString::ConstHash("testObject"));
}
TEST_CASE( "Gets userdata vector value", "[integration]" ) {
@@ -148,7 +148,7 @@ end
delete result;
delete script;
delete func;
UserDataStorage::ClearTypes();
UserDataStorage::RemoveType(HashedString::ConstHash("testObject"));
}
TEST_CASE( "Sets userdata vector value", "[integration]" ) {
@@ -170,7 +170,7 @@ end
delete parameter;
delete script;
delete func;
UserDataStorage::ClearTypes();
UserDataStorage::RemoveType(HashedString::ConstHash("testObject"));
}
TEST_CASE( "Iterate over userdata vector keys", "[integration]" ) {
@@ -197,7 +197,7 @@ end
delete script;
delete func;
delete result;
UserDataStorage::ClearTypes();
UserDataStorage::RemoveType(HashedString::ConstHash("testObject"));
}
TEST_CASE( "Iterate over userdata vector values", "[integration]" ) {
@@ -224,7 +224,7 @@ end
delete script;
delete func;
delete result;
UserDataStorage::ClearTypes();
UserDataStorage::RemoveType(HashedString::ConstHash("testObject"));
}
#endif

View File

@@ -0,0 +1,26 @@
#ifdef TESTS_BUILD
#include <catch.hpp>
#include "../src/Script.hpp"
#include "../../src/ScriptOptions.hpp"
#include <cstring>
using namespace Porygon;
TEST_CASE( "Abs positive returns positive", "[integration]" ) {
Script* script = Script::Create(u"return math.abs(684)");
REQUIRE(!script->Diagnostics -> HasErrors());
auto result = script -> Evaluate();
CHECK(result->EvaluateInteger() == 684);
delete script;
}
TEST_CASE( "Abs negative returns positive", "[integration]" ) {
Script* script = Script::Create(u"return math.abs(-684)");
REQUIRE(!script->Diagnostics -> HasErrors());
auto result = script -> Evaluate();
CHECK(result->EvaluateInteger() == 684);
delete script;
}
#endif