mirror of
				https://github.com/kevinveenbirkenbach/infinito.git
				synced 2025-11-04 03:07:58 +00:00 
			
		
		
		
	Implemented test for 3 dimensions
This commit is contained in:
		@@ -1,16 +1,18 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace App\Entity\Attribut;
 | 
			
		||||
 | 
			
		||||
use Doctrine\Common\Collections\Collection;
 | 
			
		||||
use Doctrine\Common\Collections\ArrayCollection;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 *
 | 
			
		||||
 * @author kevinfrantz
 | 
			
		||||
 */
 | 
			
		||||
trait MembersAttribut
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     *
 | 
			
		||||
     * @var Collection
 | 
			
		||||
     */
 | 
			
		||||
    protected $members;
 | 
			
		||||
@@ -26,6 +28,7 @@ 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
 | 
			
		||||
@@ -35,13 +38,17 @@ trait MembersAttribut
 | 
			
		||||
     */
 | 
			
		||||
    public function getMembersInclusiveChildren(?int $dimension = null, Collection $members = null): Collection
 | 
			
		||||
    {
 | 
			
		||||
        print_r('Hello '.$this.' ('.$dimension.')'.$members."\n");
 | 
			
		||||
        $dimension = is_int($dimension)?--$dimension:null;
 | 
			
		||||
        // print_r('Dimension:');
 | 
			
		||||
        // var_dump($dimension);
 | 
			
		||||
        $dimension = is_int($dimension) ? $dimension - 1: null;
 | 
			
		||||
        // var_dump($dimension);
 | 
			
		||||
        $members = $members ?? new ArrayCollection();
 | 
			
		||||
        // print_r('Hello ' . $this . ' (' . $dimension . ')' . $members->count() . "\n");
 | 
			
		||||
        foreach ($this->members->toArray() as $member) {
 | 
			
		||||
            if (!$members->contains($member)) {
 | 
			
		||||
            if (! $members->contains($member)) {
 | 
			
		||||
                $members->add($member);
 | 
			
		||||
                if ($this->continueIncludeMembersLoop($dimension)) {
 | 
			
		||||
                if ($dimension > 0) {
 | 
			
		||||
                    var_dump($dimension);
 | 
			
		||||
                    $member->getMembersInclusiveChildren($dimension, $members);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
@@ -49,7 +56,8 @@ trait MembersAttribut
 | 
			
		||||
        return $members;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private  function continueIncludeMembersLoop(?int $dimension):bool{
 | 
			
		||||
    private function continueIncludeMembersLoop(?int $dimension): bool
 | 
			
		||||
    {
 | 
			
		||||
        return (is_null($dimension) || $dimension > 0);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -37,8 +37,8 @@ class MembersAttributTest extends AbstractTestCase
 | 
			
		||||
    
 | 
			
		||||
    public function testContinueIncludeMemberLoop(){
 | 
			
		||||
        $this->assertTrue($this->getContinueIncludeMemberLoopResult(null));
 | 
			
		||||
        $this->assertTrue($this->getContinueIncludeMemberLoopResult(1));
 | 
			
		||||
        $this->assertTrue($this->getContinueIncludeMemberLoopResult(2));
 | 
			
		||||
        $this->assertTrue($this->getContinueIncludeMemberLoopResult(1));
 | 
			
		||||
        $this->assertFalse($this->getContinueIncludeMemberLoopResult(0));
 | 
			
		||||
        $this->assertFalse($this->getContinueIncludeMemberLoopResult(-1));
 | 
			
		||||
    }
 | 
			
		||||
@@ -56,18 +56,51 @@ class MembersAttributTest extends AbstractTestCase
 | 
			
		||||
        ]);
 | 
			
		||||
        $this->assertNull($this->membersAttribut->setMembers($members));
 | 
			
		||||
        $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
 | 
			
		||||
    {
 | 
			
		||||
        $source1 = new GroupSource();
 | 
			
		||||
 | 
			
		||||
        //Level 3
 | 
			
		||||
        $source2 = clone $source1;
 | 
			
		||||
        $source3 = clone $source1;
 | 
			
		||||
        $source4 = clone $source1;
 | 
			
		||||
        $source5 = clone $source1;
 | 
			
		||||
        $source6 = clone $source1;
 | 
			
		||||
        $source7 = clone $source1;
 | 
			
		||||
        $source8 = clone $source1;
 | 
			
		||||
        $source9 = new class() extends AbstractSource {
 | 
			
		||||
        };
 | 
			
		||||
        //Level 3
 | 
			
		||||
        
 | 
			
		||||
        $source1->setMembers(new ArrayCollection([$source2]));
 | 
			
		||||
        $source2->setMembers(new ArrayCollection([$source3]));
 | 
			
		||||
        $source3->setMembers(new ArrayCollection([$source4]));
 | 
			
		||||
@@ -77,17 +110,14 @@ class MembersAttributTest extends AbstractTestCase
 | 
			
		||||
        $level3Elements = [$source1, $source2, $source3];
 | 
			
		||||
 | 
			
		||||
        //Recursion
 | 
			
		||||
        $source7 = clone $source1;
 | 
			
		||||
        $source8 = clone $source1;
 | 
			
		||||
        $source7->setMembers(new ArrayCollection([$source8]));
 | 
			
		||||
        $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];
 | 
			
		||||
        
 | 
			
		||||
        //$this->assertArraySubset($source1->getMembersInclusiveChildren(5)->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->getMembersInclusiveChildren(1)->toArray(), $source1->getMembers()->toArray());
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user