U
    ?hž
  ã                   @   s0   d dl Z d dlZG dd„ dƒZG dd„ dƒZdS )é    Nc                   @   sP   e Zd 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S )ÚTestMinEdgeCoverz4Tests for :func:`networkx.algorithms.min_edge_cover`c                 C   s    t  ¡ }t  |¡tƒ kst‚d S ©N)ÚnxÚGraphÚmin_edge_coverÚsetÚAssertionError©ÚselfÚG© r   úY/var/www/html/venv/lib/python3.8/site-packages/networkx/algorithms/tests/test_covering.pyÚtest_empty_graph	   s    z!TestMinEdgeCover.test_empty_graphc                 C   s,   t  ¡ }| dd¡ t  |¡dhks(t‚d S )Nr   ©r   r   )r   r   Úadd_edger   r   r	   r   r   r   Útest_graph_with_loop   s    z%TestMinEdgeCover.test_graph_with_loopc              	   C   s<   t  ¡ }| d¡ tjt jdd t  |¡ W 5 Q R X d S )Né   zFGraph has a node with no edge incident on it, so no edge cover exists.)Úmatch)r   r   Úadd_nodeÚpytestZraisesZNetworkXExceptionr   r	   r   r   r   Útest_graph_with_isolated_v   s    
þz+TestMinEdgeCover.test_graph_with_isolated_vc                 C   s*   t  dg¡}t  |¡dhdhfks&t‚d S )N©r   r   ©r   r   )r   r   r   r   r	   r   r   r   Útest_graph_single_edge   s    z'TestMinEdgeCover.test_graph_single_edgec                 C   sT   t  d¡}t  |¡}t|ƒdks$t‚|jD ]$\}}||f|ks*||f|ks*t‚q*d S )Né   é   )r   Z
path_graphr   Úlenr   Úedges)r
   r   Ú	min_coverÚuÚvr   r   r   Útest_graph_two_edge_path   s
    

z)TestMinEdgeCover.test_graph_two_edge_pathc                 C   sª   t  ¡ }|jddddgdd |jddd	gdd | d
dddddg¡ t  |t jjjj¡}t  	||¡slt
‚t|ƒdks|t
‚t  |¡}t  	||¡s–t
‚t|ƒdks¦t
‚d S )Nr   r   r   é   r   )Ú	bipartiteÚaÚbÚc)r   r$   )r   r%   )r   r%   )r   r&   )r   r&   )r"   r$   é   )r   r   Zadd_nodes_fromZadd_edges_fromr   Z
algorithmsr#   ZmatchingZeppstein_matchingÚis_edge_coverr   r   )r
   r   r   Z
min_cover2r   r   r   Útest_bipartite_explicit&   s     
ÿ
z(TestMinEdgeCover.test_bipartite_explicitc                 C   s8   t  d¡}t  |¡}t  ||¡s$t‚t|ƒdks4t‚d S )Né
   é   ©r   Zcomplete_graphr   r(   r   r   ©r
   r   r   r   r   r   Útest_complete_graph_even6   s    

z)TestMinEdgeCover.test_complete_graph_evenc                 C   s8   t  d¡}t  |¡}t  ||¡s$t‚t|ƒdks4t‚d S )Né   é   r,   r-   r   r   r   Útest_complete_graph_odd<   s    

z(TestMinEdgeCover.test_complete_graph_oddN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r!   r)   r.   r1   r   r   r   r   r      s   	r   c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	ÚTestIsEdgeCoverz3Tests for :func:`networkx.algorithms.is_edge_cover`c                 C   s   t  ¡ }t  |tƒ ¡st‚d S r   )r   r   r(   r   r   r	   r   r   r   r   F   s    z TestIsEdgeCover.test_empty_graphc                 C   s*   t  ¡ }| dd¡ t  |dh¡s&t‚d S )Nr   ©r   r   ©r   r   r   r(   r   r	   r   r   r   r   J   s    z$TestIsEdgeCover.test_graph_with_loopc                 C   sd   t  ¡ }| dd¡ t  |ddh¡s(t‚t  |ddh¡s<t‚t  |dh¡sNt‚t  |dh¡r`t‚d S )Nr   r   r   r7   r   r   r8   r	   r   r   r   r   O   s    z&TestIsEdgeCover.test_graph_single_edgeN)r2   r3   r4   r5   r   r   r   r   r   r   r   r6   C   s   r6   )r   Znetworkxr   r   r6   r   r   r   r   Ú<module>   s   =