U
    ?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   sl   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   Z/var/www/html/venv/lib/python3.8/site-packages/networkx/algorithms/tests/test_dominance.pytest_exceptions   s    

z'TestImmediateDominators.test_exceptionsc                 C   sR   t  }|d t |dddiks*t|dd t |dddiksNtd S Nr   )r   r   r   r   AssertionErroradd_edger   r   r   r   test_singleton   s
    
z&TestImmediateDominators.test_singletonc                 C   s<   d}t j|t  d}t |ddd t|D ks8td S )N   Zcreate_usingr   c                 S   s   i | ]}|t |d  dqS r   r   max.0ir   r   r   
<dictcomp>   s      z5TestImmediateDominators.test_path.<locals>.<dictcomp>)r   
path_graphr   r   ranger   r   nr   r   r   r   	test_path   s    z!TestImmediateDominators.test_pathc                 C   s<   d}t j|t  d}t |ddd t|D ks8td S )Nr   r   r   c                 S   s   i | ]}|t |d  dqS r   r   r   r   r   r   r!      s      z6TestImmediateDominators.test_cycle.<locals>.<dictcomp>)r   cycle_graphr   r   r#   r   r$   r   r   r   
test_cycle   s    z"TestImmediateDominators.test_cyclec                    sV   d  dkst tj t d}t| d  fddt d  D ksRt d S )Nr   r   r      c                    s    i | ]}|t |d   d qS r   r)   r   r   r%   r   r   r!   %   s     z<TestImmediateDominators.test_unreachable.<locals>.<dictcomp>)r   r   r"   r   r   r#   r   r   r+   r   test_unreachable!   s    z(TestImmediateDominators.test_unreachablec                 C   sB   ddddddg}t |}t |ddd	 td
dD ks>td S )Nr*   r)   r      r)      r   r   r/   r   r1   r   c                 S   s   i | ]
}|d qS )r   r   r   r   r   r   r!   0   s      z=TestImmediateDominators.test_irreducible1.<locals>.<dictcomp>r      r   r   r   r#   r   r   edgesr   r   r   r   test_irreducible1)   s    
z)TestImmediateDominators.test_irreducible1c              	   C   sL   ddddddddd	g	}t |}t |d
}|dd tddD ksHtd S )Nr*   r-   r)   r/   r.   r1   r)   r1   r/   r   r   r4   r1   r4   r   r4   c                 S   s   i | ]
}|d qS )r4   r   r   r   r   r   r!   :   s      z=TestImmediateDominators.test_irreducible2.<locals>.<dictcomp>r      r5   r   r7   r   resultr   r   r   test_irreducible22   s    
z)TestImmediateDominators.test_irreducible2c                 C   st   dddddddg}t |}t |d}|ddd	d	d	d	d
ksBtt |jddd}|d	dddd	dd
ksptd S )Nr*   r9   r)   r1   r)   r4   r/   r   r1   r   r   r)   r   r)   r   r)   r/   r1   r   r4   Fcopyr4   r   r   r   r   r   reverser@   r   r   r   test_domrel_png<   s    
z'TestImmediateDominators.test_domrel_pngc              
   C   s   ddddddddd	g	}t |}t |d
}|d
d
dddddddksJtt |jddd}|dddddddddks|td S )Nr   r   r*   r   r/   r)   r?   r/   r1   rF   r1   r4   r   r?   r=   r   r   r/   r1   r   r   r)   r/   r1   r   r4   r?   FrI   r?   r   rK   r@   r   r   r   test_boost_exampleF   s    
z*TestImmediateDominators.test_boost_exampleN)__name__
__module____qualname__r   r   r&   r(   r,   r8   rB   rM   rU   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   sl   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 r   )
r   r   r   r   r	   r
   dominance_frontiersr   r   r   r   r   r   r   r   S   s    

z&TestDominanceFrontiers.test_exceptionsc                 C   sV   t  }|d t |ddt iks,t|dd t |ddt iksRtd S r   )r   r   r   rZ   setr   r   r   r   r   r   r   \   s
    
z%TestDominanceFrontiers.test_singletonc                 C   s<   d}t j|t  d}t |ddd t|D ks8td S )Nr   r   r   c                 S   s   i | ]}|t  qS r   r[   r   r   r   r   r!   f   s      z4TestDominanceFrontiers.test_path.<locals>.<dictcomp>)r   r"   r   rZ   r#   r   r$   r   r   r   r&   c   s    z TestDominanceFrontiers.test_pathc                 C   s<   d}t j|t  d}t |ddd t|D ks8td S )Nr   r   r   c                 S   s   i | ]}|t  qS r   r\   r   r   r   r   r!   k   s      z5TestDominanceFrontiers.test_cycle.<locals>.<dictcomp>)r   r'   r   rZ   r#   r   r$   r   r   r   r(   h   s    z!TestDominanceFrontiers.test_cyclec                 C   sR   d}|dkst tj|t d}t||d dd t|d |D ksNt d S )Nr   r   r   r)   c                 S   s   i | ]}|t  qS r   r\   r   r   r   r   r!   q   s      z;TestDominanceFrontiers.test_unreachable.<locals>.<dictcomp>)r   r   r"   r   rZ   r#   r$   r   r   r   r,   m   s    z'TestDominanceFrontiers.test_unreachablec                 C   sP   ddddddg}t |}tt |d dhd	hdhd	ht d
ksLtd S )Nr*   r-   r.   r0   r2   r3   r   r)   r   )r   r)   r/   r1   r   )r   r   dictrZ   itemsr[   r   r6   r   r   r   r8   s   s    
z(TestDominanceFrontiers.test_irreducible1c              	   C   sV   ddddddddd	g	}t |}t |d
dhddhdhddhdht dksRtd S )Nr*   r-   r9   r.   r:   r;   r<   r=   r>   r4   r)   r   r/   rH   )r   r   rZ   r[   r   r6   r   r   r   rB      s    

z(TestDominanceFrontiers.test_irreducible2c                 C   s   dddddddg}t |}t |dt d	hd
hd
hd	ht dksJtt |jddd}|t d	hd	hd	hd	ht dkstd S )Nr*   r9   rC   rD   rE   rF   rG   r   r)   r   rH   FrI   r4   r   r   rZ   r[   r   rL   r@   r   r   r   rM      s    

	z&TestDominanceFrontiers.test_domrel_pngc              
   C   s   ddddddddd	g	}t |}t |d
t t dhdhddhdhdht dksXtt |jddd}t t dhdhddhdhdht d}||kstd S )NrN   r*   rO   rP   rQ   rF   rR   rS   r=   r   r?   r1   rT   FrI   r   r_   )r   r7   r   rA   expectedr   r   r   rU      s.    


z)TestDominanceFrontiers.test_boost_examplec                 C   sj   t  }|ddddddddd	d
dg t |d}|t dhdhdht dhdhdhdhd	ksft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_fromrZ   r[   r   r   gdfr   r   r   test_discard_issue   s6    z)TestDominanceFrontiers.test_discard_issuec                 C   sB   t  }|dddg t |d}|t t t dks>td S )N)ab)rs   c)rs   rr   rr   )rr   rs   rt   rl   rn   r   r   r   	test_loop   s    z TestDominanceFrontiers.test_loopc                 C   s0   t  }dddddg}|| t |d d S )N)entry_1rb   rc   re   )rf   exit)Zentry_2rf   rv   )r   r   rm   rZ   )r   ro   r7   r   r   r   test_missing_immediate_doms   s    
z2TestDominanceFrontiers.test_missing_immediate_domsc                 C   s   t  }ddddddddd	d
dg}|| t |d}t dhddhdddhddddhdddhddht d}|D ] }t|| t|| ksttqtd S )N)entryrw   )ry   1)rz   2)r{   3)r|   4)r}   5)r~   6)r   rw   )r   r{   )r~   r|   )r}   r}   ry   rw   r{   r|   r}   )ry   rz   r{   r|   r}   r~   r   rw   rl   )r   ro   r7   rp   Zanswerr%   r   r   r   test_loops_larger   s4    


z(TestDominanceFrontiers.test_loops_largerN)rV   rW   rX   r   r   r&   r(   r,   r8   rB   rM   rU   rq   ru   rx   r   r   r   r   r   rY   R   s   	rY   )r   Znetworkxr   r   rY   r   r   r   r   <module>   s   L