
    Vh#                     <    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     X/home/dcms/DCMS/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        j	                  t        dd      d      k(  sJ y)
        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   dictfromkeysr#   r   edgesr   s      r   test_irreducible1z)TestImmediateDominators.test_irreducible1)   sD    
 AJJu&&q!,eAqk10MMMMr   c                     g d}t        j                  |      }t        j                  |d      }|t        j	                  t        dd      d      k(  sJ y)
        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   results       r   test_irreducible2z)TestImmediateDominators.test_irreducible22   sI     YJJu((A.uQ{A6666r   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   rC   )r/   r8   )r/   r9   )r7   r   r8   r   )r   r/   r   r/   r   r/   r7   r8   r   r9   Fcopyr9   r   r   r   r   reverserF   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/   rE   )r7   r8   rK   )r8   r9   )r   rE   rD   r   r   r7   r8   r   r   r/   r7   r8   r   r9   rE   FrM   rE   r   rO   rF   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?   rH   rQ   rU    r   r   r   r      s4    G7U
U

N	7>	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
   r]   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   r]   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 ra   )r   r+   r   r]   r#   r_   r%   s       r   r,   z!TestDominanceFrontiers.test_cyclei   sP    NN12::<8%%a+%(/KQ35/KKKK/Krc   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.   rb   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        j                  |d      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   r]   r_   r=   s      r   r?   z(TestDominanceFrontiers.test_irreducible1t   sU    
 AJJu%%a+ssssu0
 
 	
 
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)rA   rB   r9   r/   r   r7   rL   Nrg   r=   s      r   rH   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 )	NrJ   r   r/   r   rL   FrM   r9   r   r   r]   r_   rP   rF   s       r   rQ   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 )	NrS   r   rE   r8   rT   FrM   r   rj   )r   r>   r   rG   expecteds        r   rU   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ro   b2rq   b3)rs   ro   )ro   b5)rt   b6)rt   b8)ru   b7)rv   rw   )rw   rs   )rs   b4rn   rs   rw   ro   )	rx   rt   ru   rw   rn   ro   rq   rs   rv   r   r   add_edges_fromr]   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   ry   r{   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_1ro   rp   rr   )rs   exit)entry_2rs   r   )r   r   rz   r]   )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   ry   )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)rV   rW   rX   r   r   r(   r,   r0   r?   rH   rQ   rU   r~   r   r   r   rY   r   r   r[   r[   S   sH    F:L
L
Y

 N ":
>:-40r   r[   )r   networkxr   r   r[   rY   r   r   <module>r      s&     JJ JJZK0 K0r   