-unittest runner works for non betterC build -working unittest coverage generation -unittest runner support for named tests. Simple regex is supported (* as any substring) and two list of expressions are used, one for include regex and one for exclude regex
185 lines
No EOL
4.9 KiB
D
185 lines
No EOL
4.9 KiB
D
module tests.basic;
|
|
|
|
import ecs.manager;
|
|
import ecs.core;
|
|
|
|
struct CInt
|
|
{
|
|
mixin ECS.Component;
|
|
|
|
alias value this;
|
|
|
|
int value = 1;
|
|
}
|
|
|
|
struct CFloat
|
|
{
|
|
mixin ECS.Component;
|
|
|
|
alias value this;
|
|
|
|
float value = 2.0;
|
|
}
|
|
|
|
struct CDouble
|
|
{
|
|
mixin ECS.Component;
|
|
|
|
alias value this;
|
|
|
|
double value = 3.0;
|
|
}
|
|
|
|
struct CLong
|
|
{
|
|
mixin ECS.Component;
|
|
|
|
alias value this;
|
|
|
|
long value = 10;
|
|
}
|
|
|
|
struct CShort
|
|
{
|
|
mixin ECS.Component;
|
|
|
|
alias value this;
|
|
|
|
short value = 12;
|
|
}
|
|
|
|
struct CUnregistered
|
|
{
|
|
mixin ECS.Component;
|
|
|
|
alias value this;
|
|
|
|
short value = 12;
|
|
}
|
|
|
|
void beforeEveryTest()
|
|
{
|
|
gEM.initialize(1);
|
|
|
|
gEM.registerComponent!CInt;
|
|
gEM.registerComponent!CFloat;
|
|
gEM.registerComponent!CDouble;
|
|
gEM.registerComponent!CLong;
|
|
gEM.registerComponent!CShort;
|
|
}
|
|
|
|
void afterEveryTest()
|
|
{
|
|
gEM.destroy();
|
|
}
|
|
|
|
@("AddEntity")
|
|
unittest
|
|
{
|
|
ushort[2] ids = [CInt.component_id, CFloat.component_id];
|
|
EntityTemplate* tmpl_ = gEM.allocateTemplate(ids);
|
|
assert(tmpl_.info.components.length == 2);
|
|
assert(tmpl_.getComponent!CInt);
|
|
assert(tmpl_.getComponent!CFloat);
|
|
assert(!tmpl_.getComponent!CLong);
|
|
assert(!tmpl_.getComponent!CUnregistered);
|
|
assert(*tmpl_.getComponent!CInt == 1);
|
|
assert(*tmpl_.getComponent!CFloat == 2.0);
|
|
|
|
Entity* entity = gEM.addEntity(tmpl_);
|
|
assert(entity.getComponent!CInt);
|
|
assert(entity.getComponent!CFloat);
|
|
assert(*entity.getComponent!CInt == 1);
|
|
assert(*entity.getComponent!CFloat == 2.0);
|
|
}
|
|
|
|
//allocate templates
|
|
@("AllocateTemplates")
|
|
unittest
|
|
{
|
|
//basic template allocation
|
|
ushort[2] ids = [CInt.component_id, CFloat.component_id];
|
|
EntityTemplate* tmpl_ = gEM.allocateTemplate(ids);
|
|
assert(tmpl_.info.components.length == 2);
|
|
assert(tmpl_.getComponent!CInt);
|
|
assert(tmpl_.getComponent!CFloat);
|
|
assert(*tmpl_.getComponent!CInt == 1);
|
|
assert(*tmpl_.getComponent!CFloat == 2.0);
|
|
*tmpl_.getComponent!CInt = 4;
|
|
*tmpl_.getComponent!CFloat = 5.0;
|
|
|
|
//allocate template from template with additional component
|
|
ushort[1] ids2 = [CDouble.component_id];
|
|
EntityTemplate* tmpl_2 = gEM.allocateTemplate(tmpl_, ids2);
|
|
assert(tmpl_2.info.components.length == 3);
|
|
assert(tmpl_2.getComponent!CInt);
|
|
assert(tmpl_2.getComponent!CFloat);
|
|
assert(tmpl_2.getComponent!CDouble);
|
|
assert(*tmpl_2.getComponent!CInt == 4);
|
|
assert(*tmpl_2.getComponent!CFloat == 5.0);
|
|
assert(*tmpl_2.getComponent!CDouble == 3.0);
|
|
|
|
Entity* entity = gEM.addEntity(tmpl_);
|
|
gEM.addComponents(entity.id, CDouble(8.0));
|
|
|
|
//apply entity changes
|
|
gEM.commit();
|
|
|
|
//allocate template as entity copy
|
|
EntityTemplate* tmpl_3 = gEM.allocateTemplate(entity.id);
|
|
assert(tmpl_3.info.components.length == 3);
|
|
assert(tmpl_3.getComponent!CInt);
|
|
assert(tmpl_3.getComponent!CFloat);
|
|
assert(tmpl_3.getComponent!CDouble);
|
|
assert(*tmpl_3.getComponent!CInt == 4);
|
|
assert(*tmpl_3.getComponent!CFloat == 5.0);
|
|
assert(*tmpl_3.getComponent!CDouble == 8.0);
|
|
|
|
//allocate template with entity data but default values
|
|
EntityTemplate* tmpl_4 = gEM.allocateTemplate(entity.id, true);
|
|
assert(tmpl_4.info.components.length == 3);
|
|
assert(tmpl_4.getComponent!CInt);
|
|
assert(tmpl_4.getComponent!CFloat);
|
|
assert(tmpl_4.getComponent!CDouble);
|
|
assert(*tmpl_4.getComponent!CInt == 1);
|
|
assert(*tmpl_4.getComponent!CFloat == 2.0);
|
|
assert(*tmpl_4.getComponent!CDouble == 3.0);
|
|
|
|
//allocate template from template with two additional component
|
|
ushort[2] ids3 = [CDouble.component_id, CLong.component_id];
|
|
EntityTemplate* tmpl_5 = gEM.allocateTemplate(tmpl_, ids3);
|
|
assert(tmpl_5.info.components.length == 4);
|
|
assert(tmpl_5.getComponent!CInt);
|
|
assert(tmpl_5.getComponent!CFloat);
|
|
assert(tmpl_5.getComponent!CDouble);
|
|
assert(tmpl_5.getComponent!CLong);
|
|
assert(*tmpl_5.getComponent!CInt == 4);
|
|
assert(*tmpl_5.getComponent!CFloat == 5.0);
|
|
assert(*tmpl_5.getComponent!CDouble == 3.0);
|
|
assert(*tmpl_5.getComponent!CLong == 10);
|
|
|
|
//allocate template from template without one component
|
|
ushort[1] rem_ids = [CFloat.component_id];
|
|
EntityTemplate* tmpl_6 = gEM.allocateTemplate(tmpl_, null, rem_ids);
|
|
assert(tmpl_6.info.components.length == 1);
|
|
assert(tmpl_6.getComponent!CInt);
|
|
assert(*tmpl_6.getComponent!CInt == 4);
|
|
|
|
//allocate template from template without one component and two additional
|
|
EntityTemplate* tmpl_7 = gEM.allocateTemplate(tmpl_, ids3, rem_ids);
|
|
assert(tmpl_7.info.components.length == 3);
|
|
assert(tmpl_7.getComponent!CInt);
|
|
assert(tmpl_7.getComponent!CDouble);
|
|
assert(tmpl_7.getComponent!CLong);
|
|
assert(*tmpl_7.getComponent!CInt == 4);
|
|
assert(*tmpl_7.getComponent!CDouble == 3.0);
|
|
assert(*tmpl_7.getComponent!CLong == 10);
|
|
|
|
gEM.freeTemplate(tmpl_);
|
|
gEM.freeTemplate(tmpl_2);
|
|
gEM.freeTemplate(tmpl_3);
|
|
gEM.freeTemplate(tmpl_4);
|
|
gEM.freeTemplate(tmpl_5);
|
|
gEM.freeTemplate(tmpl_6);
|
|
gEM.freeTemplate(tmpl_7);
|
|
} |