U
    [¹Öh†  ã                   @   sÊ   d dl m Z  ddlmZ ddlmZ G dd„ de ƒZddd„Zd	d
„ Zdd„ Zdd„ Z	ee	ƒZ	dd„ Z
dd„ ZeeƒZdd„ ZeeƒZdd„ ZeeƒZdd„ ZeeƒZdd„ ZeeƒZG dd„ deƒZdS )é    )Úgreenleté   )ÚTestCase)Úfails_leakcheckc                   @   s<   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ ZeZ	dS )ÚgenletNc                 O   s   || _ || _d | _d S ©N)ÚargsÚkwdsÚchild)Úselfr   r	   © r   úJ./venv/lib/python3.8/site-packages/greenlet/tests/test_generator_nested.pyÚ__init__   s    zgenlet.__init__c                 C   s   | j \}|| j| jŽ d S r   )Úfnr   r	   )r   r   r   r   r   Úrun   s    z
genlet.runc                 C   s   | S r   r   ©r   r   r   r   Ú__iter__   s    zgenlet.__iter__c                 C   s
   || _ d S r   )r
   )r   r
   r   r   r   Ú	set_child   s    zgenlet.set_childc                 C   sP   | j r.| j }|j r$|}|j }d |_ q| ¡ }nt ¡ | _|  ¡ }| rH|S t‚d S r   )r
   Úswitchr   Ú
getcurrentÚparentÚStopIteration)r   r
   ZtmpÚresultr   r   r   Ú__next__   s    

zgenlet.__next__)
Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   Únextr   r   r   r   r      s   r   c                 C   sT   t  ¡ }|dkrFt|tƒs"tdƒ‚|dkr6|j |¡ |j}|d8 }q| | ¡ d S )Nr   zyield outside a genletr   )r   r   Ú
isinstancer   ÚRuntimeErrorr   r   r   )ÚvalueÚlevelÚgr   r   r   ÚYield-   s    

r#   c                    s   G ‡ fdd„dt ƒ}|S )Nc                       s   e Zd Z” fZdS )zGenlet.<locals>.TheGenletN)r   r   r   r   r   ©Úfuncr   r   Ú	TheGenlet<   s   r&   )r   )r%   r&   r   r$   r   ÚGenlet;   s    r'   c                 c   s&   t | ƒD ]}| |d ¡ |V  qd S ©Nr   )ÚrangeÚappend©ÚnÚseenÚir   r   r   Úg1C   s    r/   c                 C   s(   t | ƒD ]}| |d ¡ t|ƒ qd S r(   )r)   r*   r#   r+   r   r   r   Úg2I   s    r0   c                 C   s   t | ƒ d S r   ©r#   )r.   r   r   r   ÚnestedQ   s    r2   c                 C   s(   t | ƒD ]}| |d ¡ t|ƒ qd S r(   )r)   r*   r2   r+   r   r   r   Úg3U   s    r3   c                 C   s2   | dkrd S t | d ƒD ]}t|ƒ qt| ƒ d S )Nr   r   )Úaxr#   ©r,   Úiir   r   r   Úa\   s
    
r7   c                    sP   t | ƒdkrD| D ]0‰ ‡ fdd„t‡ fdd„| D ƒƒD ƒ}|st‚qnt| ƒ d S )Nr   c                    s   g | ]}t ˆ g| ƒ‘qS r   r1   )Ú.0Úp©Úer   r   Ú
<listcomp>i   s     zperms.<locals>.<listcomp>c                    s   g | ]}|ˆ kr|‘qS r   r   )r8   Úxr:   r   r   r<   i   s      )ÚlenÚpermsÚAssertionErrorr#   )Úlr=   r   r:   r   r?   e   s
    $r?   c                 C   s*   t d| ƒD ]}t|ƒ t|| dƒ q
d S )Nr   é   )r)   r#   r5   r   r   r   Úgr1p   s    rC   c                 C   s   t | ƒD ]}| |¡ qd S r   )rC   r*   )r,   r-   r6   r   r   r   Úgr2x   s    rD   c                   @   s8   e Zd Zdd„ Zedd„ ƒZdd„ Zdd„ Zd	d
„ ZdS )ÚNestedGeneratorTestsc                 C   s>   g }t d|ƒD ]}| |¡ q|  |ddddddddg¡ d S )Né   r   rB   é   é   é	   é   )rD   r*   ÚassertEqual©r   r-   r6   r   r   r   Útest_layered_genlets€   s    z)NestedGeneratorTests.test_layered_genletsc                 C   s  t ttdƒƒƒ}t|ƒ}|  t|ƒd¡ |  ddddg|¡ |  ddddg|¡ g }tt ttdƒƒƒt ttdƒƒƒƒD ]}| |¡ qv|  |ddddgdddgfddddgdddgfddddgdddgfddddgdddgfddddgdddgfddddgdddgfg¡ d S )NrG   é   r   r   rB   rH   )r?   Úlistr)   rK   r>   ZassertInÚzipr*   )r   Z	gen_permsÚpermutationsÚresr6   r   r   r   Útest_permutations†   s"    &(  þþz&NestedGeneratorTests.test_permutationsc                 C   sd   t ttfD ]T}g }tdƒD ]}|d|ƒD ]}| |¡ q(q|  |dddddddddddg
 ¡ q
d S )NrH   rF   r   r   rB   rG   )r/   r0   r3   r)   r*   rK   )r   r"   r-   Ú_Újr   r   r   Útest_genlet_simple—   s    z'NestedGeneratorTests.test_genlet_simplec                 C   s&   zt dƒ W n tk
r    Y nX d S )Né
   )r#   r   r   r   r   r   Útest_genlet_badŸ   s    z$NestedGeneratorTests.test_genlet_badc                 C   s    g }t dƒD ]}| |¡ qd S )NrF   )r4   r*   rL   r   r   r   Útest_nested_genlets¥   s    z(NestedGeneratorTests.test_nested_genletsN)	r   r   r   rM   r   rS   rV   rX   rY   r   r   r   r   rE      s   
rE   N)r   )r   Ú r   Z	leakcheckr   r   r#   r'   r/   r0   r2   r3   r7   r4   r?   rC   rD   rE   r   r   r   r   Ú<module>   s(   '
