o
    ˷e$                     @   s0   d dl Z d dlZG dd dZG dd dZdS )    Nc                   @   sT   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd ZdS )TestImmediateDominatorsc                 C   l   t  }|d tt jt j|d t |}tt jt j|d t ddgg}tt j	t j|d d S Nr      )
nxGraphadd_nodepytestraisesNetworkXNotImplementedimmediate_dominators
MultiGraphDiGraphNetworkXErrorselfG r   _/var/www/ideatree/venv/lib/python3.10/site-packages/networkx/algorithms/tests/test_dominance.pytest_exceptions      

z'TestImmediateDominators.test_exceptionsc                 C   sR   t  }|d t |dddiksJ |dd t |dddiks'J d S Nr   )r   r   r   r   add_edger   r   r   r   test_singleton   s
   
z&TestImmediateDominators.test_singletonc                 C   <   d}t j|t  d}t |ddd t|D ksJ d S )N   create_usingr   c                 S      i | ]
}|t |d  dqS r   r   max.0ir   r   r   
<dictcomp>       z5TestImmediateDominators.test_path.<locals>.<dictcomp>r   
path_graphr   r   ranger   nr   r   r   r   	test_path      &z!TestImmediateDominators.test_pathc                 C   r   )Nr   r   r   c                 S   r   r   r    r"   r   r   r   r%      r&   z6TestImmediateDominators.test_cycle.<locals>.<dictcomp>)r   cycle_graphr   r   r)   r*   r   r   r   
test_cycle   r-   z"TestImmediateDominators.test_cyclec                    sV   d  dksJ t j t  d}t | d  fddt d  D ks)J d S )Nr   r   r      c                    s    i | ]}|t |d   d qS r   r0   r    r"   r+   r   r   r%   %   s    z<TestImmediateDominators.test_unreachable.<locals>.<dictcomp>r'   r   r   r2   r   test_unreachable!   s   z(TestImmediateDominators.test_unreachablec                 C   s:   g d}t |}t |ddd tddD ksJ d S )Nr1   r0   r      r0   )   r   )r   r7   )r   r8   r   c                 S      i | ]}|d qS )r   r   r"   r   r   r   r%   0       z=TestImmediateDominators.test_irreducible1.<locals>.<dictcomp>r      r   r   r   r)   r   edgesr   r   r   r   test_irreducible1)   s   
(z)TestImmediateDominators.test_irreducible1c                 C   s>   g d}t |}t |d}|dd tddD ksJ d S )N	r1   r5   r0   r7   r6   )r8   r0   )r8   r7   )r   r   r;   r8   )r;   r   r;   c                 S   r9   )r;   r   r"   r   r   r   r%   :   r:   z=TestImmediateDominators.test_irreducible2.<locals>.<dictcomp>r      r<   r   r>   r   resultr   r   r   test_irreducible22   s   
 z)TestImmediateDominators.test_irreducible2c                 C   sj   g d}t |}t |d}|dddddddksJ t |jddd}|dddddddks3J d S )	Nr1   rA   )r0   r8   )r0   r;   )r7   r   r8   r   )r   r0   r   r0   r   r0   r7   r8   r   r;   Fcopyr;   r   r   r   r   reverserD   r   r   r   test_domrel_png<   s   
z'TestImmediateDominators.test_domrel_pngc              
   C   sr   g d}t |}t |d}|dddddddddksJ t |jddd	}|dd	d	dd
d	dd	dks7J d S )N	)r   r   r1   )r   r7   )r0   rC   )r7   r8   rH   )r8   r;   )r   rC   rB   r   r   r7   r8   r   r   r0   r7   r8   r   r;   rC   FrJ   rC   r   rL   rD   r   r   r   test_boost_exampleF   s   
"z*TestImmediateDominators.test_boost_exampleN)__name__
__module____qualname__r   r   r,   r/   r3   r?   rF   rN   rQ   r   r   r   r   r      s    		

r   c                   @   st   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd ZdS )TestDominanceFrontiersc                 C   r   r   )
r   r   r   r	   r
   r   dominance_frontiersr   r   r   r   r   r   r   r   S   r   z&TestDominanceFrontiers.test_exceptionsc                 C   sV   t  }|d t |ddt iksJ |dd t |ddt iks)J d S r   )r   r   r   rV   setr   r   r   r   r   r   \   s
   
z%TestDominanceFrontiers.test_singletonc                 C   r   )Nr   r   r   c                 S      i | ]}|t  qS r   rW   r"   r   r   r   r%   f       z4TestDominanceFrontiers.test_path.<locals>.<dictcomp>r   r(   r   rV   r)   r*   r   r   r   r,   c   r-   z TestDominanceFrontiers.test_pathc                 C   r   )Nr   r   r   c                 S   rX   r   rY   r"   r   r   r   r%   k   rZ   z5TestDominanceFrontiers.test_cycle.<locals>.<dictcomp>)r   r.   r   rV   r)   r*   r   r   r   r/   h   r-   z!TestDominanceFrontiers.test_cyclec                 C   sR   d}|dksJ t j|t  d}t ||d dd t|d |D ks'J d S )Nr   r   r   r0   c                 S   rX   r   rY   r"   r   r   r   r%   q   rZ   z;TestDominanceFrontiers.test_unreachable.<locals>.<dictcomp>r[   r*   r   r   r   r3   m   s   0z'TestDominanceFrontiers.test_unreachablec                 C   sN   g d}t |}dd t |d D dhdhdhdht dks%J d S )Nr4   c                 S   s   i | ]\}}||qS r   r   )r#   udfr   r   r   r%   z   s    z<TestDominanceFrontiers.test_irreducible1.<locals>.<dictcomp>r   r0   r   )r   r0   r7   r8   r   )r   r   rV   itemsrW   r=   r   r   r   r?   s   s   
z(TestDominanceFrontiers.test_irreducible1c                 C   sH   g d}t |}t |ddhddhdhddhdht dks"J d S )Nr@   r;   r0   r   r7   rI   )r   r   rV   rW   r=   r   r   r   rF      s   

z(TestDominanceFrontiers.test_irreducible2c                 C   s~   g d}t |}t |dt dhdhdhdht dks J t |jddd}|t dhdhdhdht dks=J d S )	NrG   r   r0   r   rI   FrJ   r;   r   r   rV   rW   rM   rD   r   r   r   rN      s   

	*z&TestDominanceFrontiers.test_domrel_pngc              
   C   s   g d}t |}t |dt t dhdhddhdhdht dks%J t |jddd}t t dhdhddhdhdht d}||ksIJ d S )	NrO   r   rC   r8   rP   FrJ   r   r_   )r   r>   r   rE   expectedr   r   r   rQ      s.   


z)TestDominanceFrontiers.test_boost_examplec                 C   sX   t  }|g d t |d}|t dhdhdht dhdhdhdhd	ks*J d S )N))b0b1rb   b2rd   b3)rf   rb   )rb   b5)rg   b6)rg   b8)rh   b7)ri   rj   )rj   rf   )rf   b4ra   rf   rj   rb   )	rk   rg   rh   rj   ra   rb   rd   rf   ri   r   r   add_edges_fromrV   rW   r   gr]   r   r   r   test_discard_issue   s    z)TestDominanceFrontiers.test_discard_issuec                 C   s@   t  }|g d t |d}|t t t dksJ d S )N))ab)rr   c)rr   rq   rq   )rq   rr   rs   rl   rn   r   r   r   	test_loop   s   z TestDominanceFrontiers.test_loopc                 C   s*   t  }g d}|| t |d d S )N))entry_1rb   rc   re   )rf   exit)entry_2rf   ru   )r   r   rm   rV   )r   ro   r>   r   r   r   test_missing_immediate_doms   s   
z2TestDominanceFrontiers.test_missing_immediate_domsc              	   C   s   t  }g d}|| t |d}t dhddhh dh dh dddht d}|D ]}t|| t|| ks=J q-d S )N))entryrv   )ry   1)rz   2)r{   3)r|   4)r}   5)r~   6)r   rv   )r   r{   )r~   r|   )r}   r}   ry   rv   r{   >   r{   r|   rv   >   r{   r|   r}   rv   )ry   rz   r{   r|   r}   r~   r   rv   rl   )r   ro   r>   r]   answerr+   r   r   r   test_loops_larger   s    

z(TestDominanceFrontiers.test_loops_largerN)rR   rS   rT   r   r   r,   r/   r3   r?   rF   rN   rQ   rp   rt   rx   r   r   r   r   r   rU   R   s    	rU   )r	   networkxr   r   rU   r   r   r   r   <module>   s    L