
    wg#                     <    d dl Z d dlZ G d d      Z G d d      Zy)    Nc                   B    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zy
)TestImmediateDominatorsc                    t        j                         }|j                  d       t        j                  t         j
                  t         j                  |d       t        j                  |      }t        j                  t         j
                  t         j                  |d       t        j                  ddgg      }t        j                  t         j                  t         j                  |d       y Nr      )
nxGraphadd_nodepytestraisesNetworkXNotImplementedimmediate_dominators
MultiGraphDiGraphNetworkXErrorselfGs     m/home/mcse/projects/flask/flask-venv/lib/python3.12/site-packages/networkx/algorithms/tests/test_dominance.pytest_exceptionsz'TestImmediateDominators.test_exceptions   s    HHJ	

1b//1H1H!QOMM!b//1H1H!QOJJAx b&&(?(?AF    c                     t        j                         }|j                  d       t        j                  |d      ddik(  sJ |j	                  dd       t        j                  |d      ddik(  sJ y Nr   )r   r   r
   r   add_edger   s     r   test_singletonz&TestImmediateDominators.test_singleton   sd    JJL	

1&&q!,A666	

1a&&q!,A666r   c           	          d}t        j                  |t        j                               }t        j                  |d      t	        |      D ci c]  }|t        |dz
  d       c}k(  sJ y c c}w N   create_usingr   r   r   
path_graphr   r   rangemaxr   nr   is       r   	test_pathz!TestImmediateDominators.test_path   sZ    MM!"**,7&&q!,5QR80TaCAqM1A0TTTT0T   A-c           	          d}t        j                  |t        j                               }t        j                  |d      t	        |      D ci c]  }|t        |dz
  d       c}k(  sJ y c c}w r   )r   cycle_graphr   r   r#   r$   r%   s       r   
test_cyclez"TestImmediateDominators.test_cycle   sZ    NN12::<8&&q!,5QR80TaCAqM1A0TTTT0Tr)   c           
         d}|dkD  sJ t        j                  |t        j                               }t        j                  ||dz        t	        |dz  |      D ci c]  }|t        |dz
  |dz         c}k(  sJ y c c}w Nr   r   r      r!   r%   s       r   test_unreachablez(TestImmediateDominators.test_unreachable!   s    1uuMM!"**,7&&q!q&1+0a+;6
&'As1q5!q&!!6
 
 	
 
 6
s   A>c                     g d}t        j                  |      }t        j                  |d      t        dd      D ci c]  }|d c}k(  sJ yc c}w )
        Graph taken from figure 2 of "A simple, fast dominance algorithm." (2006).
        https://hdl.handle.net/1911/96345
        r   r/   r/   r      r/   )   r   )r   r7   )r   r8   r   r      Nr   r   r   r#   )r   edgesr   r'   s       r   test_irreducible1z)TestImmediateDominators.test_irreducible1)   sK    
 AJJu&&q!,uQ{0K!A0KKKK0Ks   
Ac                     g d}t        j                  |      }t        j                  |d      }|t        dd      D ci c]  }|d c}k(  sJ yc c}w )
        Graph taken from figure 4 of "A simple, fast dominance algorithm." (2006).
        https://hdl.handle.net/1911/96345
        	r4   r5   r/   r7   r6   )r8   r/   )r8   r7   )r   r   r9   r8   )r9   r   r9   r      Nr:   )r   r;   r   resultr'   s        r   test_irreducible2z)TestImmediateDominators.test_irreducible22   sP     YJJu((A.a41!Q$44444s   
Ac                     g d}t        j                  |      }t        j                  |d      }|dddddddk(  sJ t        j                  |j                  d      d      }|dddddddk(  sJ y )	Nr4   r@   )r/   r8   )r/   r9   )r7   r   r8   r   )r   r/   r   r/   r   r/   r7   r8   r   r9   Fcopyr9   r   r   r   r   reverser   r;   r   rC   s       r   test_domrel_pngz'TestImmediateDominators.test_domrel_png=   sz    HJJu((A.Q1qQ1====(()>BQ1qQ1====r   c           
          g d}t        j                  |      }t        j                  |d      }|dddddddddk(  sJ t        j                  |j                  d      d	      }|dd	d	dd
d	dd	dk(  sJ y )N	)r   r   r4   )r   r7   )r/   rB   )r7   r8   rG   )r8   r9   )r   rB   rA   r   r   r7   r8   r   r   r/   r7   r8   r   r9   rB   FrI   rB   r   rK   rM   s       r   test_boost_examplez*TestImmediateDominators.test_boost_exampleG   s     YJJu((A.Q1qQ1qIIII(()>BQ1qQ1qIIIIr   N)__name__
__module____qualname__r   r   r(   r,   r0   r<   rD   rN   rR    r   r   r   r      s4    G7U
U

L	5>	Jr   r   c                   Z    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zy)TestDominanceFrontiersc                    t        j                         }|j                  d       t        j                  t         j
                  t         j                  |d       t        j                  |      }t        j                  t         j
                  t         j                  |d       t        j                  ddgg      }t        j                  t         j                  t         j                  |d       y r   )
r   r	   r
   r   r   r   dominance_frontiersr   r   r   r   s     r   r   z&TestDominanceFrontiers.test_exceptionsT   s    HHJ	

1b//1G1GANMM!b//1G1GANJJAx b&&(>(>1Er   c                    t        j                         }|j                  d       t        j                  |d      dt	               ik(  sJ |j                  dd       t        j                  |d      dt	               ik(  sJ y r   )r   r   r
   rZ   setr   r   s     r   r   z%TestDominanceFrontiers.test_singleton]   sh    JJL	

1%%a+35z999	

1a%%a+35z999r   c                     d}t        j                  |t        j                               }t        j                  |d      t	        |      D ci c]  }|t                c}k(  sJ y c c}w Nr   r   r   r   r"   r   rZ   r#   r\   r%   s       r   r(   z TestDominanceFrontiers.test_pathd   sP    MM!"**,7%%a+%(/KQ35/KKKK/K   A(c                     d}t        j                  |t        j                               }t        j                  |d      t	        |      D ci c]  }|t                c}k(  sJ y c c}w r^   )r   r+   r   rZ   r#   r\   r%   s       r   r,   z!TestDominanceFrontiers.test_cyclei   sP    NN12::<8%%a+%(/KQ35/KKKK/Kr`   c                     d}|dkD  sJ t        j                  |t        j                               }t        j                  ||dz        t	        |dz  |      D ci c]  }|t                c}k(  sJ y c c}w r.   r_   r%   s       r   r0   z'TestDominanceFrontiers.test_unreachablen   sh    1uuMM!"**,7%%aa0uQRSVUVGW4X!QX4XXXX4Xs   A6c                     g d}t        j                  |      }t        t        j                  |d      j	                               dhdhdhdht               dk(  sJ y)r2   r3   r   r/   r   )r   r/   r7   r8   r   N)r   r   dictrZ   itemsr\   r   r;   r   s      r   r<   z(TestDominanceFrontiers.test_irreducible1t   sc    
 AJJuB**1a06689ssssu>
 
 	
 
r   c                     g d}t        j                  |      }t        j                  |d      dhddhdhddhdht               dk(  sJ y)r>   r?   r9   r/   r   r7   rH   N)r   r   rZ   r\   rf   s      r   rD   z(TestDominanceFrontiers.test_irreducible2   s^    
 YJJu%%a+s1vs1vsu0
 
 	
 
r   c                 2   g d}t        j                  |      }t        j                  |d      t               dhdhdhdht               dk(  sJ t        j                  |j	                  d      d      }|t               dhdhdhdht               dk(  sJ y )	NrF   r   r/   r   rH   FrI   r9   r   r   rZ   r\   rL   rM   s       r   rN   z&TestDominanceFrontiers.test_domrel_png   s    HJJu%%a+ussssu0
 
 	
 
 ''		u	(=qASUsssssuMMMMr   c           
      f   g d}t        j                  |      }t        j                  |d      t               t               dhdhddhdhdht               dk(  sJ t        j                  |j	                  d      d      }t               t               dhdhddhdhdht               d}||k(  sJ y )	NrP   r   rB   r8   rQ   FrI   r   ri   )r   r;   r   rC   expecteds        r   rR   z)TestDominanceFrontiers.test_boost_example   s     YJJu%%a+uuss1vssu	0
 	
 		
 	
 ''		u	(=qAuuss1vssu	
 !!!r   c                     t        j                         }|j                  g d       t        j                  |d      }|t	               dhdhdht	               dhdhdhdhd	k(  sJ y )N))b0b1rn   b2rp   b3)rr   rn   )rn   b5)rs   b6)rs   b8)rt   b7)ru   rv   )rv   rr   )rr   b4rm   rr   rv   rn   )	rw   rs   rt   rv   rm   rn   rp   rr   ru   r   r   add_edges_fromrZ   r\   r   gdfs      r   test_discard_issuez)TestDominanceFrontiers.test_discard_issue   sx    JJL		
 ##At,%&&&%&&&&

 

 
	
 

r   c                     t        j                         }|j                  g d       t        j                  |d      }|t	               t	               t	               dk(  sJ y )N))ab)r   c)r   r   r   )r   r   r   rx   rz   s      r   	test_loopz TestDominanceFrontiers.test_loop   sI    JJL	=>##As+35su359999r   c                     t        j                         }g d}|j                  |       t        j                  |d       y )N))entry_1rn   ro   rq   )rr   exit)entry_2rr   r   )r   r   ry   rZ   )r   r{   r;   s      r   test_missing_immediate_domsz2TestDominanceFrontiers.test_missing_immediate_doms   s6    JJL
$ 	
 	q),r   c           	         t        j                         }g d}|j                  |       t        j                  |d      }t	               dhddhh dh dh dddht	               d}|D ]!  }t	        ||         t	        ||         k(  r!J  y )N))entryr   )r   1)r   2)r   3)r   4)r   5)r   6)r   r   )r   r   )r   r   )r   r   r   r   r   >   r   r   r   >   r   r   r   r   )r   r   r   r   r   r   r   r   rx   )r   r{   r;   r|   answerr&   s         r   test_loops_largerz(TestDominanceFrontiers.test_loops_larger   s     JJL
 	
##Aw/U##(##E	
  	0Ar!u:VAY///	0r   N)rS   rT   rU   r   r   r(   r,   r0   r<   rD   rN   rR   r}   r   r   r   rV   r   r   rX   rX   S   sH    F:L
L
Y

 N ":
>:-40r   rX   )r   networkxr   r   rX   rV   r   r   <module>r      s&     JJ JJZK0 K0r   