o
    tVg                    @   s   d dl Z d dlZd dlZd dlmZmZ d dlZd dlmZm	Z	 de
 kZG dd dejZG dd dejZG d	d
 d
ejZedkrKe  dS dS )    N)
CollectionSequence)Vector2Vector3PyPyc                   @   s    e Zd ZdZdd Zdd ZdS )MathModuleTestzMath module tests.c                 C   s   t jddd}| |d t jddd}| |d t jddd}| |d | tt jjd	 | tt jjd
d
d
 | tt jjddd | tt jjddd d S )N
   d         ?g     K@              $@      ?g      Y@   str皙?g      )pygamemathlerpassertAlmostEqualassertRaises	TypeError
ValueErrorselfresult r   J/home/ubuntu/.local/lib/python3.10/site-packages/pygame/tests/math_test.py	test_lerp   s   zMathModuleTest.test_lerpc                 C   sD  t jddd}| |d t jddd}| |d t jddd}| |d t jddd}| |d t jddd}| |d t jddd}| |d t jd	dd}| |d t jddd}| |d t jddd}| |d t jd
dd}| |d
 | tt jjd | tt jjddd dS )zTest clamp function.r   r         r   Q?      @      $      @hellopythonN)r   r   clampassertEqualr   r   r   r   r   r   r   
test_clamp#   s,   zMathModuleTest.test_clampN)__name__
__module____qualname____doc__r   r*   r   r   r   r   r      s    r   c                   @   s<  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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/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Z d=d> Z!d?d@ Z"dAdB Z#dCdD Z$dEdF Z%dGdH Z&dIdJ Z'dKdL Z(dMdN Z)dOdP Z*dQdR Z+dSdT Z,dUdV Z-dWdX Z.dYdZ Z/d[d\ Z0d]d^ Z1d_d` Z2dadb Z3dcdd Z4dedf Z5dgdh Z6didj Z7dkdl Z8dmdn Z9dodp Z:dqdr Z;dsdt Z<dudv Z=dwdx Z>dydz Z?d{d| Z@d}d~ ZAdd ZBdd ZCdd ZDdd ZEdd ZFdd ZGdd ZHdS )Vector2TypeTestc                 C   sl   t  | _t dd| _t dd| _d| _t| j| _t | j| _d| _t| j| _	t | j| _
d| _d| _d S )Nr   r   333333?333333@)ffffff@333333@r3   r4   )r   zeroVece1e2t1listl1v1t2l2v2s1s2r   r   r   r   setUpP   s   
zVector2TypeTest.setUpc                 C   s&   t  }| |jd | |jd d S Nr   r   r)   xyr   vr   r   r   testConstructionDefault]   s   z'Vector2TypeTest.testConstructionDefaultc                 C   s(   t d}| |jd | |jd d S Nr   r   rD   rG   r   r   r   testConstructionScalarb      z&Vector2TypeTest.testConstructionScalarc                 C   s*   t dd}| |jd | |jd d S Nr   )rE   r   rD   rG   r   r   r   testConstructionScalarKeywordsg      
z.Vector2TypeTest.testConstructionScalarKeywordsc                 C   s,   t ddd}| |jd | |jd d S )Nr      rE   rF   r          @rD   rG   r   r   r   testConstructionKeywordsl      z(Vector2TypeTest.testConstructionKeywordsc                 C   s*   t dd}| |jd | |jd d S Nr1   r2   rD   rG   r   r   r   testConstructionXYq   rO   z"Vector2TypeTest.testConstructionXYc                 C   s(   t d}| |jd | |jd d S )Nr0   r1   r2   rD   rG   r   r   r   testConstructionTuplev   rL   z%Vector2TypeTest.testConstructionTuplec                 C   s,   t ddg}| |jd | |jd d S rU   rD   rG   r   r   r   testConstructionList{   rT   z$Vector2TypeTest.testConstructionListc                 C   s.   t t dd}| |jd | |jd d S rU   rD   rG   r   r   r   testConstructionVector2   s   z'Vector2TypeTest.testConstructionVector2c                 C   s   | j j}| || j j | || j d  | j j}| || j j | || j d  d| j _| | j jd d| j _| | j jd dd }| t| d S )Nr   r   T㥛 	@c                  S      t  } d| _d S Nspamr   rE   rH   r   r   r   assign_nonfloat      
z<Vector2TypeTest.testAttributeAccess.<locals>.assign_nonfloat)r;   rE   r)   rF   r   r   r   tmpr`   r   r   r   testAttributeAccess   s   z#Vector2TypeTest.testAttributeAccessc                 C   s\  |  ttddtdd |  tttddtj |  ttddttdd |  ttddttdd |  ttddtdd |  ttddtdd |  ttddtdd |  ttddtdd |  ttddtdd |  ttd	d	td	d	 |  ttd
d
tdd |  ttddtdd |  ttddtdd |  ttddtdd |  ttddtdd |  ttddtdd |  ttddtdd |  ttddtdd |  ttddtdd |  ttddtdd |  ttddtdd |  ttddtdd |  ttddtdd |  ttdddtdd |  tttdddtj |  tttdddtj |  tttdddtj |  ttddtdd |  ttddtdd |  ttddtd d  |  ttd!d!td"d" |  ttd#d#td$d$ |  ttd%d%td"d" | tttddd& | tttddd' d S (Nr   r   r   g    eAg@xDg      r#   g    eg@xg?r   g333333$@g eA皙g333333$g eg?g#@g33dAgg#g33dg       r   r   g      @   g@r"   r3         @g      iggffffffg      ?a)r)   roundr   r   typer   r   rA   r   r   r   test___round___basic   s    
  
   
 
  
 
         z$Vector2TypeTest.test___round___basicc                 C   s6   t dd}| }| |j|j | |j|j d S )N     P@g     @)r   copyr)   rE   rF   r   v_copy0v_copy1r   r   r   testCopy   s   
zVector2TypeTest.testCopyc                 C      t dd}t dd}t dd}t dd}||d}||d | t|jd|j | t|jd|j | t|jd|j | t|jd|j d S )	Ng)\( @gGz[@zG@ro   皙(@     @r    rP   r   move_towardsmove_towards_ipr)   rl   rE   rF   r   expectedorigintarget	change_ipchanger   r   r   test_move_towards_basic      



z'Vector2TypeTest.test_move_towards_basicc                 C   s   t dd}t dd}t dd}t dd}||d}||d | t|jd|j | t|jd|j | t|jd|j | t|jd|j d S )Nrw     rv   ro   rx      rP   ry   r|   r   r   r   test_move_towards_max_distance   r   z.Vector2TypeTest.test_move_towards_max_distancec                 C   s   t dd}t dd}t dd}t dd}||d}||d | t|jd|j | t|jd|j | t|jd|j | t|jd|j d S )Nrv   ro   rw   rx   r   rP   ry   r|   r   r   r   test_move_nowhere  r   z!Vector2TypeTest.test_move_nowherec                 C   ru   )	Nq=
ףp@QD@rv   ro   rw   rx   rP   ry   r|   r   r   r   test_move_away  r   zVector2TypeTest.test_move_awayc                 C   sL   t dd}| }dD ]}| |||| ||| | || qd S )Nr   r   gRQrg   r   gʡE?   )r   rp   r)   rz   r{   r   vecvec2distr   r   r   test_move_towards_self$  s   
z&Vector2TypeTest.test_move_towards_selfc                 C   s|   dd }dd }dd }dd }d	d
 }dd }|  t| |  t| |  t| |  t| |  t| |  t| d S )Nc                  S   &   t dd} t dd}| |dd d S Nrv   ro   rw   rx   r    rP   r   rz   r~   r   r   r   r   overpopulate-     

z>Vector2TypeTest.test_move_towards_errors.<locals>.overpopulatec                  S   r   r   r   r{   r   r   r   r   overpopulate_ip2  r   zAVector2TypeTest.test_move_towards_errors.<locals>.overpopulate_ipc                  S   $   t dd} t dd}| |d d S )Nrv   ro   rw   rx   novialr   r   r   r   r   invalid_types17     

z@Vector2TypeTest.test_move_towards_errors.<locals>.invalid_types1c                  S   r   )Nrv   ro   rw   rx   isr   r   r   r   r   invalid_types_ip1<  r   zCVector2TypeTest.test_move_towards_errors.<locals>.invalid_types_ip1c                  S   $   t dd} t dd}| dd d S )Nrv   ro   rw   rx   kindar    r   r   r   r   r   invalid_types2A  r   z@Vector2TypeTest.test_move_towards_errors.<locals>.invalid_types2c                  S   r   )Nrv   ro   rw   rx   coolr    r   r   r   r   r   invalid_types_ip2F  r   zCVector2TypeTest.test_move_towards_errors.<locals>.invalid_types_ip2)r   r   )r   r   r   r   r   r   r   r   r   r   test_move_towards_errors,  s   z(Vector2TypeTest.test_move_towards_errorsc                    s  t dd t  d d   | t d |  d d |  d d | t fdd |  d d |  d	 d | t fd
d |  d d  ddg |  dd  dg |  d d dg | t ddg | t d d d< d d< |  jd |  jd ddg d d < |  jd |  jd dd }| t	| dd }| t	| dd }| t
| d S )Nr1   r2   rP   r   r   c                          d S NrP   r   r   r_   r   r   <lambda>X      z.Vector2TypeTest.testSequence.<locals>.<lambda>rg   c                      r   )Nr   r   r   r_   r   r   r   [  r   r0   r3   r4   333333"@=
ףp=&@c                  S      t  } g d| d d < d S Nr   rP   r    r   r_   r   r   r   r   i     z2Vector2TypeTest.testSequence.<locals>.overpopulatec                  S      t  } dg| d d < d S Nr   r   r_   r   r   r   underpopulateo     z3Vector2TypeTest.testSequence.<locals>.underpopulatec                  S      t  } d| d< d S Nr]   r   r   r_   r   r   r   r`   u     z5Vector2TypeTest.testSequence.<locals>.assign_nonfloat)r   r)   lenr   
IndexErrorr9   tuplerE   rF   r   r   r   r   r   r`   r   r_   r   testSequenceR  s6   
zVector2TypeTest.testSequencec                 C   s  d
dd}t | j}| t||d d d | t||dd d | t||ddd t | j}dg|d d d< | |d| jjg t | j}dg|d d d< | || jjdg t | j}||d d d< | || jj| jjg t | j}t | j}t | j}dg|dd< dg|tdd< d	|dd< | || | || | t|t| j | t|t| j | t|t| j d S )Nc                 S      |d ur|d ur|d ur| |||= d S |d ur(|d u r(|d ur(| |d |= d S |d u r<|d u r>|d ur@| d d |= d S d S d S d S Nr   r   startstopstepr   r   r   delSlice}     z5Vector2TypeTest.testExtendedSlicing.<locals>.delSlicerP   r   rg   r   r   皙@r   NNN)	r   r;   r   r   r)   rF   rE   slicerm   r   r   rH   rk   bcr   r   r   testExtendedSlicing{  s2   







z#Vector2TypeTest.testExtendedSlicingc                    s   t dd |  d | d v  | d v  | d v |  d | t fdd | t fdd d S )Nr   r   rP   c                         d v S Nstringr   r   r   r   r   r     r   z/Vector2TypeTest.test_contains.<locals>.<lambda>c                      r   Ny      @      @r   r   r   r   r   r     r   )r   
assertTrue__contains__assertFalser   r   rA   r   r   r   test_contains  s   
zVector2TypeTest.test_containsc                 C   s  | j | j }| t|t| j  | |j| j j| jj  | |j| j j| jj  | j | j }| t|t| j  | |j| j j| jd   | |j| j j| jd   | j | j	 }| t|t| j  | |j| j j| j	d   | |j| j j| j	d   | j
| j }| t|t| j  | |j| j
d | jj  | |j| j
d | jj  | j| j }| t|t| j  | |j| jd | jj  | |j| jd | jj  d S Nr   r   r;   r>   r   
isinstancerm   r)   rE   rF   r<   r=   r8   r:   r   v3r   r   r   testAdd  (    zVector2TypeTest.testAddc                 C   s  | j | j }| t|t| j  | |j| j j| jj  | |j| j j| jj  | j | j }| t|t| j  | |j| j j| jd   | |j| j j| jd   | j | j	 }| t|t| j  | |j| j j| j	d   | |j| j j| j	d   | j
| j }| t|t| j  | |j| j
d | jj  | |j| j
d | jj  | j| j }| t|t| j  | |j| jd | jj  | |j| jd | jj  d S r   r   r   r   r   r   testSub  r   zVector2TypeTest.testSubc                 C   s   | j | j }| t|t| j | |j| j | jj  | |j| j | jj  | j| j }| |j| jj| j  | |j| jj| j  d S r   )	r?   r;   r   r   rm   r)   rE   rF   r@   rG   r   r   r   testScalarMultiplication  s   z(Vector2TypeTest.testScalarMultiplicationc                 C   s   | j | j }| t|t| j  | |j| j j| j  | |j| j j| j  | j | j }| t|t| j  | 	|j| j j| j  | 	|j| j j| j  d S r   )
r;   r?   r   r   rm   r   rE   rF   r@   r)   rG   r   r   r   testScalarDivision  s   z"Vector2TypeTest.testScalarDivisionc                 C   B   |  t| jd |  t| jd | | j  | | j d S NFTr)   boolr5   r;   r   rA   r   r   r   testBool     zVector2TypeTest.testBoolc                 C   s   | j 
 }| t|t| j  | |j| j j | |j| j j | t|t| j  | j  }| t|t| j  | |j| j j  | |j| j j  | t|t| j  d S r   )	r;   r   r   rm   r)   rE   rF   assertNotEqualidrG   r   r   r   	testUnary  s   zVector2TypeTest.testUnaryc                 C   s   t dd}t dd}t dd}| ||kd | ||kd | ||kd | ||kd | |dkd | |dkd | |ddgkd | |ddgkd | |d	kd | |d	kd | |g d
kd | |g d
kd d S )Nr    r         @       r   TF)r    r   r   )r    r   r   )r   r)   r   int_vecflt_veczero_vecr   r   r   testCompare  s   


zVector2TypeTest.testComparec                 C   s   t dd}| t|d d S )Nr1   r2   z
[1.2, 3.4])r   r)   r   rG   r   r   r   testStr  s   
zVector2TypeTest.testStrc                 C   s2   t dd}| | d | |t |  d S )Nr1   r2   z<Vector2(1.2, 3.4)>)r   r)   __repr__rG   r   r   r   testRepr  s   
zVector2TypeTest.testReprc                    s   | j  }|j |   | j d  |   | j d  | t fdd | j  }| j  }| t|t| | t|t|  | t|t| | t| j  | j	 d}| j D ]}| || j |  |d7 }qad S )Nr   r   c                           S r   r   r   next_r   r   r         z*Vector2TypeTest.testIter.<locals>.<lambda>
r;   __iter____next__r)   r   StopIterationr   r   r9   r:   r   itit1it2idxvalr   r   r   testIter  s    




zVector2TypeTest.testIterc                 C   s  t dd}|d}|d}| |jd | |jd | |jd | |jd | |j|j | |j|j t dd}|d}| |jd | |jd |d}| |j|j | |j|j |d}| |j|j | |j|j | t dddt dd d S )	Nr   r   Z     rg   h  gPv@)r   rotater)   rE   rF   r   r;   r>   r   r   r   r   test_rotate)  s(   






"zVector2TypeTest.test_rotatec                 C   sj   dt jfdt jd fdt j d fdt jd ff}|D ]\}}| t||t |t |f qd S Nr   r   rP      )r   pir)   r   
rotate_radcossin)r   tests
initialVecradiansr   r   r   test_rotate_rad@  s   zVector2TypeTest.test_rotate_radc                 C   sl   t dd}| |dd  | |jd | |jd t dd}|d | |jd | |jd d S Nr   r   r  rg   r  )r   r)   	rotate_iprE   rF   rG   r   r   r   test_rotate_ipM  s   


zVector2TypeTest.test_rotate_ipc                 C   sr   dt jfdt jd fdt j d fdt jd ff}|D ]\}}t|}|| | |t |t |f qd S r  )r   r  r   rotate_rad_ipr)   r  r  )r   r  r  r  r   r   r   r   test_rotate_rad_ipW  s   
z"Vector2TypeTest.test_rotate_rad_ipc                    s    j  } |j|j |j|j  d   j j jd    j j jd    j j|j  j j|j  d  t fdd d S )Nr   r   r   r   c                      
    j  S r   r5   	normalizer   rA   r   r   r   l     
 z0Vector2TypeTest.test_normalize.<locals>.<lambda>)	r;   r  r   rE   rF   r)   r:   r   r   rG   r   rA   r   test_normalizec  s   
 $zVector2TypeTest.test_normalizec                    s    j 
 } |j|j |j|j  d  | d   |j|j |j|j  d   j j|j  j j|j  d  t fdd d S )Nr   r   c                      r  r   r5   normalize_ipr   rA   r   r   r   x  r  z3Vector2TypeTest.test_normalize_ip.<locals>.<lambda>)	r;   r   rE   rF   r)   r!  r   r   r   rG   r   rA   r   test_normalize_ipn  s     $z!Vector2TypeTest.test_normalize_ipc                 C   T   |  | j d | j }|  | d |  | j d |  | j d d S r   r)   r;   is_normalizedr  r7   r5   rG   r   r   r   test_is_normalizedz  
   
z"Vector2TypeTest.test_is_normalizedc                 C   s   |  | j| j| jj| jj | jj| jj   |  | j| j| jj| jd  | jj| jd    |  | j| j| jj| jd  | jj| jd    |  | j| j| j| j  |  | j| jd d S Nr   r   )r)   r;   crossr>   rE   rF   r=   r<   rA   r   r   r   
test_cross  s   *.."zVector2TypeTest.test_crossc                 C   s   |  | j| j| jj| jj | jj| jj   |  | j| j| jj| jd  | jj| jd    |  | j| j| jj| jd  | jj| jd    | | j| j| j| j | | j| j| j| j  d S r   )	r   r;   dotr>   rE   rF   r=   r<   r)   rA   r   r   r   test_dot  s   *.. "zVector2TypeTest.test_dotc                 C   s   |  | j| j| j | j  |  tdddd |  tdddd |  tdddd |  ttdddd	 d S )
Nr   )rg   r   r  r   )r   rg   r     )rg   r      )r)   r;   r  angle_tor>   r  r   absrA   r   r   r   test_angle_to  s     zVector2TypeTest.test_angle_toc                    sh   t dd}|d  |t ddtd   t fdd  |dd   | j d S )Nr   r$   rP   c                          j dS r   r5   scale_to_lengthr   rA   r   r   r         z6Vector2TypeTest.test_scale_to_length.<locals>.<lambda>r   )r   r4  r)   r   sqrtr   r   r5   rG   r   rA   r   test_scale_to_length  s   

z$Vector2TypeTest.test_scale_to_lengthc                 C   B   |  tdd d |  tdd d |  | j d d S )Nr    r  r   r   r   )r)   r   lengthr5   rA   r   r   r   test_length     zVector2TypeTest.test_lengthc                 C   r8  )Nr    r  r   r   r   )r)   r   length_squaredr5   rA   r   r   r   test_length_squared  r;  z#Vector2TypeTest.test_length_squaredc                    sx   t ddt dd} |t dd  d| |      t fdd d S )Nr   rg   r   r    c                           jS r   reflectr5   r   rG   r   r   r     r5  z.Vector2TypeTest.test_reflect.<locals>.<lambda>)r   r)   r@  r   r   r   nr   rG   r   test_reflect  s   

zVector2TypeTest.test_reflectc                    s   t dd}t | t dd}|  |d  |  t dd t |  d|  |  || t |  |  |  |  | t fdd d S )Nr   rg   r   r    c                      s     t S r   )
reflect_ipr   r   r>   r   r   r     r5  z1Vector2TypeTest.test_reflect_ip.<locals>.<lambda>)r   r)   rD  r@  r   r   r   r;   rB  r   rE  r   test_reflect_ip  s   

zVector2TypeTest.test_reflect_ipc                 C   s  | j | j }| | j| jtd | | jdtd | | jddgtd | | j | jt|j	|j	 |j
|j
   | | j | jt|j	|j	 |j
|j
   | | j | jt|j	|j	 |j
|j
   | | j | j d | | j | jd | | j | jd | | j | j| j| j | | j | j| j| j | | j | j| j| j  d S NrP   )r   r   r   r   )r;   r>   r)   r6   distance_tor7   r   r6  r   rE   rF   r<   r=   r8   r:   r   diffr   r   r   test_distance_to  s&   (((  $z Vector2TypeTest.test_distance_toc                 C   sr  | j | j }| | j| jd | | jdd | | jddgd | | j | j|j|j |j|j   | | j | j	|j|j |j|j   | | j | j
|j|j |j|j   | | j | j d | | j | jd | | j | jd | | j | j| j| j  | | j | j	| j| j | | j | j
| j| j d S rH  )r;   r>   r)   r6   distance_squared_tor7   r   rE   rF   r<   r=   r8   r:   rJ  r   r   r   test_distance_squared_to  s2   """z(Vector2TypeTest.test_distance_squared_toc                 C   s`   t dd}|d | |t d |dd | |t dd |d | |t d d S )	Nr    r  r   )r   r   r   r   )r  r   )r   r   )r   updater)   r   rG   r   r   r   test_update  s   


zVector2TypeTest.test_updatec              	   C   s   |  | jj| jj| jjf |  | jj| jj| jj| jj| jj| jj| jjf | j| j_|  | j| j | j| j_|  | j| jd | jd f |  t| jt	 dd }dd }| 
t| | 
t| dd }| 
t| d	d
 }| 
t| d S )Nr   r   c                   S      dt  _d S Nr   rP   )r   xxr   r   r   r   invalidSwizzleX     z5Vector2TypeTest.test_swizzle.<locals>.invalidSwizzleXc                   S   rQ  rR  )r   yyr   r   r   r   invalidSwizzleY  rV  z5Vector2TypeTest.test_swizzle.<locals>.invalidSwizzleYc                   S   rQ  Nr    )r   xyr   r   r   r   invalidAssignment  rV  z7Vector2TypeTest.test_swizzle.<locals>.invalidAssignmentc                   S   s   t t d d S )N   ä)getattrr   r   r   r   r   unicodeAttribute  s   z6Vector2TypeTest.test_swizzle.<locals>.unicodeAttribute)r)   r;   yxrF   rE   xxyyxyr<   rZ  rm   r   r   AttributeErrorr   )r   rU  rX  r[  r^  r   r   r   test_swizzle  s$   &

zVector2TypeTest.test_swizzlec                 C   h   |  t| jjt |  t| jjt |  t| jjt |  t| jj	t
 |  t| jjt
 d S r   )r)   rm   r;   rE   floatrZ  r   xyxr   xyxyr   xyxyxrA   r   r   r   test_swizzle_return_types$  
   z)Vector2TypeTest.test_swizzle_return_typesc                    s   j } j} j} j} | | |j| |j| f  | | |j| |j| f  | | |j| |j| f  | | |j| |j| f  | | |j| |j| f  | | |j| |j| f  | | |j| |j| f  | |k|j|ko|j|k  | |k |j|k o|j|k   | |k|j|ko|j|k  | |k||j|jfv  | |k|j|ko|j|k  | |k|j|ko|j|k  | |k||j|jfv  ||  ||j ||j f  ||  ||j ||j f  ||  ||j ||j f  ||  ||j ||j f  ||  ||j ||j f  ||  ||j ||j f  ||  ||j ||j f  || k ||jk o||jk   || k||jko||jk  || k||jko||jk  || k||j|jfv  || k||jko||jk  || k||jko||jk  || k||j|jfv  t| | t|  | | ||   | | ||   | | |j|j |j|j f  | | |j|j |j|j f  | | |j|j |j|j f  | | |j|j |j|j f  | | |j|j |j|j f  | |k|j|jko|j|jk  | |k |j|jk o|j|jk   | |k|j|jko|j|jk  | |k|j|jko|j|jk  | |k|j|jko|j|jk  | |k|j|jko|j|jk  ||  ||   ||  ||   ||  |j|j |j|j f  ||  |j|j |j|j f  ||  |j|j |j|j f  ||  |j|j |j|j f  ||  |j|j |j|j f  || k |j|jk o|j|jk   || k|j|jko|j|jk  || k|j|jko|j|jk  || k|j|jko|j|jk  || k|j|jko|j|jk  || k|j|jko|j|jk  | |  ||   | |  ||   | |  |j|j |j|j f  | |  |j|j |j|j f  | |  |j|j |j|j f  | |  |j|j |j|j f  | |  |j|j |j|j f  | | k |j|jk o|j|jk   | | k|j|jko|j|jk  | | k|j|jko|j|jk  | | k|j|jko|j|jk  | | k|j|jko|j|jk  | | k|j|jko|j|jk  t	| t	|jt	|jf  |  |   | 
 |
   t
| t
|  t
t  t
t    j d d  tdd   t fdd  t fdd  tdd   tdd   td	d   t fd
d  t fdd  t fdd  t fdd  t fdd  t fdd d S )Nr   r   r   c                   S   s   t tdd dS Nrg   r   r1   )powr   elementwiser   r   r   r   r         z2Vector2TypeTest.test_elementwise.<locals>.<lambda>c                          j  d S Nrg   r5   rm  r   rA   r   r   r         c                      ro  rp  rq  r   rA   r   r   r     rr  c                   S   s   t dd d S r(  r   rm  r   r   r   r   r         c                   S   s   t dd d S r(  rs  r   r   r   r   r     rt  c                   S   s   t dd d S r(  rs  r   r   r   r   r     rt  c                      s   t dd  j S r   r   rm  r5   r   rA   r   r   r     rn  c                      s   t dd  j S r   ru  r   rA   r   r   r     rn  c                      s   t dd  j S r   ru  r   rA   r   r   r     rn  c                         d j   S r   rq  r   rA   r   r   r     rr  c                         d j   S r   rq  r   rA   r   r   r     rr  c                         d j   S r   rq  r   rA   r   r   r     rr  )r;   r>   r?   r@   r)   rm  rE   rF   rm   r0  r   r   r5   r   r   ZeroDivisionError)r   r;   r>   r?   r@   r   rA   r   test_elementwise,  s   $$$$$$$$$$ $$ $$$$$$$&&& && (((((******(((((******$$$,$&&&&&&$z Vector2TypeTest.test_elementwisec                    s    t fdd   t fdd   t fdd tddtddd }fdd	td D D ]\}} | d  |||  q@ | td
dtdd   }fdd	td D D ]\}} |    t|     q |  	d  	d   tfdd d S )Nc                          j  jdS Nr
   r5   slerpr;   r   rA   r   r   r         z,Vector2TypeTest.test_slerp.<locals>.<lambda>c                      r{  r|  r;   r~  r5   r   rA   r   r   r     r  c                          j  j dS r|  r5   r~  r   rA   r   r   r     r  r   r   r   c                 3   s(    | ]}| |t  fV  qd S r   r~  rd  .0istepsr;   r>   r   r   	<genexpr>  s   & z-Vector2TypeTest.test_slerp.<locals>.<genexpr>r	   c                 3   *    | ]}| | t  fV  qd S r   r  r  r  r   r   r       ( r
   c                             dS r|  r~  r   r;   r   r   r     rr  )
r   r   r   r/  ranger   r9  r)   rd  r~  r   
angle_stepr  uradial_factorr   r   r  r;   r>   r   
test_slerp  s.   

&

&"zVector2TypeTest.test_slerpc                    sj   t dd t dd|  dd | t fdd t dd t dd|  dd	 d S )
Nr   r   r
   )r   r   c                           dS Nr$   r   r   r;   r>   r   r   r     r5  z+Vector2TypeTest.test_lerp.<locals>.<lambda>r   rj   )r   r$   )r   r)   r   r   r   rA   r   r  r   r     s   



zVector2TypeTest.test_lerpc                    s  t    | j  | | j  | | jt | j  | | j d | | j d | d| j  d | t fdd | t fdd | t fdd | t fd	d | t fd
d | t fdd | tdd  | tdd  | tdd  | tdd  | tdd  | tdd   d |  d| j  | t dd| j  | t d   d |  | j | t d| j | t d  d S )Nr  )r   r  rP   )rP   r  c                      
     dS N)NN
from_polarr   r_   r   r   r     r  z,Vector2TypeTest.test_polar.<locals>.<lambda>c                      r  Nabr  r   r_   r   r   r     r  c                      r  Nr   r  r   r_   r   r   r     r  c                      r  r   r  r   r_   r   r   r     r  c                      r  Nr   r  r   r_   r   r   r     r  c                      s     ddS Nr   rP   r  r   r_   r   r   r     r5  c                   S   
   t dS r  r   r  r   r   r   r   r     r  c                   S   r  r  r  r   r   r   r   r     r  c                   S   r  r  r  r   r   r   r   r     r  c                   S   r  r   r  r   r   r   r   r     r  c                   S   r  r  r  r   r   r   r   r     r  c                   S   s   t ddS r  r  r   r   r   r   r     r5  )r
   r  r
   )	r   r  r;   as_polarr)   r6   r7   r   r   rA   r   r_   r   
test_polar  s6   

zVector2TypeTest.test_polarc                 C   s`   G dd dt jj}|dd}|dd}|| }| ||dd |d9 }| ||dd d S )Nc                   @      e Zd ZdS )z7Vector2TypeTest.test_subclass_operation.<locals>.VectorNr+   r,   r-   r   r   r   r   Vector      r  rP   r   r   r  )r   r   r   r)   )r   r  vec_avec_b
result_addr   r   r   test_subclass_operation  s   

z'Vector2TypeTest.test_subclass_operationc                 C   s@   t dd}t dd}||}| |j|j | d|j dS )MProject onto x-axis, e.g. get the component pointing in the x-axis direction.rP   r   r   Nr   projectr)   rE   rF   r   rH   x_axisactualr   r   r   test_project_v2_onto_x_axis  s
   


z+Vector2TypeTest.test_project_v2_onto_x_axisc                 C   s@   t dd}t dd}||}| d|j | |j|j dS )MProject onto y-axis, e.g. get the component pointing in the y-axis direction.rP   r   r	   Nr  r   rH   y_axisr  r   r   r   test_project_v2_onto_y_axis  s
   


z+Vector2TypeTest.test_project_v2_onto_y_axisc                 C   sZ   t dd}t dd}||}|||| | }| |j|j | |j|j dS )Project onto other vector.rP   r    r   N)r   r  r+  r)   rE   rF   r   rH   otherr  r}   r   r   r   test_project_v2_onto_other  s   


z*Vector2TypeTest.test_project_v2_onto_otherc                 C   ^   t dd}t dd}|t|}|||| | }| |j|j | |j|j dS )#Project onto other tuple as vector.rP   r    r   N)r   r  r   r+  r)   rE   rF   r  r   r   r   #test_project_v2_onto_other_as_tuple!     

z3Vector2TypeTest.test_project_v2_onto_other_as_tuplec                 C   r  )"Project onto other list as vector.rP   r    r   N)r   r  r9   r+  r)   rE   rF   r  r   r   r   "test_project_v2_onto_other_as_list/  r  z2Vector2TypeTest.test_project_v2_onto_other_as_listc                 C   s(   t dd}t dd}| t|j| dS )ECheck if exception is raise when projected on vector has zero length.rP   r    r   N)r   r   r   r  r   rH   r  r   r   r   /test_project_v2_raises_if_other_has_zero_length=  s   

z?Vector2TypeTest.test_project_v2_raises_if_other_has_zero_lengthc                 C   s"   t dd}d}| t|j| dS )ECheck if exception is raise when projected on vector is not iterable.rP   r    r   N)r   r   r   r  r  r   r   r   /test_project_v2_raises_if_other_is_not_iterableF  s   
z?Vector2TypeTest.test_project_v2_raises_if_other_is_not_iterablec                 C   s.   t dd}| t|t | t|t d S )Nr    r  )r   r   r   r   r   r   rG   r   r   r   test_collection_abcO  s   
z#Vector2TypeTest.test_collection_abcc                 C   st   t dd}|d}|dd}| || |d | || |dd | || t dd}| || d S )N   rP   r   r   gW, ;@gc(3I?)r   clamp_magnituder)   clamp_magnitude_ipr   r;   r>   r   expected_v2r   r   r   test_clamp_mag_v2_maxT  s   



z%Vector2TypeTest.test_clamp_mag_v2_maxc                 C   sH   t dd}|dd}|dd t dd}| || | || d S )Nr   rP   r    r   gcOT\w?gcOT\w@)r   r  r  r)   r   r;   r>   r  r   r   r   test_clamp_mag_v2_minc  s   

z%Vector2TypeTest.test_clamp_mag_v2_minc              	   C   sv   t dd}dD ]1}| j|d! |j| }|j|  | || | |t dd W d    n1 s3w   Y  qd S )Nr   rP   )r   rh   )r!   gffffff@)(\?gp=
ף@gffffff@args)r   subTestr  r  r)   r   r;   r  r>   r   r   r   test_clamp_mag_v2_no_changek  s   


z+Vector2TypeTest.test_clamp_mag_v2_no_changec                 C   sr   t dd}|dd}|dd | || | | d |d}|dd | || | |t   d S Nr   rP   rh   r   )r   r  r  r)   r   r9  r   r;   r>   r   r   r   test_clamp_mag_v2_edge_casesy  s   

z,Vector2TypeTest.test_clamp_mag_v2_edge_casesc              	   C   s   t dd}dD ].}| j|d | jt|jg|R   | jt|jg|R   W d    n1 s0w   Y  qdD ].}| j|d | jt|jg|R   | jt|jg|R   W d    n1 saw   Y  q8t  }| t|jd | t|jd d S Nr   rP   ))foobarr   )g9vcu@test)invalid_args))rg   )r  r    )r   )r  r   r    r  )r   r  r   r   r  r  r   r   r;   r  r>   r   r   r   test_clamp_mag_v2_errors  s    
z(Vector2TypeTest.test_clamp_mag_v2_errorsc                 C   s  t dd}G dd dt }|dd}| | d | t|| | t|t|  | |t|| | |t||d | |t||d | |t|	d | |t|
d | |t|| | |t||d | |t|d | |t|dd | |t| |  |dd}| t|| | | t|| | | t|d | | t|d | | t| d | d	S )
z Check if Vector2 is subclassabler  rP   c                   @      e Zd Zdd ZdS )z7Vector2TypeTest.test_subclassing_v2.<locals>.TestVectorc                 S      dS N  r   rA   r   r   r   supermariobrosiscool     zLVector2TypeTest.test_subclassing_v2.<locals>.TestVector.supermariobrosiscoolNr+   r,   r-   r  r   r   r   r   
TestVector      r  r   r  r   r    N)r   r)   r  r   rm   rp   r@  r   r~  r  r  r  rz   r  rm  r   rH   r  r  other1r   r   r   test_subclassing_v2  s,   


z#Vector2TypeTest.test_subclassing_v2N)Ir+   r,   r-   rB   rI   rK   rN   rS   rV   rW   rX   rY   rd   rn   rt   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&  r*  r,  r1  r7  r:  r=  rC  rG  rL  rN  rP  rb  rh  rz  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r/   O   s    O&)%	

		
		r/   c                   @   s  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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/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Z d=d> Z!d?d@ Z"dAdB Z#dCdD Z$dEdF Z%dGdH Z&dIdJ Z'dKdL Z(dMdN Z)dOdP Z*dQdR Z+dSdT Z,dUdV Z-dWdX Z.dYdZ Z/d[d\ Z0d]d^ Z1d_d` Z2dadb Z3dcdd Z4dedf Z5dgdh Z6didj Z7dkdl Z8dmdn Z9dodp Z:dqdr Z;dsdt Z<e=>e?dudvdw Z@dxdy ZAdzd{ ZBd|d} ZCd~d ZDdd ZEdd ZFdd ZGdd ZHdd ZIdd ZJdd ZKdd ZLe=>e?dudd ZMdd ZNdd ZOdd ZPdd ZQdd ZRdd ZSdd ZTdd ZUdd ZVdd ZWdd ZXdd ZYdd ZZdd Z[dd Z\dd Z]dd Z^dd Z_dd Z`dd Zadd ZbdS )Vector3TypeTestc                 C   s~   t  | _t ddd| _t ddd| _t ddd| _d| _t| j| _t | j| _d| _	t| j	| _
t | j	| _d| _d| _d S )Nr   r   r1   r2   333333#@)r3   r4   g @r3   r4   )r   r5   r6   r7   e3r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   r   r   r   rB     s   
zVector3TypeTest.setUpc                 C   s4   t  }| |jd | |jd | |jd d S rC   r   r)   rE   rF   zrG   r   r   r   rI     s   z'Vector3TypeTest.testConstructionDefaultc                 C   s:   t ddd}| |jd | |jd | |jd d S )Nr1   r2   r  r  rG   r   r   r   testConstructionXYZ     z#Vector3TypeTest.testConstructionXYZc                 C   s6   t d}| |jd | |jd | |jd d S )Nr  r1   r2   r  r  rG   r   r   r   rW        z%Vector3TypeTest.testConstructionTuplec                 C   s:   t g d}| |jd | |jd | |jd d S )Nr1   r2   333333#r1   r2   r  r  rG   r   r   r   rX     r  z$Vector3TypeTest.testConstructionListc                 C   s>   t t ddd}| |jd | |jd | |jd d S )Nr1   r2   r  r  rG   r   r   r   testConstructionVector3  s   z'Vector3TypeTest.testConstructionVector3c                 C   s6   t d}| |jd | |jd | |jd d S rJ   r  rG   r   r   r   rK     r  z&Vector3TypeTest.testConstructionScalarc                 C   s8   t dd}| |jd | |jd | |jd d S rM   r  rG   r   r   r   rN     s   
z.Vector3TypeTest.testConstructionScalarKeywordsc                 C   s<   t dddd}| |jd | |jd | |jd d S )Nr   rP   r    )rE   rF   r  r   rR   r   r  rG   r   r   r   rS     s   z(Vector3TypeTest.testConstructionKeywordsc                 C   s&   |  ttdd | j ttddd d S )Nr   rP   rQ   )r   r   r   rA   r   r   r   testConstructionMissing  s   z'Vector3TypeTest.testConstructionMissingc                 C   s   | j j}| || j j | || j d  | j j}| || j j | || j d  | j j}| || j j | || j d  d| j _| | j jd d| j _| | j jd d| j _| | j jd dd }| t| d S )Nr   r   rP   rZ   c                  S   r[   r\   r^   r_   r   r   r   r`     ra   z<Vector3TypeTest.testAttributeAccess.<locals>.assign_nonfloat)r;   rE   r)   rF   r  r   r   rb   r   r   r   rd     s"   z#Vector3TypeTest.testAttributeAccessc                 C   sH   t ddd}| }| |j|j | |j|j | |j|j d S )Ng     x@g     @g     8@)r   rp   r)   rE   rF   r  rq   r   r   r   rt     s
   zVector3TypeTest.testCopyc                    s  t ddd | t d |  d d |  d d |  d d | t fdd	 |  d
 d |  d d |  d d | t fdd	 |  d d  g d |  dd  ddg |  d d dg |  d d
 ddg |  dd dg | t g d | t d d d< d d< d d< |  jd |  jd |  j	d g d d d < |  jd |  jd |  j	d dd }| t
| dd }| t
| dd }| t| d S )Nr1   r2   r  r    r   r   rP   c                      r   rY  r   r   r_   r   r   r   '  r   z.Vector3TypeTest.testSequence.<locals>.<lambda>rg   r   r   c                      r   )Nr  r   r   r_   r   r   r   +  r   r  r3   r4   g )r   r   R*r   r   r  c                  S   r   N)r   rP   r    r  r   r_   r   r   r   r   >  r   z2Vector3TypeTest.testSequence.<locals>.overpopulatec                  S   r   r   r  r_   r   r   r   r   D  r   z3Vector3TypeTest.testSequence.<locals>.underpopulatec                  S   r   r   r   r_   r   r   r   r`   J  r   z5Vector3TypeTest.testSequence.<locals>.assign_nonfloat)r   r)   r   r   r   r9   r   rE   rF   r  r   r   r   r   r_   r   r   !  sB   zVector3TypeTest.testSequencec                 C   s  ddd}t | j}| t||d d d | t||dd d | t||ddd t | j}ddg|d d d< | |d| jjdg t | j}ddg|d d d	< | |d| jjdg t | j}||d d d
< | || jj| jj| jjg t | j}t | j}t | j}dg|dd< dg|tdd< d|dd< | || | || | t	|t	| j | t	|t	| j | t	|t	| j d S )Nc                 S   r   r   r   r   r   r   r   r   R  r   z5Vector3TypeTest.testExtendedSlicing.<locals>.delSlicerP   r   rf   gr      r   rg   r   r   r   )
r   r;   r   r   r)   rF   r  rE   r   rm   r   r   r   r   r   P  s2   







z#Vector3TypeTest.testExtendedSlicingc                    s   t ddd |  d | d v  | d v  | d v  | d v |  d | t fdd | t fdd d S )	Nr   r   rP   r    r   c                      r   r   r   r   r   r   r   r     r   z/Vector3TypeTest.test_contains.<locals>.<lambda>c                      r   r   r   r   r   r   r   r     r   )r   r   r   r   r   r   rA   r   r   r   r   u  s   zVector3TypeTest.test_containsc                 C   sL  | j | j }| t|t| j  | |j| j j| jj  | |j| j j| jj  | |j| j j| jj  | j | j	 }| t|t| j  | |j| j j| j	d   | |j| j j| j	d   | |j| j j| j	d   | j | j
 }| t|t| j  | |j| j j| j
d   | |j| j j| j
d   | |j| j j| j
d   | j| j }| t|t| j  | |j| jd | jj  | |j| jd | jj  | |j| jd | jj  | j| j }| t|t| j  | |j| jd | jj  | |j| jd | jj  | |j| jd | jj  d S Nr   r   rP   r;   r>   r   r   rm   r)   rE   rF   r  r<   r=   r8   r:   r   r   r   r   r     2    zVector3TypeTest.testAddc                 C   sL  | j | j }| t|t| j  | |j| j j| jj  | |j| j j| jj  | |j| j j| jj  | j | j	 }| t|t| j  | |j| j j| j	d   | |j| j j| j	d   | |j| j j| j	d   | j | j
 }| t|t| j  | |j| j j| j
d   | |j| j j| j
d   | |j| j j| j
d   | j| j }| t|t| j  | |j| jd | jj  | |j| jd | jj  | |j| jd | jj  | j| j }| t|t| j  | |j| jd | jj  | |j| jd | jj  | |j| jd | jj  d S r  r  r   r   r   r   r     r  zVector3TypeTest.testSubc                 C   s   | j | j }| t|t| j | |j| j | jj  | |j| j | jj  | |j| j | jj  | j| j	 }| |j| jj| j	  | |j| jj| j	  | |j| jj| j	  d S r   )
r?   r;   r   r   rm   r)   rE   rF   r  r@   rG   r   r   r   r     s   z(Vector3TypeTest.testScalarMultiplicationc                 C   s   | j | j }| t|t| j  | |j| j j| j  | |j| j j| j  | |j| j j| j  | j | j	 }| t|t| j  | 
|j| j j| j	  | 
|j| j j| j	  | 
|j| j j| j	  d S r   )r;   r?   r   r   rm   r   rE   rF   r  r@   r)   rG   r   r   r   r     s   z"Vector3TypeTest.testScalarDivisionc                 C   r   r   r   rA   r   r   r   r     r   zVector3TypeTest.testBoolc                 C   s   | j 
 }| t|t| j  | |j| j j | |j| j j | |j| j j | t	|t	| j  | j  }| t|t| j  | |j| j j  | |j| j j  | |j| j j  | t	|t	| j  d S r   )
r;   r   r   rm   r)   rE   rF   r  r   r   rG   r   r   r   r     s   zVector3TypeTest.testUnaryc                 C   s   t ddd}t ddd}t ddd}| ||kd | ||kd	 | ||kd | ||kd	 | |d
kd | |d
kd	 | |ddgkd | |ddgkd	 | |dkd | |dkd	 | |g dkd | |g dkd	 d S )Nr    r      r   r   g      *@r   TF)r    r   r  r   )r    r   r   r   r   r)   r   r   r   r   r     s   zVector3TypeTest.testComparec                 C   s    t ddd}| t|d d S )Nr1   r2   r3   z[1.2, 3.4, 5.6])r   r)   r   rG   r   r   r   r     s   zVector3TypeTest.testStrc                 C   s4   t ddd}| | d | |t |  d S )Nr1   r2   r  z<Vector3(1.2, 3.4, -9.6)>)r   r)   r   rG   r   r   r   r     s   zVector3TypeTest.testReprc                    s   | j  }|j |   | j d  |   | j d  |   | j d  | t fdd | j  }| j  }| t|t| | t|t|  | t|t| | t| j  | j	 d}| j D ]}| || j |  |d7 }qkd S )Nr   r   rP   c                      r   r   r   r   r   r   r   r     r   z*Vector3TypeTest.testIter.<locals>.<lambda>r   r   r   r   r   r    s"   




zVector3TypeTest.testIterc              	   C   s  |  ttdddtddd |  tttdddtj |  ttdddttddd |  ttdddttddd |  ttdddtddd |  ttdddtddd |  ttdddtddd |  ttdddtddd |  ttdddtddd |  ttd	d	d	td	d	d	 |  ttd
d
d
tddd |  ttdddtddd |  ttdddtddd |  ttdddtddd |  ttdddtddd |  ttdddtddd |  ttdddtddd |  ttdddtddd |  ttdddtddd |  ttdddtddd |  ttdddtddd |  ttdddtddd |  ttdddtddd |  ttddddtddd |  tttddddtj |  tttddddtj |  tttddddtj |  ttdddtddd |  ttdddtddd |  ttdddtd d d  |  ttd!d!d!td"d"d" |  ttd#d#d#td$d$d$ |  ttd%d%d%td"d"d" | tttdddd& | tttdddd' d S re   )r)   rl   r   r   rm   r   r   rA   r   r   r   rn     s     $z$Vector3TypeTest.test___round___basicc              	   C   s  t ddd}t ddd}|d|}|d|}| |jd | |jd | |jd | |jd | |jd | |jd | |j|j | |j|j | |j|j t ddd}|d|}| |jd | |jd | |jd |d|}| |j|j | |j|j | |j|j |d|}| |j|j | |j|j | |j|j | t ddddt dddt ddd d S )	Nr   r   r  r  rg   r  r  g(v@)r   r  r)   rE   rF   r  )r   r;   axisr>   r   r   r   r   r
    s:   $zVector3TypeTest.test_rotatec                 C   s~   t ddd}dtjfdtjd fdtj d fdtjd ff}|D ]\}}t |||}| |t|t|df q!d S Nr   r   r   r   r   rP   r  )r   r   r  r  r)   r  r  r   r  r  r  r  r   r   r   r   r    s    zVector3TypeTest.test_rotate_radc                 C   s   t ddd}t ddd}| |d|d  | |jd | |jd | |jd t ddd}|d| | |jd | |jd | |jd d S r  )r   r)   r  rE   rF   r  )r   rH   r  r   r   r   r    s   zVector3TypeTest.test_rotate_ipc                 C   s   t ddd}dtjfdtjd fdtj d fdtjd ff}|D ]\}}t |}||| | |t|t|df q!d S r	  )r   r   r  r  r)   r  r  r  r   r   r   r    s    z"Vector3TypeTest.test_rotate_rad_ipc                 C   s\  t ddd}|d}|d}| |jd | |jd | |jd | |jd | |jd | |jd | |j|j | |j|j | |j|j t ddd}|d}| |jd | |jd | |jd |d}| |j|j | |j|j | |j|j |d}| |j|j | |j|j | |j|j d S Nr   r   r  r  rg   r  r  )r   rotate_xr)   rE   rF   r  r   r	  r   r   r   test_rotate_x  2   




zVector3TypeTest.test_rotate_xc                 C   s,   t ddd}|tjd }| |d d S Nr   r   rP   )r   r   r   )r   rotate_x_radr   r  r)   r   r   r   r   r   r   test_rotate_x_rad     z!Vector3TypeTest.test_rotate_x_radc                 C   s   t ddd}| |dd  | |jd | |jd | |jd t ddd}|d | |jd | |jd | |jd d S r  )r   r)   rotate_x_iprE   rF   r  r   rG   r   r   r   test_rotate_x_ip     
z Vector3TypeTest.test_rotate_x_ipc                 C   s,   t ddd}|tjd  | |d d S r  )r   rotate_x_rad_ipr   r  r)   r   r   r   r   r   test_rotate_x_rad_ip  r  z$Vector3TypeTest.test_rotate_x_rad_ipc                 C   s\  t ddd}|d}|d}| |jd | |jd | |jd | |jd | |jd | |jd | |j|j | |j|j | |j|j t ddd}|d}| |jd | |jd | |jd |d}| |j|j | |j|j | |j|j |d}| |j|j | |j|j | |j|j d S r  )r   rotate_yr)   rE   rF   r  r   r	  r   r   r   test_rotate_y  r  zVector3TypeTest.test_rotate_yc                 C   ,   t ddd}|tjd }| |d d S Nr   r   rP   r   r   rg   )r   rotate_y_radr   r  r)   r  r   r   r   test_rotate_y_rad  r  z!Vector3TypeTest.test_rotate_y_radc                 C   s   t ddd}| |dd  | |jd | |jd | |jd t ddd}|d | |jd | |jd | |jd d S r  )r   r)   rotate_y_ipr   rE   rF   r  rG   r   r   r   test_rotate_y_ip  r  z Vector3TypeTest.test_rotate_y_ipc                 C   ,   t ddd}|tjd  | |d d S r  )r   rotate_y_rad_ipr   r  r)   r  r   r   r   test_rotate_y_rad_ip+  r  z$Vector3TypeTest.test_rotate_y_rad_ipc                 C   s\  t ddd}|d}|d}| |jd | |jd | |jd | |jd | |jd | |jd | |j|j | |j|j | |j|j t ddd}|d}| |jd | |jd | |jd |d}| |j|j | |j|j | |j|j |d}| |j|j | |j|j | |j|j d S r  )r   rotate_zr)   rE   rF   r  r   r	  r   r   r   test_rotate_z0  r  zVector3TypeTest.test_rotate_zc                 C   r  Nr   r   rP   r   r   r   )r   rotate_z_radr   r  r)   r  r   r   r   test_rotate_z_radK  r  z!Vector3TypeTest.test_rotate_z_radc                 C   s   t ddd}| |dd  | |jd | |jd | |jd t ddd}|d | |jd | |jd | |jd d S r  )r   r)   rotate_z_ipr   rE   rF   r  rG   r   r   r   test_rotate_z_ipP  r  z Vector3TypeTest.test_rotate_z_ipc                 C   r$  r)  )r   rotate_z_rad_ipr   r  r)   r  r   r   r   test_rotate_z_rad_ip\  r  z$Vector3TypeTest.test_rotate_z_rad_ipc                    s    j  } |j|j |j|j  |j|j  d   j j jd    j j jd    j j jd   j j|j  j j|j  d  j j|j  j j|j  d   j j|j  j j|j  d  } |d  t	 fdd d S )Nr   r   r   rP   r   c                      r  r   r  r   rA   r   r   r   p  r  z0Vector3TypeTest.test_normalize.<locals>.<lambda>)
r;   r  r   rE   rF   r  r)   r:   r   r   r   rH   r)  r   rA   r   r  a  s   
,zVector3TypeTest.test_normalizec                    s    j 
 } |j|j |j|j  |j|j  d  | d   |j|j |j|j  |j|j  d  j j|j  j j|j  d  j j|j  j j|j  d   j j|j  j j|j  d  } |d  t	 fdd d S )Nr   rP   r   c                      r  r   r   r   rA   r   r   r     r  z3Vector3TypeTest.test_normalize_ip.<locals>.<lambda>)
r;   r   rE   rF   r  r)   r!  r   r   r   r1  r   rA   r   r"  r  s   ,,z!Vector3TypeTest.test_normalize_ipc                 C   r#  r   r$  rG   r   r   r   r&    r'  z"Vector3TypeTest.test_is_normalizedc                 C   s   dd }|  | j| j|| j| j |  | j| j|| j| j |  | j| j|| j| j |  | j| j| j| j  |  | j| j| j d S )Nc                 S   s`   t | d |d  | d |d   | d |d  | d |d   | d |d  | d |d   S Nr   rP   r   r  )rk   r   r   r   r   r)    s
   z)Vector3TypeTest.test_cross.<locals>.cross)r)   r;   r)  r>   r=   r<   r5   )r   r)  r   r   r   r*    s      "zVector3TypeTest.test_crossc                 C   s  |  | j| j| jj| jj | jj| jj  | jj| jj   |  | j| j| jj| jd  | jj| jd   | jj| jd    |  | j| j| jj| jd  | jj| jd   | jj| jd    |  | j| j| j| j |  | j| j| j| j  d S r  )	r   r;   r+  r>   rE   rF   r  r=   r<   rA   r   r   r   r,    s   .44 "zVector3TypeTest.test_dotc                 C   s   |  tddddd |  tddddd |  tddddd |  ttddddd	 |  | j| j| j| j| j | j  d S )
Nr   r   )rg   r   r   r  r  )rg   r   r   r-  )rg   r   rg   r.  )	r)   r   r/  r0  r;   r  r>   r)  r  rA   r   r   r   r1    s   zVector3TypeTest.test_angle_toc                    sl   t ddd}|d  |t dddtd   t fdd  |dd   | j d S )Nr   r$   r    c                      r2  r   r3  r   rA   r   r   r     r5  z6Vector3TypeTest.test_scale_to_length.<locals>.<lambda>r   )r   r4  r)   r   r6  r   r   r5   rG   r   rA   r   r7    s   
z$Vector3TypeTest.test_scale_to_lengthc                 C   sR   |  tddd td |  tddd td |  | j d d S Nr    r  r   2   r   r   )r)   r   r9  r   r6  r5   rA   r   r   r   r:    s   zVector3TypeTest.test_lengthc                 C   sF   |  tddd d |  tddd d |  | j d d S r3  )r)   r   r<  r5   rA   r   r   r   r=    s   z#Vector3TypeTest.test_length_squaredc                    s~   t dddt ddd} |t ddd  d| |      t fdd d S )Nr   rg   r   r    c                      r>  r   r?  r   rG   r   r   r     r5  z.Vector3TypeTest.test_reflect.<locals>.<lambda>)r   r)   r@  r   r   rA  r   rG   r   rC    s   zVector3TypeTest.test_reflectc                    s   t ddd}t |t ddd} |d   t ddd t |d|   || t ||   |   t fdd d S )Nr   rg   r   r    c                      r>  r   )rD  r5   r   r   r>   r   r   r     r5  z1Vector3TypeTest.test_reflect_ip.<locals>.<lambda>)r   r)   rD  r@  r   r   rF  r   r5  r   rG    s   zVector3TypeTest.test_reflect_ipc                 C   s  | j | j }| | j| jtd | | jdtd | | jg dtd | | j | jt|j|j |j	|j	  |j
|j
   | | j | jt|j|j |j	|j	  |j
|j
   | | j | jt|j|j |j	|j	  |j
|j
   | | j | j d | | j | jd | | j | jd | | j | j| j| j  | | j | j| j| j | | j | j| j| j d S NrP   r*  r   )r;   r>   r)   r6   rI  r7   r   r6  rE   rF   r  r<   r=   r8   r:   rJ  r   r   r   rL    s,   (((  $z Vector3TypeTest.test_distance_toc                 C   sb  t dd}tddd}| t|j| | t|j| | t|jd | t|jd | t|jd | t|jg d | t|jg d | t|jdg | t|jd | t|jd | t|jd | t|jddg | t|jdg | t|jd | t|jg g f | t|jd | t|j | t|jdd	 | t|jdd	d d S 
Nr   r   r   r   r   )r   r   r   r  rj  )r   r%   )r   )r%   rS  )r   r   r   r   rI  r   )r   r>   r   r   r   r   test_distance_to_exceptions  s>   
	z+Vector3TypeTest.test_distance_to_exceptionsc                 C   sH  t dd}tddd}|j}|j}| t|| | t|| | t|d | t|d | t|d | t|g d | t|g d | t|dg | t|d | t|d | t|d | t|ddg | t|dg | t|d | t|g g f | t|d | t| | t|dd	 | t|dd	d d S r7  )r   r   rM  r   r   r   )r   r>   r   dist_tdist_t3r   r   r   #test_distance_squared_to_exceptions"  sB   
	z3Vector3TypeTest.test_distance_squared_to_exceptionsc                 C   s  | j | j }| | j| jd | | jdd | | jg dd | | j | j|j|j |j|j  |j	|j	   | | j | j
|j|j |j|j  |j	|j	   | | j | j|j|j |j|j  |j	|j	   | | j | j d | | j | jd | | j | jd | | j | j| j| j  | | j | j
| j| j | | j | j| j| j d S r6  )r;   r>   r)   r6   rM  r7   r   rE   rF   r  r<   r=   r8   r:   rJ  r   r   r   rN  O  s8   """z(Vector3TypeTest.test_distance_squared_toc                 C   s   |  | jj| jj| jj| jjf |  | jj| jj| jj| jj| jj| jj| jj| jj| jj| jjf	 | j| j_|  | j| j | j| j_	|  | j| jd | jd | jd f | jd d | j_
|  | j| jd | jd | jd f |  t| jt d S r2  )r)   r;   yxzrF   rE   r  	xxyyzzxyzr<   xyzzxyyzrm   r   rA   r   r   r   rb  m  s*   "

&&zVector3TypeTest.test_swizzlezknown pypy failurec                 C   sh   dd }dd }dd }dd }|  t| |  t| |  t| |  t| d	d
 }|  t| d S )Nc                   S   rQ  rR  )r   rT  r   r   r   r   rU    rV  z=Vector3TypeTest.test_invalid_swizzle.<locals>.invalidSwizzleXc                   S   rQ  rR  )r   rW  r   r   r   r   rX    rV  z=Vector3TypeTest.test_invalid_swizzle.<locals>.invalidSwizzleYc                   S   rQ  rR  )r   zzr   r   r   r   invalidSwizzleZ  rV  z=Vector3TypeTest.test_invalid_swizzle.<locals>.invalidSwizzleZc                   S   rQ  rR  )r   wwr   r   r   r   invalidSwizzleW  rV  z=Vector3TypeTest.test_invalid_swizzle.<locals>.invalidSwizzleWc                   S   rQ  rY  )r   rZ  r   r   r   r   r[    rV  z?Vector3TypeTest.test_invalid_swizzle.<locals>.invalidAssignment)r   ra  r   )r   rU  rX  rC  rE  r[  r   r   r   test_invalid_swizzle  s   z$Vector3TypeTest.test_invalid_swizzlec                 C   rc  r   )r)   rm   r;   rE   rd  rZ  r   r?  r   rf  r   rg  rA   r   r   r   rh    ri  z)Vector3TypeTest.test_swizzle_return_typesc                 C   s&   h d}|  |tt| j d S )N>   rE   rF   r   r~  r@  r  r!  )r   issubsetsetdirr;   )r   
attributesr   r   r   test_dir_works  s   zVector3TypeTest.test_dir_worksc                    s     j  j  jj j  jj j  jj j f    j  j  jj j  jj j  jj j f    j  j  jj j  jj j  jj j f    j  j  jj j  jj j  jj j f    j  j  jj j  jj j  jj j f    j  j  jj j  jj j  jj j f    j  j  jj j  jj j  jj j f    j  jk jj jko jj jko jj jk    j  jk  jj jk o jj jk o jj jk     j  jk jj jko1 jj jko1 jj jk    j  jk jj jkoR jj jkoR jj jk    j  jk jj jkos jj jkos jj jk    j  jk jj jko jj jko jj jk   d j  tddd j    d j  tddd j    d j  d j    d j  d jj d jj d jj f   d j  d jj d jj d jj f   d j   d jj  d jj  d jj  f   d j  d jj d jj d jj f   d j k d jjk oOd jjk oOd jjk    d j kd jjkold jjkold jjk   d j kd jjkod jjkod jjk   d j kd jjkod jjkod jjk   d j kd jjkod jjkod jjk   d j kd jjkod jjkod jjk   d j kd jjkod jjkod jjk   t	 j  j
 t	 j    j  j
  j j
     j  j
  j j
     j  j
  j j
     j  j
  jj j
j  jj j
j  jj j
j f    j  j
  jj j
j  jj j
j  jj j
j f    j  j
  jj j
j  jj j
j  jj j
j f    j  j
  jj j
j  jj j
j  jj j
j f    j  j
  jj j
j  jj j
j  jj j
j f    j  j
k jj j
jko jj j
jko jj j
jk    j  j
k  jj j
jk o+ jj j
jk o+ jj j
jk     j  j
k jj j
jkoO jj j
jkoO jj j
jk    j  j
k jj j
jkos jj j
jkos jj j
jk    j  j
k jj j
jko jj j
jko jj j
jk    j  j
k jj j
jko jj j
jko jj j
jk    j
 j   j
 j     j
 j   j
 j     j
 j   j
j jj  j
j jj  j
j jj f    j
 j   j
j jj  j
j jj  j
j jj f    j
 j   j
j jj  j
j jj  j
j jj f    j
 j   j
j jj  j
j jj  j
j jj f    j
 j   j
j jj  j
j jj  j
j jj f    j
 j k  j
j jjk o j
j jjk o j
j jjk     j
 j k j
j jjkoȈ j
j jjkoȈ j
j jjk    j
 j k j
j jjko j
j jjko j
j jjk    j
 j k j
j jjko j
j jjko j
j jjk    j
 j k j
j jjko4 j
j jjko4 j
j jjk    j
 j k j
j jjkoX j
j jjkoX j
j jjk    j
  j   j
 j     j
  j   j
 j     j
  j   j
j jj  j
j jj  j
j jj f    j
  j   j
j jj  j
j jj  j
j jj f    j
  j   j
j jj  j
j jj  j
j jj f    j
  j   j
j jj  j
j jj  j
j jj f    j
  j   j
j jj  j
j jj  j
j jj f    j
  j k  j
j jjk oQ j
j jjk oQ j
j jjk     j
  j k j
j jjkow j
j jjkow j
j jjk    j
  j k j
j jjko j
j jjko j
j jjk    j
  j k j
j jjkoÈ j
j jjkoÈ j
j jjk    j
  j k j
j jjko j
j jjko j
j jjk    j
  j k j
j jjko j
j jjko j
j jjk   t j t jjt jjt jjf    j   j     j 
  j
    t j t j   tt  tt     j d	 d
  tdd   t fdd  tdd   tdd   tdd   t fdd  t fdd  t fdd  t fdd  t fdd  t fdd d S )Nr   g      @g      @g      r    rP   r   ir   r8  c                   S   s   t tddd dS rk  )rl  r   rm  r   r   r   r   r   	      z2Vector3TypeTest.test_elementwise.<locals>.<lambda>c                      ro  rp  rq  r   rA   r   r   r   	  rr  c                   S   s   t ddd d S r(  r   rm  r   r   r   r   r   	  rn  c                   S   s   t ddd d S r(  rM  r   r   r   r   r   	  rn  c                   S   s   t ddd d S r(  rM  r   r   r   r   r   	  rn  c                      s   t ddd  j S r   r   rm  r5   r   rA   r   r   r   	  rL  c                      s   t ddd  j S r   rN  r   rA   r   r   r   	  rL  c                      s   t ddd  j S r   rN  r   rA   r   r   r   	  rL  c                      rv  r   rq  r   rA   r   r   r   	  rr  c                      rw  r   rq  r   rA   r   r   r   	  rr  c                      rx  r   rq  r   rA   r   r   r   	  rr  )r)   r;   rm  r?   rE   rF   r  r@   r   rm   r>   r0  r   r5   r   r   ry  rA   r   rA   r   rz    s^  &&&&&&&(,,,,,$$  &,22&&&&&"   ,,,,,22  ,,,,,22,,,,,22,z Vector3TypeTest.test_elementwisec                    sz    t fdd   t fdd   t fdd d j j } fddtd D D ]\}} | d   j|||  q7 | j t	d	d
d
t	d
dd   }fddtd D D ]\}} |    t
|     qz |  d  d   tfdd d S )Nc                      r{  r|  r}  r   rA   r   r   r   	  r  z,Vector3TypeTest.test_slerp.<locals>.<lambda>c                      r{  r|  r  r   rA   r   r   r   	  r  c                      r  r|  r  r   rA   r   r   r   	  r  r   c                 3   s,    | ]}| j  j|t fV  qd S r   )r6   r~  r7   rd  r  )r   r  r   r   r  	  s    
z-Vector3TypeTest.test_slerp.<locals>.<genexpr>r   r	   r   r  c                 3   r  r   r  r  r  r   r   r  	  r  r
   c                      r  r|  r  r   r  r   r   r   	  rr  )r   r   r6   r/  r7   r  r   r9  r)   r   rd  r~  r  r   r  r   r  	  s.   
&"zVector3TypeTest.test_slerpc                    sr   t ddd t ddd|  dd | t fdd t ddd	 t ddd	|  dd
 d S )Nr   r   r
   )r   r   r   c                      r  r  r  r   r  r   r   r   	  r5  z+Vector3TypeTest.test_lerp.<locals>.<lambda>r   rj   )r   r$   rO  )r   r)   r   r   r   rA   r   r  r   r   	  s   zVector3TypeTest.test_lerpc                    s  t    | j  | | j  | | jt | j  | | j d | | j d | | j d | d| j  d | t	 fdd | t	 fdd | t	 fd	d | t	 fd
d | t	 fdd | t	 fdd | t	dd  | t	dd  | t	dd  | t	dd  | t	dd  | t	dd   d |  d| j  | t dd| j  | t d  d S )N)r   r  r   )r   r  r  r
  rP   )rP   r  r  c                      r  Nr   from_sphericalr   r_   r   r   r   
  r  z0Vector3TypeTest.test_spherical.<locals>.<lambda>c                      r  NabcrQ  r   r_   r   r   r   
  r  c                      r  Nr  rQ  r   r_   r   r   r   
  r  c                      r  r   rQ  r   r_   r   r   r   	
  r  c                      r  rR  rQ  r   r_   r   r   r   

  r  c                      s     dddS Nr   rP   r    rQ  r   r_   r   r   r   
  rr  c                   S   r  rP  r   rR  r   r   r   r   r   
  r  c                   S   r  rS  rW  r   r   r   r   r   
  r  c                   S   r  rU  rW  r   r   r   r   r   
  r  c                   S   r  r   rW  r   r   r   r   r   
  r  c                   S   r  rR  rW  r   r   r   r   r   
  r  c                   S   s   t dddS rV  rW  r   r   r   r   r   
  rr  )r
   r  r  r
   )
r   rR  r;   as_sphericalr)   r6   r7   r  r   r   rA   r   r_   r   test_spherical	  s0   
zVector3TypeTest.test_sphericalc                 C   s   t ddd}|d9 }| |d t ddd}|d }| |d t ddd}|d8 }| |d t ddd}|d7 }| |d d S )Nr   rP   )rR   rR   rR   r  r   r8        @r[  r[  r  rG   r   r   r   test_inplace_operators
  s   z&Vector3TypeTest.test_inplace_operatorsc                 C   sR   dd l }tdd}tddd}| |||| | |||| d S )Nr   r   rP   r    )pickler   r   r)   loadsdumps)r   r]  r>   r   r   r   r   test_pickle(
  s
   
zVector3TypeTest.test_picklec                 C   s8   G dd dt jj}|ddd}|d9 }| |d d S )Nc                   @   r  )z7Vector3TypeTest.test_subclass_operation.<locals>.VectorNr  r   r   r   r   r  1
  r  r  rR   rP   rZ  )r   r   r   r)   )r   r  rH   r   r   r   r  0
  s   z'Vector3TypeTest.test_subclass_operationc                 C      t dd}| |jd dS )z*We can get constant values from a swizzle.r  rh   )      @ri   r   N)r   r)   xy1rG   r   r   r   test_swizzle_constants8
  
   
z&Vector3TypeTest.test_swizzle_constantsc                 C   ra  )z,We can get 4 constant values from a swizzle.r  rh   )rb  ri   r   r   N)r   r)   xy01rG   r   r   r   test_swizzle_four_constants@
  re  z+Vector3TypeTest.test_swizzle_four_constantsc                 C   s@   t dd}| t |j W d   dS 1 sw   Y  dS )z2An out-of-bounds swizzle raises an AttributeError.r  rh   N)r   r   ra  r?  rG   r   r   r   test_swizzle_oobH
  s   
"z Vector3TypeTest.test_swizzle_oobc                 C   s@   t dd}| t d|_W d   dS 1 sw   Y  dS )z6An out-of-bounds swizzle set raises an AttributeError.r  rh   rj  N)r   r   ra  xzrG   r   r   r   test_swizzle_set_oobN
  s   
"z$Vector3TypeTest.test_swizzle_set_oobc                 C   sR   t ddd}t ddd}||}| |j|j | d|j | d|j dS )r  rP   r    r  r   r   Nr   r  r)   rE   rF   r  r  r   r   r   test_project_v3_onto_x_axisU
  s   
z+Vector3TypeTest.test_project_v3_onto_x_axisc                 C   sR   t ddd}t ddd}||}| d|j | |j|j | d|j dS )r  rP   r    r  r   r	   Nrk  r  r   r   r   test_project_v3_onto_y_axisc
  s   
z+Vector3TypeTest.test_project_v3_onto_y_axisc                 C   sR   t ddd}t ddd}||}| d|j | d|j | |j|j dS )zMProject onto z-axis, e.g. get the component pointing in the z-axis direction.rP   r    r  r   M   Nrk  r  r   r   r   test_project_v3_onto_z_axisq
  s   
z+Vector3TypeTest.test_project_v3_onto_z_axisc                 C   sn   t ddd}t ddd}||}|||| | }| |j|j | |j|j | |j|j dS )r  rP   r    r  r   r  N)r   r  r+  r   rE   rF   r  r  r   r   r   test_project_v3_onto_other
  s   
z*Vector3TypeTest.test_project_v3_onto_otherc                 C   r   t ddd}t ddd}|t|}|||| | }| |j|j | |j|j | |j|j dS )r  rP   r    r  r   r  N)r   r  r   r+  r   rE   rF   r  r  r   r   r   #test_project_v3_onto_other_as_tuple
     z3Vector3TypeTest.test_project_v3_onto_other_as_tuplec                 C   rq  )r  rP   r    r  r   r  N)r   r  r9   r+  r   rE   rF   r  r  r   r   r   "test_project_v3_onto_other_as_list
  rs  z2Vector3TypeTest.test_project_v3_onto_other_as_listc                 C   s,   t ddd}t ddd}| t|j| dS )r  rP   r    r  r   N)r   r   r   r  r  r   r   r   /test_project_v3_raises_if_other_has_zero_length
  s   z?Vector3TypeTest.test_project_v3_raises_if_other_has_zero_lengthc                 C   s$   t ddd}d}| t|j| dS )r  rP   r    r  r   N)r   r   r   r  r  r   r   r   /test_project_v3_raises_if_other_is_not_iterable
  s   z?Vector3TypeTest.test_project_v3_raises_if_other_is_not_iterablec                 C   s0   t ddd}| t|t | t|t d S )Nr    r  r   )r   r   r   r   r   r   rG   r   r   r   r  
  s   z#Vector3TypeTest.test_collection_abcc                 C   sx   t ddd}|d}|dd}| || |d | || |dd | || t ddd}| || d S )Nr  rP   r   r   g;Y@giAH1?)r   r  r)   r  r  r   r   r   test_clamp_mag_v3_max
  s   

z%Vector3TypeTest.test_clamp_mag_v3_maxc                 C   sL   t ddd}|dd}|dd t ddd}| || | || d S )	Nr    r   rP   r   r   g!
!	@g4-a?g4-a@)r   r  r  r)   r  r   r   r   test_clamp_mag_v3_min
  s   z%Vector3TypeTest.test_clamp_mag_v3_minc              	   C   sz   t ddd}dD ]2}| j|d" |j| }|j|  | || | |t ddd W d    n1 s5w   Y  qd S )Nr   rP   r    )r  )r!   g333333@)r  gRQ@r  r  )r   r  r  r  r)   r  r   r   r   test_clamp_mag_v3_no_change
  s   

z+Vector3TypeTest.test_clamp_mag_v3_no_changec                 C   st   t ddd}|dd}|dd | || | | d |d}|dd | || | |t   d S r  )r   r  r  r)   r   r9  r  r   r   r   test_clamp_mag_v3_edge_cases
  s   
z,Vector3TypeTest.test_clamp_mag_v3_edge_casesc              	   C   s   t ddd}dD ].}| j|d | jt|jg|R   | jt|jg|R   W d    n1 s1w   Y  qdD ].}| j|d | jt|jg|R   | jt|jg|R   W d    n1 sbw   Y  q9t  }| t|jd | t|jd d S r  )r   r  r   r   r  r  r   r  r   r   r   test_clamp_mag_v3_errors
  s    z(Vector3TypeTest.test_clamp_mag_v3_errorsc                 C   s  t ddd}G dd dt }|ddd}| | d | t|| | t|t|  | |t|| | |t||d | |t||d | |t|	d| | |t|
d| | |t|| | |t||d | |t|d | |t|dd | |t| |  |ddd}| t|| | | t|| | | t|d	 | | t|d	 | | t| d	 | d
S )z Check if Vector3 is subclassabler  rP   r   c                   @   r  )z7Vector3TypeTest.test_subclassing_v3.<locals>.TestVectorc                 S   r  r  r   rA   r   r   r   r    r  zLVector3TypeTest.test_subclassing_v3.<locals>.TestVector.supermariobrosiscoolNr  r   r   r   r   r    r  r  r   r  r   r    N)r   r)   r  r   rm   rp   r@  r   r~  r  r  r  rz   r  rm  r  r   r   r   test_subclassing_v3  s,   z#Vector3TypeTest.test_subclassing_v3c                 C   `   t ddd}t ddd}t ddd	}| }||d
}||d
 | || | || d S )Ngxvk@g]Y@g%I fE@rv   ro   gq=
ףE@rw   rx   gK@r    r   rp   rz   r{   r)   r|   r   r   r   r   .     z'Vector3TypeTest.test_move_towards_basicc                 C   sT   t ddd}t ddd}| }||d}||d | || | || d S )Nrw   r   g     @E@rv   ro   g     1@r	   r~  )r   r}   r~   r   r   r   r   r   r   :     z.Vector3TypeTest.test_move_towards_max_distancec                 C   sT   t ddd}t ddd}| }||d}||d | || | || d S )Nrv   ro   g     8@rw   rx   g	@r   r~  )r   r~   r   r   r   r   r   r   r   E  r  z!Vector3TypeTest.test_move_nowherec                 C   r}  )Ng,@gI@gH@rv   ro   gJ@rw   rx   g)\S@r   r~  r|   r   r   r   r   P  r  zVector3TypeTest.test_move_awayc                 C   sN   t ddd}| }dD ]}| |||| ||| | || qd S )Nr   r   g)\^r   )r   rp   r)   rz   r{   r   r   r   r   r   \  s   z&Vector3TypeTest.test_move_towards_selfc                 C   s   t ddd}t ddd}| t|j|dd | t|j|dd | t|j|d	 | t|j|d
 | t|jdd | t|jdd d S )Nrv   ro   gffffff@rw   rx   g     Xzr    rP   rk   r   r   d)r   r   r   rz   r{   )r   r~   r   r   r   r   r   d  s   z(Vector3TypeTest.test_move_towards_errorsN)cr+   r,   r-   rB   rI   r  rW   rX   r  rK   rN   rS   r  rd   rt   r   r   r   r   r   r   r   r   r   r   r   r   r  rn   r
  r  r  r  r  r  r  r  r  r!  r#  r&  r(  r,  r.  r0  r  r"  r&  r*  r,  r1  r7  r:  r=  rC  rG  rL  r9  r<  rN  rb  unittestskipIfIS_PYPYrF  rh  rK  rz  r  r   rY  r\  r`  r  rd  rg  rh  rj  rl  rm  ro  rp  rr  rt  ru  rv  r  rw  rx  ry  rz  r{  r|  r   r   r   r   r   r   r   r   r   r   r    s    /%x ,-

  0


		 r  __main__)r   platformr  collections.abcr   r   pygame.mathr   r   r   python_implementationr  TestCaser   r/   r  r+   mainr   r   r   r   <module>   sD    C        y             =