Implements iterator for user data collection
Some checks failed
continuous-integration/drone/push Build is failing

This commit is contained in:
2019-08-15 11:43:08 +02:00
parent 5387cd15ff
commit 471dbac3b9
15 changed files with 151 additions and 14 deletions

View File

@@ -8,10 +8,10 @@
#include "../../src/UserData/UserDataFunction.hpp"
#include "../../src/UserData/UserDataFunctionType.hpp"
#include "../../src/UserData/UserDataTemplates.hpp"
#include "../../src/UserData/UserDataCollectionType.hpp"
#include "../../src/UserData/UserDataCollectionValue.hpp"
#include "../../src/UserData/UserDataCollections/UserDataCollectionType.hpp"
#include "../../src/UserData/UserDataCollections/UserDataCollectionValue.hpp"
#include "../../src/UserData/UserDataCollections/UserDataCollectionRangeIterator.hpp"
#include "../../src/Evaluator/EvalValues/EvalValueHelper.hpp"
#include "../../src/Utilities/Random.hpp"
using namespace Porygon;
using namespace Porygon::UserData;
@@ -173,5 +173,58 @@ end
UserDataStorage::ClearTypes();
}
TEST_CASE( "Iterate over userdata vector keys", "[integration]" ) {
UserDataStorage::RegisterType(HashedString::ConstHash("testObject"), UserDataTestObject::__createUserData());
Script* script = Script::Create(R"(
function testFunc(testObject obj)
local val = 0
for i in obj.fooVector do
val = val + i
end
return val
end
)");
REQUIRE(!script->Diagnostics -> HasErrors());
script->Evaluate();
auto func = (GenericFunctionEvalValue*)script -> GetVariable(u"testFunc");
auto funcType = func -> GetType();
auto obj = new UserDataTestObject();
auto parameter = new UserDataValue(HashedString::ConstHash("testObject"), obj);
auto result = script->CallFunction(u"testFunc", {parameter});
REQUIRE(result->EvaluateInteger() == 6);
delete obj;
delete parameter;
delete script;
delete func;
delete result;
UserDataStorage::ClearTypes();
}
TEST_CASE( "Iterate over userdata vector values", "[integration]" ) {
UserDataStorage::RegisterType(HashedString::ConstHash("testObject"), UserDataTestObject::__createUserData());
Script* script = Script::Create(R"(
function testFunc(testObject obj)
local val = 0
for i, v in obj.fooVector do
val = val + v
end
return val
end
)");
REQUIRE(!script->Diagnostics -> HasErrors());
script->Evaluate();
auto func = (GenericFunctionEvalValue*)script -> GetVariable(u"testFunc");
auto funcType = func -> GetType();
auto obj = new UserDataTestObject();
auto parameter = new UserDataValue(HashedString::ConstHash("testObject"), obj);
auto result = script->CallFunction(u"testFunc", {parameter});
REQUIRE(result->EvaluateInteger() == 55);
delete obj;
delete parameter;
delete script;
delete func;
delete result;
UserDataStorage::ClearTypes();
}
#endif