o
    h#                     @   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/vscode/kcb/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 )
        Graph taken from figure 2 of "A simple, fast dominance algorithm." (2006).
        https://hdl.handle.net/1911/96345
        r1   r0   r      r0   )   r   )r   r8   )r   r9   r   c                 S      i | ]}|d qS )r   r   r"   r   r   r   r%   0       z=TestImmediateDominators.test_irreducible1.<locals>.<dictcomp>r      N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 )
        Graph taken from figure 4 of "A simple, fast dominance algorithm." (2006).
        https://hdl.handle.net/1911/96345
        	r1   r6   r0   r8   r7   )r9   r0   )r9   r8   )r   r   r<   r9   )r<   r   r<   c                 S   r:   )r<   r   r"   r   r   r   r%   ;   r;   z=TestImmediateDominators.test_irreducible2.<locals>.<dictcomp>r      Nr=   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   rC   )r0   r9   )r0   r<   )r8   r   r9   r   )r   r0   r   r0   r   r0   r8   r9   r   r<   Fcopyr<   r   r   r   r   reverserF   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   r8   )r0   rE   )r8   r9   rJ   )r9   r<   )r   rE   rD   r   r   r8   r9   r   r   r0   r8   r9   r   r<   rE   FrL   rE   r   rN   rF   r   r   r   test_boost_exampleG   s   
"z*TestImmediateDominators.test_boost_exampleN)__name__
__module____qualname__r   r   r,   r/   r3   r@   rH   rP   rS   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   T   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   rX   setr   r   r   r   r   r   ]   s
   
z%TestDominanceFrontiers.test_singletonc                 C   r   )Nr   r   r   c                 S      i | ]}|t  qS r   rY   r"   r   r   r   r%   g       z4TestDominanceFrontiers.test_path.<locals>.<dictcomp>r   r(   r   rX   r)   r*   r   r   r   r,   d   r-   z TestDominanceFrontiers.test_pathc                 C   r   )Nr   r   r   c                 S   rZ   r   r[   r"   r   r   r   r%   l   r\   z5TestDominanceFrontiers.test_cycle.<locals>.<dictcomp>)r   r.   r   rX   r)   r*   r   r   r   r/   i   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   rZ   r   r[   r"   r   r   r   r%   r   r\   z;TestDominanceFrontiers.test_unreachable.<locals>.<dictcomp>r]   r*   r   r   r   r3   n   s   0z'TestDominanceFrontiers.test_unreachablec                 C   sH   g d}t |}tt |d dhdhdhdht dks"J dS )r4   r5   r   r0   r   )r   r0   r8   r9   r   N)r   r   dictrX   itemsrY   r>   r   r   r   r@   t   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 )rA   rB   r<   r0   r   r8   rK   N)r   r   rX   rY   r>   r   r   r   rH      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 )	NrI   r   r0   r   rK   FrL   r<   r   r   rX   rY   rO   rF   r   r   r   rP      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 )	NrQ   r   rE   r9   rR   FrL   r   r`   )r   r?   r   rG   expectedr   r   r   rS      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rc   b2re   b3)rg   rc   )rc   b5)rh   b6)rh   b8)ri   b7)rj   rk   )rk   rg   )rg   b4rb   rg   rk   rc   )	rl   rh   ri   rk   rb   rc   re   rg   rj   r   r   add_edges_fromrX   rY   r   gdfr   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)rt   c)rt   rs   rs   )rs   rt   ru   rm   ro   r   r   r   	test_loop   s   z TestDominanceFrontiers.test_loopc                 C   s*   t  }g d}|| t |d d S )N))entry_1rc   rd   rf   )rg   exit)entry_2rg   rw   )r   r   rn   rX   )r   rp   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))entryrx   )r{   1)r|   2)r}   3)r~   4)r   5)r   6)r   rx   )r   r}   )r   r~   )r   r   r{   rx   r}   >   r}   r~   rx   >   r}   r~   r   rx   )r{   r|   r}   r~   r   r   r   rx   rm   )r   rp   r?   rq   answerr+   r   r   r   test_loops_larger   s    

z(TestDominanceFrontiers.test_loops_largerN)rT   rU   rV   r   r   r,   r/   r3   r@   rH   rP   rS   rr   rv   rz   r   r   r   r   r   rW   S   s    	rW   )r	   networkxr   r   rW   r   r   r   r   <module>   s    M