mirror of
https://github.com/kevinveenbirkenbach/infinito.git
synced 2025-01-09 22:17:26 +01:00
Implemented test for 3 dimensions
This commit is contained in:
parent
673ee26cbd
commit
1da8716d15
@ -1,16 +1,18 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Entity\Attribut;
|
namespace App\Entity\Attribut;
|
||||||
|
|
||||||
use Doctrine\Common\Collections\Collection;
|
use Doctrine\Common\Collections\Collection;
|
||||||
use Doctrine\Common\Collections\ArrayCollection;
|
use Doctrine\Common\Collections\ArrayCollection;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
*
|
||||||
* @author kevinfrantz
|
* @author kevinfrantz
|
||||||
*/
|
*/
|
||||||
trait MembersAttribut
|
trait MembersAttribut
|
||||||
{
|
{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
*
|
||||||
* @var Collection
|
* @var Collection
|
||||||
*/
|
*/
|
||||||
protected $members;
|
protected $members;
|
||||||
@ -26,22 +28,27 @@ trait MembersAttribut
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param int $dimension
|
|
||||||
* The dimensions start with 1 for the members of the actuall dimension and NULL for all members
|
|
||||||
* @param Collection $members
|
|
||||||
* A reference to a members list, to which new members should be add
|
|
||||||
*
|
*
|
||||||
|
* @param int $dimension
|
||||||
|
* The dimensions start with 1 for the members of the actuall dimension and NULL for all members
|
||||||
|
* @param Collection $members
|
||||||
|
* A reference to a members list, to which new members should be add
|
||||||
|
*
|
||||||
* @return Collection|MembersAttributInterface[] Returns all members till the defined dimension
|
* @return Collection|MembersAttributInterface[] Returns all members till the defined dimension
|
||||||
*/
|
*/
|
||||||
public function getMembersInclusiveChildren(?int $dimension = null, Collection $members = null): Collection
|
public function getMembersInclusiveChildren(?int $dimension = null, Collection $members = null): Collection
|
||||||
{
|
{
|
||||||
print_r('Hello '.$this.' ('.$dimension.')'.$members."\n");
|
// print_r('Dimension:');
|
||||||
$dimension = is_int($dimension)?--$dimension:null;
|
// var_dump($dimension);
|
||||||
|
$dimension = is_int($dimension) ? $dimension - 1: null;
|
||||||
|
// var_dump($dimension);
|
||||||
$members = $members ?? new ArrayCollection();
|
$members = $members ?? new ArrayCollection();
|
||||||
|
// print_r('Hello ' . $this . ' (' . $dimension . ')' . $members->count() . "\n");
|
||||||
foreach ($this->members->toArray() as $member) {
|
foreach ($this->members->toArray() as $member) {
|
||||||
if (!$members->contains($member)) {
|
if (! $members->contains($member)) {
|
||||||
$members->add($member);
|
$members->add($member);
|
||||||
if ($this->continueIncludeMembersLoop($dimension)) {
|
if ($dimension > 0) {
|
||||||
|
var_dump($dimension);
|
||||||
$member->getMembersInclusiveChildren($dimension, $members);
|
$member->getMembersInclusiveChildren($dimension, $members);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -49,7 +56,8 @@ trait MembersAttribut
|
|||||||
return $members;
|
return $members;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function continueIncludeMembersLoop(?int $dimension):bool{
|
private function continueIncludeMembersLoop(?int $dimension): bool
|
||||||
|
{
|
||||||
return (is_null($dimension) || $dimension > 0);
|
return (is_null($dimension) || $dimension > 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -37,8 +37,8 @@ class MembersAttributTest extends AbstractTestCase
|
|||||||
|
|
||||||
public function testContinueIncludeMemberLoop(){
|
public function testContinueIncludeMemberLoop(){
|
||||||
$this->assertTrue($this->getContinueIncludeMemberLoopResult(null));
|
$this->assertTrue($this->getContinueIncludeMemberLoopResult(null));
|
||||||
$this->assertTrue($this->getContinueIncludeMemberLoopResult(1));
|
|
||||||
$this->assertTrue($this->getContinueIncludeMemberLoopResult(2));
|
$this->assertTrue($this->getContinueIncludeMemberLoopResult(2));
|
||||||
|
$this->assertTrue($this->getContinueIncludeMemberLoopResult(1));
|
||||||
$this->assertFalse($this->getContinueIncludeMemberLoopResult(0));
|
$this->assertFalse($this->getContinueIncludeMemberLoopResult(0));
|
||||||
$this->assertFalse($this->getContinueIncludeMemberLoopResult(-1));
|
$this->assertFalse($this->getContinueIncludeMemberLoopResult(-1));
|
||||||
}
|
}
|
||||||
@ -56,18 +56,51 @@ class MembersAttributTest extends AbstractTestCase
|
|||||||
]);
|
]);
|
||||||
$this->assertNull($this->membersAttribut->setMembers($members));
|
$this->assertNull($this->membersAttribut->setMembers($members));
|
||||||
$this->assertEquals($members, $this->membersAttribut->getMembers());
|
$this->assertEquals($members, $this->membersAttribut->getMembers());
|
||||||
|
$this->assertTrue($this->membersAttribut->getMembers()->contains($source1));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testFirstLevelMembersInclusiveChildren():void{
|
||||||
|
$source1 = new GroupSource();
|
||||||
|
$source2 = clone $source1;
|
||||||
|
$source3 = clone $source1;
|
||||||
|
$source4 = clone $source1;
|
||||||
|
$source3->setMembers(new ArrayCollection([$source4]));
|
||||||
|
$members = new ArrayCollection([$source1,$source2,$source3]);
|
||||||
|
$this->assertNull($this->membersAttribut->setMembers($members));
|
||||||
|
$this->assertEquals(3,$this->membersAttribut->getMembersInclusiveChildren(1)->count());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function test3DimensionsMembersInclusiveChildren():void{
|
||||||
|
$source1= new GroupSource();
|
||||||
|
$source2 = clone $source1;
|
||||||
|
$source3 = clone $source1;
|
||||||
|
$source4 = clone $source1;
|
||||||
|
$source1->setMembers(new ArrayCollection([$source2]));
|
||||||
|
$source2->setMembers(new ArrayCollection([$source3]));
|
||||||
|
$source3->setMembers(new ArrayCollection([$source4]));
|
||||||
|
$this->membersAttribut->setMembers(new ArrayCollection([$source1]));
|
||||||
|
$this->assertEquals(1,$this->membersAttribut->getMembers()->count());
|
||||||
|
$this->assertEquals(1,$source1->getMembers()->count());
|
||||||
|
$this->assertEquals(1,$source2->getMembers()->count());
|
||||||
|
$this->assertEquals(1,$source3->getMembers()->count());
|
||||||
|
$this->assertEquals(0,$source4->getMembers()->count());
|
||||||
|
$this->assertEquals(3,$this->membersAttribut->getMembersInclusiveChildren(3)->count());
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testMembersIncludingChildren(): void
|
public function testMembersIncludingChildren(): void
|
||||||
{
|
{
|
||||||
$source1 = new GroupSource();
|
$source1 = new GroupSource();
|
||||||
|
|
||||||
//Level 3
|
|
||||||
$source2 = clone $source1;
|
$source2 = clone $source1;
|
||||||
$source3 = clone $source1;
|
$source3 = clone $source1;
|
||||||
$source4 = clone $source1;
|
$source4 = clone $source1;
|
||||||
$source5 = clone $source1;
|
$source5 = clone $source1;
|
||||||
$source6 = clone $source1;
|
$source6 = clone $source1;
|
||||||
|
$source7 = clone $source1;
|
||||||
|
$source8 = clone $source1;
|
||||||
|
$source9 = new class() extends AbstractSource {
|
||||||
|
};
|
||||||
|
//Level 3
|
||||||
|
|
||||||
$source1->setMembers(new ArrayCollection([$source2]));
|
$source1->setMembers(new ArrayCollection([$source2]));
|
||||||
$source2->setMembers(new ArrayCollection([$source3]));
|
$source2->setMembers(new ArrayCollection([$source3]));
|
||||||
$source3->setMembers(new ArrayCollection([$source4]));
|
$source3->setMembers(new ArrayCollection([$source4]));
|
||||||
@ -77,17 +110,14 @@ class MembersAttributTest extends AbstractTestCase
|
|||||||
$level3Elements = [$source1, $source2, $source3];
|
$level3Elements = [$source1, $source2, $source3];
|
||||||
|
|
||||||
//Recursion
|
//Recursion
|
||||||
$source7 = clone $source1;
|
//$source7->setMembers(new ArrayCollection([$source8]));
|
||||||
$source8 = clone $source1;
|
//$source8->setMembers(new ArrayCollection([$source7]));
|
||||||
$source7->setMembers(new ArrayCollection([$source8]));
|
|
||||||
$source8->setMembers(new ArrayCollection([$source7]));
|
|
||||||
|
|
||||||
//Source without members:
|
|
||||||
$source9 = new class() extends AbstractSource {
|
|
||||||
};
|
|
||||||
$allMembers = [$source1, $source2, $source3, $source4, $source5, $source6, $source7, $source8, $source9];
|
$allMembers = [$source1, $source2, $source3, $source4, $source5, $source6, $source7, $source8, $source9];
|
||||||
|
|
||||||
|
//$this->assertArraySubset($source1->getMembersInclusiveChildren(5)->toArray(), $level3Elements);
|
||||||
//$this->assertArraySubset($source1->getMembersInclusiveChildren(3)->toArray(), $level3Elements);
|
//$this->assertArraySubset($source1->getMembersInclusiveChildren(3)->toArray(), $level3Elements);
|
||||||
$this->assertArraySubset($source1->getMembersInclusiveChildren()->toArray(), $allMembers);
|
//$this->assertArraySubset($source1->getMembersInclusiveChildren()->toArray(), $allMembers);
|
||||||
//$this->assertArraySubset($source1->getMembers()->toArray(), $source1->getMembersInclusiveChildren(1)->toArray());
|
//$this->assertArraySubset($source1->getMembers()->toArray(), $source1->getMembersInclusiveChildren(1)->toArray());
|
||||||
//$this->assertArraySubset($source1->getMembersInclusiveChildren(1)->toArray(), $source1->getMembers()->toArray());
|
//$this->assertArraySubset($source1->getMembersInclusiveChildren(1)->toArray(), $source1->getMembers()->toArray());
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user