
    iц                    :   d dl Z d dlZd dlmZ d dlmZmZ 	 d dl d dl
Z
d dl d dlmZ d dlZd dlZd dlZd dlZd ej$                         k(  Z G d dej(                        Z G d	 d
ej(                        Z G d dej(                        Z G d dej(                        Z G d dej(                        Z G d dej(                        Z G d dej(                        Z G d dej(                        Zedk(  r ej<                          yy# ee	f$ r Y w xY w)    N)
test_utils)example_pathSurfaceSubclass)*)BufferProxyPyPyc                      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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d Z ej@                  e!jD                  jG                  d      dk(  d      d         Z$d! Z%d" Z&d# Z'd$ Z(d% Z) e*e+jX                  d&      Z- ej@                  e- d'      d(        Z. ej@                  e- d'      d)        Z/d* Z0d+ Z1d, Z2d- Z3d. Z4y/)0SurfaceTypeTestc                    d}t         }d}t        d||      }t        j                  |||      }| j	                  ||       | j                  |t        j                         | j                  |t               | j                  |j                         |       | j                  |j                         |       | j                  |j                         |       y)z]Ensure a subclassed surface can be used for pixel format
        when creating a new surface.   )   %         N)SRCALPHAr   pygameSurfaceassertIsNotassertIsInstanceassertNotIsInstanceassertEqualget_size	get_flagsget_bitsize)selfexpected_depthexpected_flagsexpected_sizedepth_surfacesurfaces         c/home/obispo/Crisostomo_bridge/mision_env/lib/python3.12/site-packages/pygame/tests/surface_test.py.test_surface__pixel_format_as_surface_subclassz>SurfaceTypeTest.test_surface__pixel_format_as_surface_subclass   s     ! '..Q..N-0gv~~6  /:))+];**,n=,,.?    c                    t        j                  d      }| j                  |j                  d      d       t         j                  j                  d       t        j                  d      }| j                  |j                  d      d       y )N)   r&   r   r   r   r   r        r+   )r   r   r   get_atdisplayset_moder   surfs     r"   !test_surface_created_opaque_blackz1SurfaceTypeTest.test_surface_created_opaque_black+   sd    ~~h'V,n= 	
+~~h'V,n=r$   c                 :   t        j                  d      }t        j                  dddd      }|j                  |       |j	                  dd       |j                  d       |j                         }| j                  |d   d       | j                  |d   d       y)z.see if surface.set_clip(None) works correctly.   X  
   r   N   r4   )r   r   Rectset_clipmove_ipget_clipr   )r   srress       r"   test_set_clipzSurfaceTypeTest.test_set_clip4   s|    NN:&KKBB'	

1			"a	

4jjlQ#Q%r$   c                 h    t        j                  ddd      }| j                  t        |      d       y )NF   rB   r       z<Surface(70x70x32 SW)>)r   r   r   reprr/   s     r"   
test_printzSurfaceTypeTest.test_print@   s)    ~~h2.d%=>r$   c                    t        j                  dt        d      }| j                  |j	                         t        z  t               | j                  |j                         d       t        j                  ddd      }| j                  |j                         d       t        j                  dd      }| j                  |j                         d       y )NrA   rC   )flagsdepthr   r   r7   rH   )r   r   r   r   r   r   get_bytesize)r   r0   surf_16s      r"   test_keyword_argumentsz&SurfaceTypeTest.test_keyword_argumentsD   s    ~~hhbA)H4h?))+R0 ..1b1--/3 ..4--/3r$   c                    t        j                  ddd      }|j                  d       |j                  dd       |j	                  d      }| j                  |t         j                         | j                  |d       |j                  d       |j                  dd	       |j	                  d      }| j                  |d
       y )Nd   rO   r      r   r   r   r'   )r6   r6   r6   r)   r(   )r6      r)   )r   r   r)   r)   )r   r   fillset_atr,   r   Colorr   )r   r<   r=   s      r"   test_set_atzSurfaceTypeTest.test_set_atQ   s    NN:q"-	y 	
*+HHVa.-. 	
~	(#HHW,-r$   c                    t         j                  j                          	 t         j                  j	                  t        t        j                  j                  dd                  }| j                  |j                  d      t        j                  ddd             | j                  |j                  d      t        j                  ddd             | j                  |j                  d      t        j                  ddd             |j                  dt        j                  ddd             |j                  dt        j                  ddd             |j                  dt        j                  ddd             | j                  |j                  d      t        j                  ddd             | j                  |j                  d      t        j                  ddd             | j                  |j                  d      t        j                  ddd             t         j                  j                          y# t         j                  j                          w xY w)	z?png files are loaded in big endian format (BGR rather than RGB)datazBGR.pngr6   r6   r)   r   )r6   r&   )r6   (   N)r   r-   initimageloadr   ospathjoinr   r,   rU   rT   quit)r   r\   s     r"   test_set_at__big_endianz'SurfaceTypeTest.test_set_at__big_endianb   s   	"LL%%l277<<	3R&STEU\\(3V\\#q!5LMU\\(3V\\!S!5LMU\\(3V\\!Q5LM LL6<<Q#:;LL6<<3#:;LL6<<1c#:; U\\(3V\\#q!5LMU\\(3V\\!S!5LMU\\(3V\\!Q5LM NN!FNN!s   G?H> > Ic                    t        j                  dt        d      }| j                  |j	                         t        z  t               | j                  t        t         j                  dt         j                  d       t        j                  dt              }|j                         dk(  r,| j                  |j	                         t        z  t               y y )NrA   rC   rN   rP   )r   r   r   r   r   assertRaises
ValueErrorr   r   r0   surf2s      r"   test_SRCALPHAzSurfaceTypeTest.test_SRCALPHAy   s    ~~h"5)H4h? 	*fnnj&//SUV x2"$U__.98D %r$   c                     t         j                  j                          t        j                  d      }| j	                  |j                         t        z  d       y)zOis set to zero, and SRCALPHA is not set by default with no display initialized.rA   r   N)r   r-   ra   r   r   r   r   r/   s     r"   test_flags_default0_nodisplayz-SurfaceTypeTest.test_flags_default0_nodisplay   s<    ~~h')H4a8r$   c                 >   t         j                  j                  d       	 t        j                  d      }| j	                  |j                         t        z  d       t         j                  j                          y# t         j                  j                          w xY w)zWis set to zero, and SRCALPH is not set by default even when the display is initialized.)@     rA   r   N)r   r-   r.   r   r   r   r   ra   r/   s     r"   test_flags_default0_displayz+SurfaceTypeTest.test_flags_default0_display   sd    
+	">>(+DT^^-8!<NN!FNN!s   <A< < Bc                     d }d}| j                   |dd|      d        d}| j                  t        |dd|       | j                  t        |dd|       d}| j                  t        |dd|       y )Nc                 4    t        j                  d|| |       y )NrY   )r   r   )bpprG   maskss      r"   	make_surfz-SurfaceTypeTest.test_masks.<locals>.make_surf   s    NN8UC7r$   )      ~       r   rC   r   )i   rv   r)   r   rP   )i  o rv   r)   r   )r   rd   re   )r   rs   rr   s      r"   
test_maskszSurfaceTypeTest.test_masks   ss    	8 22q%0$7+*iQ>*iQ>+*iQ>r$   c                 v   t        j                  dt        d      }|j                  d       |j	                         }| j                  |j                  d       | j                  |j                  d       |j                  dd       |j	                         }| j                  |j                  d       | j                  |j                  d       | j                  |j                  d       | j                  |j                  d       |j                  d	d       |j	                         }| j                  |j                  d
       | j                  |j                  d
       | j                  |j                  d       | j                  |j                  d       t        j                  ddd      }|j                  d       |j	                         }| j                  |j                  |j                                | j                  |j                  |j                                |j                  d       |j	                         }| j                  |j                  d       | j                  |j                  d       |j                  dd       |j	                         }| j                  |j                  d       | j                  |j                  d       | j                  |j                  d       | j                  |j                  d       |j                  dd       |j	                         }| j                  |j                  d       | j                  |j                  d       | j                  |j                  d       | j                  |j                  d       t         j                  j                          	 t        j                  ddd      }|j                  d       |j	                          t         j                  j!                          y # t         j                  j!                          w xY w)NrA   rC   r   r   r   r   r   )   rz   )r)   r)   r)   rR   rz   rR   )   r{   r{   r7   rP   rQ   r)   r)   r)   <   r~      )   rR      )r   r   r   rS   get_bounding_rectr   widthheightrT   lefttop	get_width
get_heightset_colorkeyr-   r[   ra   )r   r0   
bound_rects      r"   test_get_bounding_rectz&SurfaceTypeTest.test_get_bounding_rect   s,   ~~h"5		,++-
))1-**A.H01++-
"-,))1-**A.H01++-
"-,))1-**A.~~h2.		)++-
))4>>+;<**DOO,=>)$++-
))1-**A.Ho.++-
"-,))1-**A.Ho.++-
"-,))2.**B/ 		">>&!Q/DIIo&""$NN!FNN!s   8P  P8c                 b   d}t        j                  dt         j                  d      }|j                  |       |j	                         }|j                         }|j                         }| j                  |j                  |j                         | j                  |j                  d      |       y)zEnsure a surface can be copied.   r   r   r   rC   rC   rC   rY   N)	r   r   r   rS   copyget_rectr   sizer,   )r   colors1s2s1rects2rects         r"   	test_copyzSurfaceTypeTest.test_copy   sz     ^^Hfoor:
WWYfkk28,e4r$   c                    d}t        j                  dddd      }t        j                  dt         j                  d      }|j	                  ||       t        j                  |      D ]#  }| j                  |j                  |      |       % t        j                  |      D ]#  }| j                  |j                  |      |       % y)zEnsure a surface can be filled.r   r   r   r   rC   N)r   r8   r   r   rS   r   rect_area_ptsr   r,   rect_outer_boundsassertNotEqual)r   r   	fill_rectr   pts        r"   	test_fillzSurfaceTypeTest.test_fill   s     KK1b"-	^^Hfoor:
y!**95 	3BRYYr]E2	3 ..y9 	6B		"u5	6r$   c                 &   d}t        j                  d      }t        j                  d      }|j                  dt         j                         | j	                  |j                         t         j                  z         |j                  |d       |j                  |       | j                  |j                         |j                         t         j                  z  dk7         | j	                  |j                         t         j                  z         y)zTest RLEACCEL flag with fill()   r   r   r)   r   r)   r   r)   r'   r   N)r   r   r   RLEACCEL
assertTruer   
RLEACCELOKblitrS   r   mustlock)r   r   r0   	blit_surfs       r"   test_fill_rlezSurfaceTypeTest.test_fill_rle   s    "~~h'NN8,	}foo>	++-0A0AAB		)V$u 9#6#6#86??#Jq"P	
 		++-?@r$   c                    t        j                  d      }t        j                  d      }|j                  dt         j                         | j	                  |j                         t         j                  z         |j                  |d       | j	                  |j                         t         j                  z         | j	                  |j                                y)z"Test RLEACCEL flag with mustlock()rN   r   r   r)   r'   N)	r   r   r   r   r   r   r   r   r   r   r0   r   s      r"   test_mustlock_rlez!SurfaceTypeTest.test_mustlock_rle  s    ~~j)NN:.	{FOO<	++-0A0AAB		)V$	++-?@	**,-r$   c                 <   t        j                  d      }t        j                  ddt         j                        }|j                  dt         j                         | j                  |j                         t         j                  z         |j                  |d       | j                  |j                         t         j                  z         | j                  |j                         t         j                  z         | j                  |j                                y)zbTest RLEACCEL flag with mustlock() on a surface
        with per pixel alpha - new feature in SDL2rN   rC   )rH   rG   )      r   r)   r'   N)
r   r   r   r   r   r   r   r   r   r   r   s      r"   test_mustlock_surf_alpha_rlez,SurfaceTypeTest.test_mustlock_surf_alpha_rle  s     ~~j)NN:RvO	3V__E	++-0A0AAB		)V$	++-?@	++-?@	**,-r$   c                    t        j                  dd      }|j                  dt         j                         | j	                  |j                         t         j                  z         |j                         }| j	                  |j                         t         j                  z         | j	                  |j                         t         j                  z         y)z5Test copying a surface set to use run length encodingr   rP   r   N)r   r   r   r   r   r   r   r   )r   r   newsurfs      r"   test_copy_rlezSurfaceTypeTest.test_copy_rle  s    ^^Hb)
v7):)::;'')):)::;))+f.?.??@r$   c                     d}d}t        j                  dddd      }t        j                  dd      }t        j                  dd      }|j                  dt         j                         |j                  |       |j                  |      }|j                  |       |j                  |d       | j                  |j                         t         j                  z         | j                  |j                         t         j                  z          y	z<Ensure an RLE sub-surface works independently of its parent.r   )rm   rm   r   r)   r   r   rP   r   r'   N)
r   r8   r   r   r   rS   
subsurfacer   r   r   r   r   color2sub_rects0r   r   s          r"   test_subsurface_rlez#SurfaceTypeTest.test_subsurface_rle"  s    "%;;r2r2.^^Hb)^^Hb)
v7
]]8$

F89BLLNV__<<=r$   c                     d}d}t        j                  dddd      }t        j                  dd      }t        j                  dd      }|j                  dt         j                         |j                  |       |j                  |      }|j                  |       |j                  |d       | j                  |j                         t         j                  z         | j                  |j                         t         j                  z          yr   )r   r8   r   r   r   rS   r   r   r   r   r   r   s          r"   test_subsurface_rle2z$SurfaceTypeTest.test_subsurface_rle21  s    "%;;r2r2.^^Hb)^^Hb)
v7
]]8$

F):)::;BLLNV->->>>?r$   c                 N     fd}t         j                  j                          	 t         j                  j                  d       t         j                  j                  t        t        j                  j                  dd                  }|j                         }|j                         } ||      } ||      } j                  |j                         t         j                  z          j                  |j                         t         j                  z           j!                  |j                         |        j                  t#        |t         j$                               t         j                  j'                          y# t         j                  j'                          w xY w)zTest for error/crash when calling set_colorkey() followed
        by convert twice in succession. Code originally taken
        from solarwolf.c                     | j                         }| j                  |t               j                  | j                         |       | j	                         S N)get_colorkeyr   r   r   convert)imgclearr   s     r"   optimizez:SurfaceTypeTest.test_solarwolf_rle_usage.<locals>.optimizeF  sF    $$&EUH-S--/7;;= r$   i    rX   
alien1.pngN)r   r-   r[   r.   r\   r]   r   r^   r_   r`   r   r   r   r   r   r   r   
isinstancer   ra   )r   r   r\   orig_colorkeys   `   r"   test_solarwolf_rle_usagez(SurfaceTypeTest.test_solarwolf_rle_usageA  s   
	! 		"NN##J/LL%%l277<<3U&VWEMMOE!..0MUOEUOEOOEOO-0A0AABOO 1FOO CCDU//1=AOOJufnn=>NN!FNN!s   D?F  F$c                    t         j                  j                          	 t         j                  j                  dd       t        j                  d      }t         j
                  j                  t        t        j                  j                  dd                  }|j                         }|j                         }|j                  |t               | j                  |j!                         t         j"                  z         | j                  |j!                         t         j                  z          |j%                  |d       | j                  |j!                         t         j"                  z         | j                  |j!                         t         j                  z         |j'                  d       | j                  |j!                         t         j"                  z          | j                  |j!                         t         j                  z          t         j                  j)                          y	# t         j                  j)                          w xY w)
z'Test for RLE status after setting alphar   rC   rI   rN   rX   r   r'   Z   N)r   r-   r[   r.   r   r\   r]   r   r^   r_   r`   r   r   r   r   r   r   r   r   	set_alphara   )r   blit_to_surfr\   r   s       r"   test_solarwolf_rle_usage_2z*SurfaceTypeTest.test_solarwolf_rle_usage_2]  s    		"NN##Jb#9!>>*5LLL%%l277<<3U&VWEMMOE!..0M }h7OOEOO-0A0AABOO 1FOO CCD eV,OOEOO-0A0AABOOEOO-?@ OOBOO 1F4E4E EEFOO 1FOO CCD NN!FNN!s   G8H7 7 Ic                 P   t         j                  j                          	 t         j                  j                  d       t        j                  d      }|j                  d       t         j                  j                  t        t        j                  j                  dd                  }|j                         }|j                         }|j                  dt               |j!                  |d       |j#                  d      }| j%                  |j                         |       |j'                  |t               |j                  d       |j!                  |d       |j#                  d      }| j)                  |j*                  |j*                  d	
       | j)                  |j,                  |j,                  d	
       | j)                  |j.                  |j.                  d	
       t         j                  j1                          y # t         j                  j1                          w xY w)Nr   )P   G   r|   rX   r   r   r'   2   r   r7   delta)r   r-   r[   r.   r   rS   r\   r]   r   r^   r_   r`   r   r   r   r   r   r,   r   r   assertAlmostEqualr=   gbra   )r   r   r\   r   sample_pixel_rlesample_pixel_no_rles         r"    test_set_alpha__set_colorkey_rlez0SurfaceTypeTest.test_set_alpha__set_colorkey_rle|  s   	"NN##J/!>>(3Lo.LL%%l277<<3U&VWEMMOE!..0M OOB)eV,+228< U//1=A}h7o.eV,"."5"5h"?""#3#5#57J7L7LTU"V""#3#5#57J7L7LTU"V""#3#5#57J7L7LTU"V NN!FNN!s   GH  H%c                    d}d}t        j                  dddd      }t        j                  dt         j                  d      }|j	                  ||      }|j                  d      }| j                  ||       |j                  d      }|j	                  |d	      }|j                  d
      }	| j                  ||       |j	                  |d      }
| j                  t        |
      d       y )Nr   )r&   r&   r&   r   ir   r   rC   r'   )   r   r   r   )r   r   r   r   r   )r   r   r   ry   )	r   r8   r   r   rS   r,   r   r   tuple)r   r   r   r   r   r1cr   r2c2r3s              r"   test_fill_negative_coordinatesz.SurfaceTypeTest.test_fill_negative_coordinates  s     !KKS"b1	^^Hfoor:WWUI&IIfE" ]]<(WWV^,YYvE" WWV-.rL1r$   c                    d}d}t        j                  ddd      }|j                  t         j                  ||       | j	                  |j                  d      d       | j	                  |j                  d	      |       y
)z(Ensure fill() accepts keyword arguments.rR   r7      r)   rR   rR   r7   r7   r   r   rC   special_flagsr   rectr'   r(   rR   rR   N)r   r   rS   	BLEND_ADDr   r,   )r   r   arear   s       r"   test_fill_keyword_argsz&SurfaceTypeTest.test_fill_keyword_args  sh    ^^FAr*
f..e$G6*N;6*E2r$   c                 \   t        j                  dt         j                  d      }| j                  |j	                         d       dD ]b  }|j                  |       t        d      D ]!  }|j                  |j	                                # | j                  |j	                         |       d y)z0Ensure a surface's alpha value can be retrieved.r   rC   r)   )r   rC      r)   r   N)r   r   r   r   	get_alphar   range)r   r   alphats       r"   test_get_alphazSurfaceTypeTest.test_get_alpha  s    ^^Hfoor:-& 	4ELL1X -R\\^,- R\\^U3	4r$   c                    t         j                  j                          	 d}d}t        j                  dt         j                  |      }| j                  |j                         |       | j                  |j                         |       d}d}t        j                  dd|      }| j                  |j                         |       | j                  |j                         |       d}d}t        j                  dd|      }| j                  |j                         |       | j                  |j                         |       | j                  t         j                        5  t         j                  j                         }t         j                  j                          |j                          ddd       t         j                  j                          y# 1 sw Y   (xY w# t         j                  j                          w xY w)	z7Ensure a surface's bit and byte sizes can be retrieved.rC   r   r      r7   r      N)r   r-   r[   r   r   r   rJ   r   rd   errorr.   ra   )r   rH   depth_bytesr   r!   s        r"   test_get_bytesizez!SurfaceTypeTest.test_get_bytesize  ss   	"EK&//5ABR__.<R^^-u5EK!U3BR__.<R^^-u5EK!U3BR__.<R^^-u5""6<<0 ' ..113##%$$&'
 NN!' '
 NN!s%   D>G AG+G GG  G>c                     t        j                  dt         j                  d      }| j                  |j	                         t         j                         y)z*Ensure a surface's flags can be retrieved.r   rC   N)r   r   r   r   r   )r   r   s     r"   test_get_flagszSurfaceTypeTest.test_get_flags  s2    ^^Hfoor:9r$   SDL_VIDEODRIVERdummy&requires a non-"dummy" SDL_VIDEODRIVERc                    t         j                  j                          	 t         j                  j                  dd      }| j	                  |j                         t         j                  z         t         j                  j                  dt         j                        }| j                  |j                         t         j                  z         t         j                  j                  dd      }| j	                  |j                         t         j                  z         t         j                  j                  dt         j                        }| j                  |j                         t         j                  z         t         j                  j                  dd      }| j	                  |j                         t         j                  z         t         j                  j                  dt         j                        }| j                  |j                         t         j                  z         t         j                  j                  dd      }|j                         t         j                  z  s0| j	                  |j                         t         j                  z         	 t         j                  j                  dt         j                  d       | j                  |j                         t         j                  z         t         j                  j                          y # t         j                  $ r Y 4w xY w# t         j                  j                          w xY w)N)r5     r   )rG   rm   rm   rC   )r   r-   r[   r.   assertFalser   
FULLSCREENr   NOFRAME	RESIZABLEOPENGLr  ra   )r   screen_surfs     r"   test_get_flags__display_surfz,SurfaceTypeTest.test_get_flags__display_surf  sP   
 	#	" ..11*A1FK[224v7H7HHI ..11*FDUDU1VKOOK113f6G6GGH !..11*A1FK[224v~~EF ..11*FNN1SKOOK113fnnDE !..11*A1FK[224v7G7GGH ..11*FDTDT1UKOOK113f6F6FFG !..11*A1FK))+fmm;  !6!6!86==!HII''
FMM2F  5 5 7&-- GHNN! << 
 NN!s0   JL: #/L! 0L: !L74L: 6L77L: : Mc                 P   t         j                  j                          	 t        j                  d      }|j	                  d      }| j                  |j                         |       | j                  t         j                        5  t         j                  j                         }t         j                  j                          |j                          ddd       t         j                  j                          y# 1 sw Y   (xY w# t         j                  j                          w xY w)z+Ensure a surface's parent can be retrieved.r   r   )r   r   r   r   N)r   r-   r[   r   r   assertIs
get_parentrd   r  r.   ra   )r   parentchildr!   s       r"   test_get_parentzSurfaceTypeTest.test_get_parent   s    	"^^H-F%%l3EMM%**,f5""6<<0 % ..113##%""$%
 NN!% %
 NN!s%   A%D AC9D 9D>D  D%c                     d}t        j                  |      }|j                         }| j                  |j                  |       y)z)Ensure a surface's rect can be retrieved.r  N)r   r   r   r   r   )r   r   r0   r   s       r"   test_get_rectzSurfaceTypeTest.test_get_rect2  s4    ~~d#}}D)r$   c                 >   t        ddd      D ]  }t        ddd      D ]{  }t        j                  ||f      }| j                  |j	                         |       | j                  |j                         |       | j                  |j                         ||f       }  y)z;Ensure a surface's size, width and height can be retrieved.r   r)   rC   r   r   N)r   r   r   r   r   r   r   )r   whr<   s       r"   test_get_width__size_and_heightz/SurfaceTypeTest.test_get_width__size_and_height<  s    q#r" 	7A1c2& 7NNAq6*  2  3  1v6	7	7r$   c                 6   t         }t        j                  ddd      }|j                  d      }| j	                  ||j                  d       | j	                  ||j                  d       | j                  |t               | j	                  ||j                  d       t        j                  ddd      }|j                         |j                         z  |j                         z  }|j                  d      }|j                  d      }| j                  |t               | j                  |j                  |       | j                  |t               | j                  |j                  |       t        j                  ddd	      }|j                  d      }| j	                  ||j                  d       | j	                  ||j                  d       | j                  |t               | j	                  ||j                  d       t        j                  ddd	      }|j                         |j                         z  |j                         z  }|j                  d      }|j                  d      }| j                  |t               | j                  |j                  |       | j                  |t               | j                  |j                  |       t        j                  dt        j                  d	      }|j                  d      }| j                  |t               | j	                  ||j                  d       t        j                  ddd
      }|j                  d      }|j                  d      }| j	                  ||j                  d       | j	                  ||j                  d       | j                  |t               | j                  |t               t        j                  ddd
      }|j                         |j                         z  |j                         z  }|j                  d      }|j                  d      }| j                  |t               | j                  |j                  |       | j                  |t               | j                  |j                  |       t        j                  ddd      }|j                         |j                         z  |j                         z  }|j                  d      }|j                  d      }|j                  d      }|j                  d      }| j                  |t               | j                  |j                  |       | j                  |t               | j                  |j                  |       | j                  |t               | j                  |t               |j                  d      }| j	                  ||j                  d       | j	                  ||j                  d       d}t        j                  dt        j                  d      }dD ]'  }	| j                  |j                  |	      t               ) t        j                  ddd      }|j                         }
t        s't        |
      }| j                  |j                   d       t        j                  ddd      }| j#                  |j%                                |j                  d      }
| j#                  |j%                                |
j&                  }| j)                  |j%                                d}t+        j,                          | j)                  |j%                                d}
t+        j,                          | j#                  |j%                                t        j                  dt        j                  d      }| j	                  t.        |j                  d       | j	                  t.        |j                  d       | j	                  t.        |j                  d       | j	                  t.        |j                  d       t        j                  ddd      }|j                  d       |j                  d       t        j                  ddd      }t1        j2                  |      }|j                  d      }
t1        j2                  |
      }t+        j,                          | j)                   |       |u        | j)                   |       |
u        ~
t+        j,                          | j)                   |       |u        | j)                   |       du        ~t+        j,                          | j)                   |       du        y)z>Ensure a buffer view of the surface's pixels can be retrieved.r      r   r   2013)r   r"  r   rP   rC   )r   r   r   r"  N)
r#  r&  aAr=   Rr   Gr   Br7   r   r7    9RGBA   2)re   r   r   get_viewrd   r   r   rJ   r   r   r   lengthr   r   IS_PYPYArrayInterfacendr  
get_locked__array_interface__r   gccollect	TypeErrorweakrefref)r   Errorr<   v2r2  v0v1v3r   kindvair   weak_sweak_vs                  r"   test_get_viewzSurfaceTypeTest.test_get_viewE  s    NN61a(ZZ_%S1%S1b+.%S1NN61a(!AKKM1ALLNBZZ_ZZ_b+.F+b+.F+NN61b)ZZ_%S1%S1b+.%S1NN61b)!AKKM1ALLNBZZ_ZZ_b+.F+b+.F+NN66??B7ZZ_b+.%S1NN61b)ZZ_ZZ_%S1%S1b+.b+.NN61b)!AKKM1ALLNBZZ_ZZ_b+.F+b+.F+NN61b)!AKKM1ALLNBZZ_ZZ_ZZ_ZZ_b+.F+b+.F+b+.b+.\\,'%c2%c2NN66??B7F 	AD!!!**T"2K@	A NN61b)JJL"BRUUA& NN61b)(JJsO(!!'


'


( NN66??B7)QZZ4)QZZ5)QZZ8)QZZ3 NN61b)	

3	

4 NN61b)QJJsOQ


A&A&


A&D()


D()r$   c                 P   dD ]  }t        j                  dd|      }|j                         |j                         z  }|j	                         }| j                  |t               | j                  |j                  |       | j                  t        |      d| d        t        j                  ddd      }|j                  d      }|j                         |j                         z  }|j	                         }| j                  |t               | j                  |j                  |       t        j                  d	dd      }|j	                         }| j                  |j                                d }t        j                          | j                  |j                                y )
Nr   r   rP   rC   r!  r   z<BufferProxy(z)>)r"  r6   rC   )rR   r7   r   r"  r,  )r   r   	get_pitchr   
get_bufferr   r   r   r2  rD   r   r   r6  r8  r9  r  )r   bitsizer<   r2  rC  r   s         r"   test_get_bufferzSurfaceTypeTest.test_get_buffer  sC    ' 	BGvq'2A[[]Q\\^3FA!!![1QXXv.T!WfXR&@A	B NN7Ar*\\,'"--/1MMOa-6* NN61b)LLN'


(r$   get_segcountzold buffer not availablec                    ddl m}m} t        j                  dt        j
                  d      }|j                         } ||      \  }}| j                  |d       | j                  ||j                         |j                         z          ||d      \  }}| j                  ||j                         | j                  ||       y )Nr   rN  get_write_bufferr,  rC   rR   )pygame.bufferproxyrN  rQ  r   r   r   rK  r   rJ  r   _pixels_address	r   rN  rQ  r<   rC  segcountbuflenseglensegaddrs	            r"   test_get_buffer_oldbufz&SurfaceTypeTest.test_get_buffer_oldbuf  s    ENN66??B7LLN'?&1%!?@*1a0!"3"34(r$   c                    ddl m}m} t        j                  dt        j
                  d      }|j                  d      } ||      \  }}| j                  |d       | j                  ||j                         |j                         z          ||d      \  }}| j                  ||j                  |j                         dz  z          | j                  ||j                                y )Nr   rP  r,  rC   r%  r   r"  )rR  rN  rQ  r   r   r   r1  r   rJ  r   rS  rJ   rT  s	            r"   test_get_view_oldbufz$SurfaceTypeTest.test_get_view_oldbuf  s    ENN66??B7JJsO'?&1%!?@*1a0!"3"3ann6F6J"JK!12r$   c                     t        j                  dt         j                  d      }d}|D ]b  }|j                  |       t	        d      D ]!  }|j                  |j                                # | j                  |j                         |       d y )Nr  rC   ))r&      r&   r)   )   r   r   r)   )   r   r)   r)   r   )r   r   r   r   r   r   r   )r   r<   	colorkeyscolorkeyr   s        r"   test_set_colorkeyz!SurfaceTypeTest.test_set_colorkey  sy     NN8V__b9P	! 	9HNN8$1X 1q~~/01 Q^^-x8	9r$   c                     t        j                  d      }|j                         \  }}}}| j                  t        |j
                  ||||f       y Nr   )r   r   	get_masksrd   r:  	set_masksr   r<   r=   r   r   r'  s         r"   test_set_maskszSurfaceTypeTest.test_set_masks'  sA    NN8$[[]
1a)Q[[1aA,?r$   c                     t        j                  d      }|j                         \  }}}}| j                  t        |j
                  ||||f       y rd  )r   r   
get_shiftsrd   r:  
set_shiftsrg  s         r"   test_set_shiftszSurfaceTypeTest.test_set_shifts,  sA    NN8$\\^
1a)Q\\Aq!Q<@r$   c                 X   d}t        j                  ddd      }t        j                  ddd      }|j                  d       |j                  t        |d|j                                | j                  |j                  d	      d
       | j                  |j                  d      |       y )Nr   r   r   rC   r7   r7   )rR   r7   r   r   )r   sourcedestr   r'   r(   )r   r   rS   r   r   r   r   r,   )r   r   r   r   s       r"   test_blit_keyword_argsz&SurfaceTypeTest.test_blit_keyword_args1  s    ^^FAr*^^FAr*
	
ibkkmT6*N;6*E2r$   c                 4   t        j                  ddd      }d}|j                  |       t        j                  ddd      }d}|j                  |       |j                  |dd	       |j                  |d
d	       |j                  |dd	       | j	                  |j                  d      |       | j	                  |j                  d      |       | j	                  |j                  d      |       | j	                  |j                  d      |       | j	                  |j                  d      |       | j	                  |j                  d      |       | j	                  |j                  d      |       | j	                  |j                  d      |       y)z8SDL2 can have more than 16 bits for x, y, width, height.)rO   i	 r   rC   r)   r   r   r*   r   r)   r   rN   )r   i>  rO   rO   )r   r  )r   i }  rO   rO   ),  ru  )r   i rO   rO   )e   rv  )   rw  )-  rx  )r
  rx  )r
  rw  )rO   rw  )c   ry  )  rz  N)r   r   rS   r   r   r,   )r   big_surfbig_surf_color
backgroundbackground_colors        r"   test_blit_big_rectsz#SurfaceTypeTest.test_blit_big_rects:  sf   >>,26$n%^^J26
&() 	*3GH*3GH*3GH 	**:6G**:6G**:6G 	**:68HI**:68HI**:68HI**846FG**:68HIr$   N)5__name__
__module____qualname__r#   r1   r?   rE   rL   rV   rb   rh   rj   rn   rw   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  unittestskipIfr^   environgetr  r  r  r  rG  rM  hasattrr   bufferproxyOLDBUFrY  r[  rb  rh  rl  rq  r   r$   r"   r
   r
      s_   @">
&?4."".E9"?1"f56A .
.A>@ "8">"<2,34"D: X__


()W40%"	%"R"$*7S*j)< V''8FX__Z!;<
) =
) X__Z!;<
3 =
39&@
A
3Jr$   r
   c                   L    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y)TestSurfaceBlitz/Tests basic blitting functionality and options.c                 0   t        j                  dd      | _        | j                  j                  t        j                  ddd             t        j                  dd      | _        | j
                  j                  t        j                  ddd             y)zResets starting surfaces.   r  rC   r)   @   r  r   N)r   r   src_surfacerS   rU   dst_surfacer   s    r"   setUpzTestSurfaceBlit.setUpv  sj    !>>*b9fll3S9:!>>(B7fll1a34r$   c                 h   | j                   j                  | j                  d      }| j                  |t        j
                         | j                  |j                  d       t        d      D cg c]  }||f c}D ]-  }| j                  | j                   j                  |      d       / yc c}w )z4Full coverage w/ overflow, specified with Coordinater'   r  r  r|   N)
r  r   r  r   r   r8   r   r   r   r,   r   resultxks       r"   test_blit_overflow_coordz(TestSurfaceBlit.test_blit_overflow_coord}  s    !!&&t'7'7@ffkk2h/"'),Q1a&, 	JAT--44Q7I	J,s   0B/c           	         | j                   j                  | j                  t        j                  dddd            }| j                  |t        j                         | j                  |j                  d       t        d      D cg c]  }||f c}D ]-  }| j                  | j                   j                  |      d       / yc c}w )z0Full coverage w/ overflow, specified with a Rectru  r  r  r|   N
r  r   r  r   r8   r   r   r   r   r,   r  s       r"   test_blit_overflow_rectz'TestSurfaceBlit.test_blit_overflow_rect  s    !!&&t'7'7RSRU9VWffkk2h/"'),Q1a&, 	JAT--44Q7I	J,s   Cc                    | j                   j                  | j                  t        j                  d            }| j                  |t        j                         | j                  |j                  d       | j                  | j                   j                  d      d       | j                  | j                   j                  d      d       | j                  | j                   j                  d      d       | j                  | j                   j                  d      d	       | j                  | j                   j                  d      d	       y
)zPTest Rectangle Dest, with overflow but with starting rect with top-left at (1,1)rR   rR   rR   rR   )rp  ?   r  r'   rQ   r  r   r   r  r   r|   N	r  r   r  r   r8   r   r   r   r,   r   r  s     r"   test_blit_overflow_nonoriginz,TestSurfaceBlit.test_blit_overflow_nonorigin  s    !!&&t'7'7fkk,>W&Xffkk2h/))008)D))0099E))0099E))008/J))00:OLr$   c                 r   | j                   j                  | j                  t        j                  d      t        j                  d            }| j                  |t        j                         | j                  |j                  d       | j                  | j                   j                  d      d       | j                  | j                   j                  d      d       | j                  | j                   j                  d      d       | j                  | j                   j                  d	      d       | j                  | j                   j                  d
      d       | j                  | j                   j                  d      d       | j                  | j                   j                  d      d       y)zTesting area constraintr  r7   r7   r7   r7   rp  r   rn  r'   rQ   r  r  r  r   r|   r   r   Nr  r  s     r"   test_blit_area_contraintz(TestSurfaceBlit.test_blit_area_contraint  sT   !!&&\*\* ' 

 	ffkk2f-))008)D))0099E))0099E))00:IF##F+_	
 	))008/J))008)Dr$   c                 d   | j                   j                  | j                  t        j                  d      t        j                  d            }| j                  |t        j                         | j                  |j                  d       t        d      D cg c]  }||f c}D ]-  }| j                  | j                   j                  |      d       / | j                  | j                   j                  d      d       | j                  | j                   j                  d      d       y	c c}w )
zTesting zero-overlap condition.) r  rR   rR   )r7   r7   r  r  r  r'   r  rQ   r  r  Nr  r  s       r"   test_blit_zero_overlapz&TestSurfaceBlit.test_blit_zero_overlap  s    !!&&/0-. ' 

 	ffkk2f-"'),Q1a&, 	DAT--44Q7C	D##G,i	
 	))0099E -s   D-c                    t        j                  dt        d      }|j                         }t	        j
                  |j                               D ]5  \  }}|j                  ||f|dd|f       |j                  ||fd|ddf       7 |j                  |d       t	        j
                  |j                               D ]8  }| j                  |j                  |      d   |j                  |      d          : y )Nr  rC   r   r)   r'   rR   )r   r   r   r   r   r   r   rT   r   r   r,   )r   srcdstijr   s         r"   !test_blit__SRCALPHA_opaque_sourcez1TestSurfaceBlit.test_blit__SRCALPHA_opaque_source  s    nnZ26hhj,,S\\^< 	/DAqJJ1v1a|,JJ1v1a~.	/ 	f**3<<>: 	CBSZZ^A.

2q0AB	Cr$   c           	      f   t        j                  dt        d      }|j                         }t	        j
                  |j                  |j                        D ]  \  }}|j                  ||        |j                         }|j                  |d       t        |j                        D ]Z  }t        |j                        D ]@  }|j                  ||f      x\  }}	}
}}||	|
||d|z
  dz  z  z   f}| j                  ||       B \ | j                  |j                         |j                                y)zjTest that blit operation works on self, alpha value is
        correct, and that no RGB distortion occurs.)r^  r^  rC   r'   r  N)r   r   r   r   r   gradientr   r   rT   r   r   r   r,   r   )r   test_surfacer   r   
test_colorreference_surfacer  yr=   r   r   r'  reference_colorexpected_colors                 r"   test_blit__blit_to_selfz'TestSurfaceBlit.test_blit__blit_to_self  s(    ~~j(B?$$&(11$**dkkJ 	0NB
J/	0 )--/,/tzz" 	BA4;;' B1B1I1I1a&1QQAq!"#QAsQw36F1G,H!J  .AB	B 	*335|7L7L7NOr$   c                      dd  fd} fd}t        dd      D ]%  }t        dd      D ]  } |||        |||        ' y)	zTests blitting a nonzero alpha surface to another nonzero alpha surface
        both straight alpha compositing method. Test is fuzzy (+/- 1/256) to account for
        different implementations in SDL1 and SDL2.
        r   c                 8    | |z
  D ]  }t        |      dkD  s y y)zAReturns True if two colors are within (1, 1, 1, 1) of each other.rR   FT)abs)color1r   vals      r"   check_color_diffzRTestSurfaceBlit.test_blit__SRCALPHA_to_SRCALPHA_non_zero.<locals>.check_color_diff  s(     !s8a< ! r$   c                    t        j                  	t         j                  d      }|j                         }t	        | | || f      }t	        | |||f      |j                  |       |j                         |j                  |d       t	        t        fd|D                    z   }j                   |j                  d      |             y)zITests straight alpha case. Source is low alpha, destination is high alpharC   r'   c              3   H   K   | ]  }|d j                   z
  z  d z    ywr)   Nr'  ).0r  low_alpha_colors     r"   	<genexpr>zdTestSurfaceBlit.test_blit__SRCALPHA_to_SRCALPHA_non_zero.<locals>.high_a_onto_low.<locals>.<genexpr>  s+      ABa3!2!223;   "N
r   r   r   r   rU   rS   r   r   r   r,   )
highlowhigh_alpha_surfacelow_alpha_surfacehigh_alpha_colorr  r  r  r   r   s
         @r"   high_a_onto_lowzQTestSurfaceBlit.test_blit__SRCALPHA_to_SRCALPHA_non_zero.<locals>.high_a_onto_low  s    !'foor!J 2 7 7 9$tS$'  $T3S$9:O##$45""?3##$5v>,u FV 0 N
 OO !3!:!:6!BNSr$   c                    t        j                  	t         j                  d      }|j                         }t	        | | || f      t	        | |||f      }|j                         |j                  |       |j                  |d       t	        t        fd|D                    z   }j                   |j                  d      |             y)zITests straight alpha case. Source is high alpha, destination is low alpharC   r'   c              3   H   K   | ]  }|d j                   z
  z  d z    ywr  r  )r  r  r  s     r"   r  zdTestSurfaceBlit.test_blit__SRCALPHA_to_SRCALPHA_non_zero.<locals>.low_a_onto_high.<locals>.<genexpr>  s,      BCa3!1!3!334<r  Nr  )
r  r  r  r  r  r  r  r  r   r   s
         @r"   low_a_onto_highzQTestSurfaceBlit.test_blit__SRCALPHA_to_SRCALPHA_non_zero.<locals>.low_a_onto_high  s    !'foor!J 2 7 7 9$tS$'  $T3S$9:O##$45""?3""#5v>- GV 1 N
 OO !2!9!9&!A>Rr$   r   r^  r  N)r   )r   r  r  low_ahigh_ar  r   s   `    @@r"   (test_blit__SRCALPHA_to_SRCALPHA_non_zeroz8TestSurfaceBlit.test_blit__SRCALPHA_to_SRCALPHA_non_zero  sY     		,	, 1c] 	/ES/ /../	/r$   c                     t        j                  ddd      }|j                  d      }t        j                  dt         j                  d      }|j	                  d|       |j                  |d       y )N)r   r   r   r   r7   r   rC   r'   )r   r   get_palette_atr   rT   r   )r   targetr  ro  s       r"   test_blit__SRCALPHA32_to_8z*TestSurfaceBlit.test_blit__SRCALPHA32_to_8  sX     A.**1-
<fj)FF#r$   N)r  r  r  __doc__r  r  r  r  r  r  r  r  r  r  r  r$   r"   r  r  V  s?    9>5JJ	ME(F CP*>/@$r$   r  c                      e Zd Z ej                  ej                  j                  d      dk(  d      d        Z ej                  ej                  j                  d      dk(  d      d        Z	 ej                  ej                  j                  d      dk(  d      d        Z
d Zd Zd	 Zd
 Zd Z ej                  d ej"                         v xs d ej"                         v d      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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-d+ Z.d, Z/d- Z0d. Z1d/ Z2d0 Z3d1 Z4d2 Z5d3 Z6d4 Z7d5 Z8d6 Z9d7 Z:d8 Z;y9):GeneralSurfaceTestsr  r  r  c                    t         j                  j                          	 t         j                  j                  d       t         j                  j                  t        t        j                  j                  dd                  }t         j                  j                  t        t        j                  j                  dd                  }| j                  |j                         d       | j                  |j                         d       | j                  t        |j                  d            d       | j                  t        |j                  d            d	       |j                  d
      }| j                  t        |      d       | j                  |j                         |j                                t         j                  j                          y # t         j                  j                          w xY w)Nr   rX   zcity.pngz	brick.png)r(   r)   r)   r)   r)   )r(   r(   rC   z<Surface(24x24x32 SW)>z<Surface(469x137x32 SW)>r   z<Surface(24x24x8 SW)>)r   r-   r[   r.   r\   r]   r   r^   r_   r`   r   get_paletterD   r   ra   )r   imim2im3s       r"   test_image_convert_bug_131z.GeneralSurfaceTests.test_image_convert_bug_131)  sL    		"NN##J/""<VZ0P#QRB,,##Lfk1R$STCR^^-/UVS__.0PQT"**R.13KLT#++b/24NO **Q-CT#Y(?@S__.0@A NN!FNN!s   FG  G8c                 J   t         j                  j                          t        j                  d      }| j	                  t         j
                  d|j                         t         j                  j                          	 	 |j                  d       |j                  t        j                  d             | j	                  t         j
                  d|j                         t         j                  j                  d       	 |j                          t         j                  j                          y# t         j
                  $ r | j                  d       Y w xY w# t         j
                  $ r | j                  d       Y ow xY w# t         j                  j                          w xY w)zGEnsure initialization exceptions are raised
        for surf.convert().r   display initializedrC   z-convert() should not raise an exception here.No video moder   N)
r   r-   ra   r   assertRaisesRegexr  r   r[   failr.   r/   s     r"   test_convert_initz%GeneralSurfaceTests.test_convert_initF  s"    	~~f%v||-BDLLQ	"KR V^^F34 ""6<<$,,ONN##J/K NN! << K		IJK << K		IJK NN!sI   ?5D. 4A
F ?E .$EF EF $E?<F >E??F  F"c                    t         j                  j                          t        j                  d      }| j	                  t         j
                  d|j                         t         j                  j                          	 | j	                  t         j
                  d|j                         t         j                  j                  d       	 |j                          t         j                  j                          y# t         j
                  $ r | j                  d       Y Ew xY w# t         j                  j                          w xY w)zMEnsure initialization exceptions are raised
        for surf.convert_alpha().r   r  r  r   z3convert_alpha() should not raise an exception here.N)
r   r-   ra   r   r  r  convert_alphar[   r.   r  r/   s     r"   test_convert_alpha_initz+GeneralSurfaceTests.test_convert_alpha_initd  s     	~~f%v||-BDDVDVW		"""6<<$BTBTUNN##J/Q""$ NN! << Q		OPQ NN!s+   >A
D" 	C8 8$DD" DD" " Ec                    t         j                  j                          	 t         j                  j                  d       t        j                  ddd      }|j                         }| j                  |j                         t        z  t               | j                  |j                         d       t         j                  j                          y# t         j                  j                          w xY w)z[Ensure that the surface returned by surf.convert_alpha()
        has alpha blending enabledr   rN   r   rC   r)   N)r   r-   r[   r.   r   r  r   r   r   r   ra   )r   r   s1_alphas      r"   test_convert_alpha_SRCALPHAz/GeneralSurfaceTests.test_convert_alpha_SRCALPHA|  s     			"NN##J/
Ar2B'')HX//1H<hGX//137NN!FNN!s   BC  C0c                    t        j                  dt         j                  d      }|j                  d       t        j                  dt         j                  d      }| j	                  |j                  d      d       |j                  |d       | j	                  |j                  d      d       | j	                  |j                  d      d       y)zblit should be white.r   rC   )r)   r)   r)   rO   r'   ry   N)r   r   r   rS   r   r,   r   )r   surf1rg   s      r"   test_src_alpha_issue_1289z-GeneralSurfaceTests.test_src_alpha_issue_1289  s    vv;

'(vv;f-|<

5&!f-/CDf-/CDr$   c                    i dddddddddd	d
ddddddddddddd	ddddddddddi ddd d!d"d#d$d%d&d'd(dd)dd*d+d,d-d.d/d0d1d2d3d4d5d6d7d8dd9d:d;d+i d<d=d>d?d@dAdBdCdDdEdFddGdHdIdJdKdLdMdNdOdPdQdRdSdEdTddUdVdWdXdYdZd[d\d]dEdd^d_d`dadbdcdddde}g df}i }t        |t        |      t        |            D ]  \  }}}t        |t        |      |      D ]  \  }}}	| j                  |||	|||g      5  t        j                  dht        j
                  di      }
|
j                  |dj||	f       t        j                  dht        j
                  di      }|j                  |dj||f       |j                  |
dk       |||f|||	ff}|j                  dl      ||<   | j                  ||   ||          dmdmdm         | j                  ||       ym# 1 sw Y   xY w)n9 "What pygame 1.9.x did". Is the alpha blitter as before?r   r)   r)   rt  r   r)   r)   r)   r  rR      rR   r  A      r  r   r)      r)   r  ~   r   r  >   r)   r   r)   r  r   r  r   r  r)   r   r)   r  r  r  r     r)   k   r)   r  r  rR   r     r)   r7   r)   r  r   r)   r)   r   r)   rR   r  r  rt  rR   r)   r  r  r  r  rR   r)   r  r)   r  r     r)      r)   r  r  r  r  r  r)      r)   r  r  r  r  r  r   r  r  r  rt  r  r)   r  r  r*  r  r  r)   rm   rm   r*  r  r  r)   r     r*  r  _   r)         r*  r  `   r)      r5  r*  r     r)   r3     r*  r  r*  r   r  r   r   rt  r  r)   r   r   rA  r  }   r)   r^  r^  rA  r  n   r)         rA  r  r  r)   r   r   rA  r  r  r)   r  r   rA  r     r)   O   r5  rA  r  r  r)   rR   r)   rA  r   r   r  r  rt  r   r)   r  r  rW  r  rW  r  o   r)         rW  r  r   r)   r  r%  rW  r  r   r)   r  r   rW  r  rQ  r)   N   r5  rW  r  r  r)   rR   r)   rW  r   r  r  r  rt  r  r)   r  r  rj  r     r)   B   ro  rj  r     r)   ry  r   rj  r  r9  r)   r8  r^  rj  r  r9  r)   r3  rJ  rj  r  r  r)   r  r0  rj  r  rj  r   r  rR   rR   rt  r  r)   rR   rR   r}  r  r  r)   r7   r7   r}  r     r)   4   ro  r   r)   r  r   r   r)   r  r^     r)   3   rm   r   r)   r)   r   rR   r)   r  rR   r  r)   r  r  r  r)   r   r  r   r)   r  r   r  r)   r  r  r  r)   rR   r  )r}  r  )r}  r  )r}  r  )r}  r  )r}  r   )rs  rt  )rs  r  )rs  r  )rs  r  )rs  r  )rs  r  )rs  r  )rs  r   r   rR   r  r  r   r  r  r)   src_rsrc_bsrc_adest_rdest_bdest_aro  ro  rC   r)   r'   r  !   N
zipreversedsubTestr   r   r   rS   r   r,   r   r   results_expectednumsresultsdst_rdst_bdst_ar  r  r  src_surf	dest_surfkeys                r"   test_src_alpha_compatiblez-GeneralSurfaceTests.test_src_alpha_compatible  s   &A
(*<A
(*<A
 +,?A
 -.A	A

 -.AA
 ,-AA
 +,>A
 +,>A
 )*<A
 )*<A
 +,?A
 -.AA
 -.AA
 ,-AA
 +,>A
  +,>!A
" *+>#A
$ *+>%A
& ,-@'A
( ./B)A
* ./B+A
, -.A-A
. ,-?/A
0 ,-?1A
2 +,@3A
4 +,@5A
6 -.B7A
8 /0D9A
: /0D;A
< ./B=A
> -.@?A
@ -.@AA
B +,@CA
D +,@EA
F -.BGA
H /0DIA
J /0DKA
L ./BMA
N -.@OA
P -.@QA
R )*<SA
T )*<UA
V +,?WA
X -.AYA
Z -.A[A
\ ,-@]A
^ +,>_A
` +,>aA
b '(8cA
d '(8eA
f )*<gA
h -@,?+>*<*<(8(8*<,@,@+>*<*<AA
H 3#&tXd^Xd^#L 	JE5%'*4$'F J#ue\\    "  J  &~~hLHMM5#ue"<= &x" MINNE3u#=>NN8V4!5%05%2GHC#,#3#3H#=GCL$$WS\3CC3HI!J JJ	J( 	"23%J J   B=G..G8c                    i ddddddddddd	d
dddddddddddddddd
ddddddi ddddddddddd dd!dd"d#d$d#d%d&d'd(d)d(d*d+d,dd-dd.d#d/d#i d0d&d1d(d2d(d3d+d4dd5dd6d7d8d7d9d:d;d<d=d<d>d?d@ddAddBdCdDdCdEdFd#d#dGdddCdCdFd#d#dGdddH}g dI}i }t        |t        |      t        |            D ]  \  }}}t        |t        |      |      D ]  \  }}}	| j                  |||	|||J      5  t        j                  dKt        j
                  dL      }
|
j                  |dM||	f       t        j                  dKt        j
                  dL      }|j                  |dM||f       |j                  |
dN       |||f|||	ff}|j                  dO      ||<   | j                  ||   ||          dPdPdP         | j                  ||       yP# 1 sw Y   xY w)Qr  r  r  r  r   )r   r)   r)   r)   r  )r  r)      r)   r  r  )   r)   f   r)   r  r  r  r  r  r  r"  r#  r&  r'  r(  r)  )D   r)   r  r  r,  r.  )r  r)   r     r1  )U   r)   r     r6  r:  )   r)   r  r)   r>  r?  r@  )w   r)   r  r  rC  rF  )r  r)         rK  )r  r)   r  r  rM  rO  )r  r)   r  r  rS  rU  rV  rY  rZ  r_  ra  rc  rf  rh  ri  )r  r)   r  r  rl  rp  )r  r)   r  r  rt  )r  r)   r  r  rv  rx  )r  r)   r  r  rz  r{  r|  r  r  r  )r  r)   r  r  )r  r)   r  r  r  r  r  r  r   r)   r'   r  Nr  r  s                r"   test_src_alpha_compatible_16bitz3GeneralSurfaceTests.test_src_alpha_compatible_16bit  s   &A
(*<A
(*<A
 +,?A
 -.A	A

 -.AA
 ,-AA
 +,>A
 +,>A
 )*<A
 )*<A
 +,?A
 -.AA
 -.AA
 ,-AA
 +,>A
  +,>!A
" *+>#A
$ *+>%A
& ,-@'A
( ./B)A
* ./B+A
, -.A-A
. ,-?/A
0 ,-?1A
2 +,@3A
4 +,@5A
6 -.B7A
8 /0D9A
: /0D;A
< ./B=A
> -.@?A
@ -.@AA
B +,@CA
D +,@EA
F -.BGA
H /0DIA
J /0DKA
L ./BMA
N -.@OA
P -.@QA
R )*<SA
T )*<UA
V +,@WA
X -.AYA
Z -.A[A
\ ,-@]A
^ +,>_A
` +,>aA
b '(8cA
d '(8eA
f )*<gA
h -A,@+>*<*<(8(8*<,@,@+>*<*<AA
H 3#&tXd^Xd^#L 	JE5%'*4$'F J#ue\\    "  J  &~~hLHMM5#ue"<= &x" MINNE3u#=>NN8V4!5%05%2GHC#,#3#3H#=GCL$$WS\3CC3HI!J JJ	J( 	"23%J Jr  c                    i dddddddddd	d
ddddddddddddd	ddddddddddi ddd d!d"d#d$d%d&d'd(dd)dd*d+d,d-d.d/d0d1d2d3d4d5d6d7d8dd9d:d;d+i d<d=d>d?d@dAdBdCdDdEdFddGdHdIdJdKdLdMdNdOdPdQdRdSdEdTddUdVdWdXdYdZd[d\d]dEdd^d_d`dadbdcdddde}g df}i }t        |t        |      t        |            D ]  \  }}}t        |t        |      |      D ]  \  }}}	| j                  |||	|||g      5  t        j                  dht        j
                  di      }
|
j                  |dj|djf       |
j                  |	       t        j                  dht        j
                  di      }|j                  |dj||f       |j                  |
dk       |||f|||	ff}|j                  dl      ||<   | j                  ||   ||          dmdmdm         | j                  ||       ym# 1 sw Y   xY w)nzdoes the SDL 1 style blitter in pygame 2 work with set_alpha(),
        this feature only exists in pygame 2/SDL2 SDL1 did not support
        combining surface and pixel alphar  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+  r,  r-  r.  r/  r1  r2  r6  r7  r:  r;  r>  r?  r@  rB  rC  rD  rF  rG  rK  rL  rM  rN  rO  rP  rS  rT  rU  rV  rX  rY  rZ  r[  r_  r`  ra  rb  rc  rd  rf  rg  rh  ri  rk  rl  rm  rp  rq  rt  ru  rv  rw  rx  ry  rz  r{  r|  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rC   r)   r'   r  N)r  r  r  r   r   r   rS   r   r   r,   r   r  s                r"   &test_sdl1_mimic_blitter_with_set_alphaz:GeneralSurfaceTests.test_sdl1_mimic_blitter_with_set_alphau  s   
A
(*<A
(*<A
 +,?A
 -.A	A

 -.AA
 ,-AA
 +,>A
 +,>A
 )*<A
 )*<A
 +,?A
 -.AA
 -.AA
 ,-AA
 +,>A
  +,>!A
" *+>#A
$ *+>%A
& ,-@'A
( ./B)A
* ./B+A
, -.A-A
. ,-?/A
0 ,-?1A
2 +,@3A
4 +,@5A
6 -.B7A
8 /0D9A
: /0D;A
< ./B=A
> -.@?A
@ -.@AA
B +,@CA
D +,@EA
F -.BGA
H /0DIA
J /0DKA
L ./BMA
N -.@OA
P -.@QA
R )*<SA
T )*<UA
V +,?WA
X -.AYA
Z -.A[A
\ ,-@]A
^ +,>_A
` +,>aA
b '(8cA
d '(8eA
f )*<gA
h -@,?+>*<*<(8(8*<,@,@+>*<*<AA
H 3#&tXd^Xd^#L 	JE5%'*4$'F J#ue\\    "  J  &~~hLHMM5#uc":;&&u- &x" MINNE3u#=>NN8V4!5%05%2GHC#,#3#3H#=GCL$$WS\3CC3HI#J JJ	J* 	"23'J Js   CG??H	armaarch64z.sdl2 blitter produces different results on armc                 :   i ddddddddd	d
dddddddddddddddd
ddddddddi dd d!d"d#d$d%d&d'd(d)dd*dd+d,d-d.d/d0d1d2d3d4d5d6d7dd8dd9d:d;d<i d=d>d?d2d@d4dAd6dBddCddDdEdFdGdHdIdJdKdLdMdNdOdPddQddRdSdTdUdVdWdXdYdZddd[d\d]d^dYdZddd_}g d`}i }t        |t        |      t        |            D ]6  \  }}}t        |t        |      |      D ]  \  }}}	| j                  |||	|||a      5  t        j                  dbt        j
                  dc      }
|
j                  |dd||	f       t        j                  dbt        j
                  dc      }|j                  |dd||f       |j                  |
det        j                  f       |||f|||	ff}t        |j                  dg            ||<   t        dh      D ]"  }| j                  ||   |   ||   |   dhi       $ 	 djdjdj        9 yj# 1 sw Y   'xY w)kz`Checking that the BLEND_ALPHA_SDL2 flag works - this feature
        only exists when using SDL2r  r  r  )r   r  r  r  r   )r   r     r  r  )r
  r  r%  r  r  )r  r  r]  r  r  )   r  i   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(  r)  r+  r,  )r  r     r  r.  )r  r  r     r1  )^   r        r6  )r3  r     r  r:  )   r  ]   r  r>  r?  r@  rB  rC  )rE  r  r  r  rF  )m   r        rK  )rE  r  rE     rM  )r  r  rE  r]  rO  )   r  M   r  rS  rU  rV  rX  rY  )r  r  rE  rE  rZ  )rH  r        r_  ra  rc  rf  rh  ri  rk  rl  )r  r  r  r  rp  )r9  r  b   p   rt  )r  r  r  r  rv  )r  r  r  r  rx  )r  r  r  r  rz  r{  r|  r~  r  )r  r  r   r   r  )r  r  r   r  )r]  r  r
  rE  )r%  r  r
  r  )   r  r   rn  )r)   r)   r   r   )r  r  r   r   )   r  r   r  )r%  r  r
  rE  r  r  r  r  rC   r)   r'   r   r  r   r   N)r  r  r  r   r   r   rS   r   BLEND_ALPHA_SDL2r   r,   r   r   )r   r  r  r  r  r  r  r  r  r  r  r  r  r  s                 r"   test_src_alpha_sdl2_blitterz/GeneralSurfaceTests.test_src_alpha_sdl2_blitter  s   A
(*<A
(*<A
 +,?A
 -.A	A

 -.AA
 ,-AA
 +,>A
 +,>A
 )*<A
 )*<A
 +,?A
 -.AA
 -.AA
 ,-AA
 +,>A
  +,>!A
" *+>#A
$ *+>%A
& ,-@'A
( ./B)A
* ./B+A
, -.A-A
. ,-?/A
0 ,-?1A
2 +,@3A
4 +,@5A
6 -.B7A
8 /0D9A
: /0D;A
< ./B=A
> -.@?A
@ -.@AA
B +,@CA
D +,@EA
F -.BGA
H /0DIA
J /0DKA
L ./BMA
N -.@OA
P -.@QA
R )*<SA
T )*<UA
V +,?WA
X -.AYA
Z -.A[A
\ ,-@]A
^ +,>_A
` +,>aA
b '(8cA
d '(8eA
f )*<gA
h -@,?+>*<*<(8(8*<,?,?+>*<*<AA
H 3#&tXd^Xd^#L 	E5%'*4$'F #ue\\    "    &~~hLHMM5#ue"<= &x" MINNE3u#=>NN &8O8O #  "5%05%2GHC#()9)9()C#DGCL"1X ..#CLO-=c-B1-EQ / % 	 s   C.HHc                    t        j                  dt         j                  d      }|j                  d       t        j                  d      }|j                  d       |j	                  |d       |j                  d      }|j                  d       |j                  d       |j	                  |d       |j                  d      }| j                  ||       y )Nr   rC   )r)   r)   r)   rm   )rO   rO   rO   r'   rm   )r   r   r   rS   r   r,   r   r   )r   r  r  no_surf_alpha_colsurf_alpha_cols        r"   +test_opaque_destination_blit_with_set_alphaz?GeneralSurfaceTests.test_opaque_destination_blit_with_set_alphaA  s    >>(FOOR@*+NN8,	'x(%,,V4'C x("))&1*N;r$   c                 $    | j                          y r   )r  r  s    r"   todo_test_convertz%GeneralSurfaceTests.todo_test_convertT  s    		r$   c                    d}t        |dd      }t        ddd      }t        j                  j                          	 |j	                  |      }| j                  ||       | j                  ||       | j                  |t        j                         | j                  |t                | j                  |j                         |       t        j                  j                          y# t        j                  j                          w xY w)z3Ensure convert accepts a Surface subclass argument.r_  r   r   rC   )r   =   N)r   r   r-   r[   r   r   r   r   r   r   ra   r   r   convert_surfacer    r!   s        r"   .test_convert__pixel_format_as_surface_subclasszBGeneralSurfaceTests.test_convert__pixel_format_as_surface_subclassp  s     )-B?'!R8		"%--m<GWm4Wo6!!'6>>:!!'?;W--/?NN!FNN!s   BC& & Dc                    t         j                  j                          	 t         j                  j                  d       t        j                  ddd      }t         j                  j                  |      }t        j                  ddd      }|j                         }t        j                  ddd      }|j                         }t        j                  ddd      }|j                         }t        j                  ddd      }	|	j                         }
t        j                  ddd      }|j                         }t        j                  ddd	      }|j                         }| j                  |j                         d
       | j                  |j                         d
       | j                  |j                         d
       | j                  |j                         d
       | j                  |
j                         d
       | j                  |j                         d
       | j                  |j                         d
       | j                  |j                         d       | j                  |j                         d       | j                  |j                         d       | j                  |j                         d       | j                  |
j                         d       | j                  |j                         d       | j                  |j                         d       | j                  t         j                        5  t         j                  j                         }t         j                  j                          |j                          ddd       t         j                  j                          y# 1 sw Y   (xY w# t         j                  j                          w xY w)zPEnsure the surface returned by surf.convert_alpha
        has alpha values addedr   rN   r   rC   r   r   r   r   rP   r)   N)r   r-   r[   r.   r   r  r   r   r   rd   r  ra   )r   r   r  r   s2_alphas3s3_alphas4s4_alphas5s5_alphas6s6_alphas7s7_alphar!   s                   r"   test_convert_alphaz&GeneralSurfaceTests.test_convert_alpha  s    	.	"NN##J/
Ar2B~~33B7H
Ar2B'')H
Aq1B'')H
Ar2B'')H
Ar2B'')H
Ar2B'')H
Ar2B'')HX//137X//137X//137X//137X//137X//137X//137X113R8X113R8X113R8X113R8X113R8X113R8X113R8""6<<0 ( ..113##%%%'( NN!( ( NN!s%   LN> >AN2N> 2N;7N> > Oc                 `   d}t        |t        d      }t        dt        d      }t        j                  j	                          	 t        j                  j                  d       |j                  |      }| j                  ||       | j                  ||       | j                  |t        j                         | j                  |t                | j                  |j                         |       t        j                  j                          y# t        j                  j                          w xY w)z9Ensure convert_alpha accepts a Surface subclass argument.r  rC   )r   9   r}   N)r   r   r   r-   r[   r.   r  r   r   r   r   r   ra   r  s        r"   4test_convert_alpha__pixel_format_as_surface_subclasszHGeneralSurfaceTests.test_convert_alpha__pixel_format_as_surface_subclass  s     )-2F'(B?	"NN##H- &33MBGWm4Wo6!!'6>>:!!'?;W--/?NN!FNN!s   B*D  D-c                 .   t         j                  j                          	 t        j                  dt        d      }|j                  dd      }|j                  dd      }|j                  dd      }|j                  d	d
      }|j                  dd      }| j                  |j                         d       | j                  |j                         d       | j                  |j                         d       | j                  |j                         d       | j                  |j                         d       | j                  |j                         d       | j                  t         j                        5  t         j                  j                         }t         j                  j                          |j                          d d d        t         j                  j                          y # 1 sw Y   (xY w# t         j                  j                          w xY w)Nr  rC   rn  )"   r   r'   )rz   r{   )r   r"  )r&   r   )   rR   )   r  r   r  r   r   )r   	   )r   r6   r  )r   r-   r[   r   r   r   r   get_abs_offsetrd   r  r.   ra   )r   r  sub_level_1sub_level_2sub_level_3sub_level_4sub_level_5r!   s           r"   test_get_abs_offsetz'GeneralSurfaceTests.test_get_abs_offset  s   	"^^Hh;F !++FH=K%00BK%00BK%00BK%00@K V224f=[7796B[7796B[7796B[7798D[7798D""6<<0 ) ..113##%&&()
 NN!) )
 NN!s%   EG4 4AG(G4 (G1-G4 4 Hc                    t         j                  j                          	 t        j                  dt        d      }|j                  dd      }|j                  dd      }|j                  dd      }|j                  dd      }|j                  dd	      }|j                  d
d      }| j                  t        |j
                  dd       | j                  t        |j
                  d
d       | j                  t        |j
                  d
d       | j                  |j                         |       | j                  |j                         |j                                | j                  |j                         |       | j                  |j                         |       | j                  |j                         |       | j                  |j                         |       | j                  |j                         |j                         j                                | j                  t         j                        5  t         j                  j                         }t         j                  j                          |j                          d d d        t         j                  j                          y # 1 sw Y   (xY w# t         j                  j                          w xY w)Nr   rC   r   )r   r   )r   r   r  r  )r   r   rn  r  r'   r7   rR   r   r   rN   )r   r   )r   r-   r[   r   r   r   rd   re   r   get_abs_parentr  r  r.   ra   )	r   r  r  r  r   r  r  sub_level_6r!   s	            r"   test_get_abs_parentz'GeneralSurfaceTests.test_get_abs_parent  s4   "	"^^Hh;F !++FH=K%00BK%00@K%00@K%00@K%00@K j&*;*;VZPj+*@*@&'Rj+*@*@&&Q V224f= [779;;Q;Q;ST[7796B[7796B[7796B[7796B**,k.D.D.F.U.U.W ""6<<0 ) ..113##%&&()
 NN!) )
 NN!s%   HJ6 6AJ*J6 *J3/J6 6 Kc                    t        j                  ddd      }t        j                  ddd      }t        j                  ddd	      }t        j                  d
dd      }t        j                  ddd      }|j                  d|       |j                  d|       |j                  d|       |j                  d|       |j	                  d      }| j                  |t         j                         | j                  ||       | j                  |j	                  d      |       | j                  |j	                  d      |       | j                  |j	                  d      |       dD ]#  }| j                  t        |j                  |       % y )Nrn  r   rP   rR   r7   r   r   r6   r   rO   r   r   r  r'   )r   rR   rR   r   r   ))r  r   )r   r  )r7   r   r   r7   )	r   r   rU   rT   r,   r   r   rd   
IndexError)r   r0   c00c01c10c11r   ps           r"   test_get_atzGeneralSurfaceTests.test_get_at  s6   ~~fa,ll1a#ll1b"%ll3A&ll1a#FC FC FC FC KKa.C V,c2V,c2V,c23 	:Aj$++q9	:r$   c           
          t        j                  ddd      }dD ]r  }t        j                  dd|      }|j                  |       |j	                  d      }| j                  ||j                  |      d||j                  |      |fz         t y )	Nr6   r&   rz   rI  rn  r   r'   z%i != %i, bitsize: %i)r   rU   r   rS   get_at_mappedr   map_rgb)r   r   rL  r0   pixels        r"   test_get_at_mappedz&GeneralSurfaceTests.test_get_at_mapped%  s    RR(& 	G>>&!W5DIIe&&v.EU#'5$,,u2Ew*OO		r$   c                    t         j                  j                          	 d}d}t        j                  |t         j                  |      }| j                  |j                         |       | j                  |j                         |       d}t        j                  |t         j                  |      }| j                  |j                         |       | j                  |j                         |       d}t        j                  |d|      }| j                  |j                         |       | j                  |j                         |       d}| j                  t        t         j                  |d|       d}| j                  t        t         j                  |d|       d}| j                  t        t         j                  |d|       | j                  t         j                        5  t         j                  j                         }t         j                  j                          |j                          d d d        t         j                  j                          y # 1 sw Y   (xY w# t         j                  j                          w xY w)	Nr   rC   r   r   r   r  r      )r   r-   r[   r   r   r   r   r   rd   re   r  r.   ra   )r   r   r   r!   s       r"   test_get_bitsizez$GeneralSurfaceTests.test_get_bitsize1  s   %	"$M  Nnn]FOO^TGW--/?W002NCNnn]FOO^TGW--/?W002NCNnn]A~FGW--/?W002NCNFNNM1n  NFNNM1n "NFNNM1n ""6<<0 & ..113##%##%&
 NN!& &
 NN!s%   GI# #AI0I# I I# # Jc                 r    t        j                  d      }|j                         }| j                  |d       y )Nr3   )r   r   r4   r5   )r   r   r;   r   )r   r<   	rectangles      r"   test_get_clipz!GeneralSurfaceTests.test_get_clipZ  s,    NN:&JJL	$45r$   c                    t         j                  j                          	 t        j                  ddd      }| j	                  |j                                |j                  d        | j	                  |j                                d\  }}}}t        j                  |||      }|j                  |       | j                  |j                         |||df       |j                  |t         j                         | j                  |j                         |||df       |j                  t        j                  |dz   |dz   |dz                | j                  |j                         |||df       |j                  t        j                  ||||             | j                  |j                         |||df       t         j                  j                  ddd      }t         j                  j                          | j                  t         j                        5  |j                          d d d        y # 1 sw Y   y xY w# t         j                  j                  ddd      }t         j                  j                          | j                  t         j                        5  |j                          d d d        w # 1 sw Y   w xY wxY w)Nr3   r   rC   )r&   rZ   r~   r   r)   rR   r  )r   r-   r[   r   assertIsNoner   r   rU   r   r   r   r.   ra   rd   r  )r   r<   r=   r   r   r'  ra  s          r"   test_get_colorkeyz%GeneralSurfaceTests.test_get_colorkey_  s   "	!z1b1Aann./ NN4 ann./ (JAq!Q||Aq!,HNN8$ Q^^-1a~> NN8V__5Q^^-1a~> NN6<<Aq1ua!e<= 01aC.ANN6<<1a34 Q^^-1a~> ''
Ar:ANN!""6<<0 ! ! ! ! ''
Ar:ANN!""6<<0 ! ! ! !s1   FH? H33H<?AKJ8/	K8K=Kc                     d}|D ]>  \  }}t        j                  ||f      }|j                         }| j                  ||       @ y )N)r   r  r6   )r6   r  )rR     )r%  rR   r%  r%  )r   r   r   r   )r   sizesr   r   r0   found_heights         r"   test_get_heightz#GeneralSurfaceTests.test_get_height  sH    R" 	3ME6>>5&/2D??,LV\2	3r$   c                    d }t        j                  d      }| j                  |j                          ||             |j	                          | j                  |j                          ||             |j                          | j                  |j                          ||             t        j                  d      }|j	                          |j	                          | j                  |j                          ||             |j                          | j                  |j                          ||             |j                          | j                  |j                          ||             t        j                  d      }t        d      D ]  }|j	                           | j                  |j                          ||             t        d      D ]  }|j                           | j                  |j                                t        j                  d      }|j                          | j                  |j                          ||             |j                          | j                  |j                          ||             y )Nc                     t        j                  d      }	 |j                  | d       y# t         j                  $ r Y yw xY w)NrY   r'   FT)r   r   r   r  )r!   newSurfs     r"   blit_locked_testz=GeneralSurfaceTests.test_get_locked.<locals>.blit_locked_test  s@    nnX.GWf-  << s   * A A rN   r%  )r   r   r  r6  lockunlockr   r  )r   r-  r0   r  s       r"   test_get_lockedz#GeneralSurfaceTests.test_get_locked  s   	 ~~j)doo')9$)?@		doo')9$)?@doo')9$)?@ ~~j)				doo')9$)?@doo')9$)?@doo')9$)?@ ~~j)t 	AIIK	doo')9$)?@t 	AKKM	*+ ~~j)doo')9$)?@doo')9$)?@r$   c                    t        j                  d      }| j                  |j                         d       |j	                          | j                  |j                         |f       |j                          | j                  |j                         d       t        j                  |      }| j                  |j                         d       |j                          | j                  |j                         d       | j                  t              5  dj                          d d d        |j	                          |j	                          |j	                          | j                  |j                         |||f       |j                          |j                          | j                  |j                         |f       |j                          | j                  |j                         d       y # 1 sw Y   xY w)NrN   r  DUMMY)r   r   r   	get_locksr.  r/  
PixelArrayr   closerd   AttributeError)r   r!   pxarrays      r"   test_get_locksz"GeneralSurfaceTests.test_get_locks  s    ..,**,b1 	**,wj9 	**,b1 ##G,G--/4 	**,b1 ~. 	 	  	**,w.IJ**,wj9**,b1	  	 s   G//G8c                    t         j                  j                          	 d}d}d}d}d}t         j                  j                  d      }t        j                  d      }t        j                  dd|      }t        j                  dd	|      }	t        j                  dd
|      }
t        j                  dd|      }t        j                  dd|      }|j                         }| j                  |t               | j                  t        |      d       |D ]<  }| j                  |t               | j                  |d       | j                  |d       > |j                         dk(  r| j                  |d       n%|j                         dk(  r| j                  |d       | j                  |j                         d       | j                  |	j                         d       | j                  |
j                         d       | j                  |j                         d       | j                  |j                         d       | j                  t         j                        5  t         j                  j                  d      }t         j                  j                          |j                          ddd       t         j                  j                          y# 1 sw Y   (xY w# t         j                  j                          w xY w)z*Ensure a surface's losses can be retrieved)      r   r   i |  i  r   r   i   i  r   r   ru   rv   r)   r   )rt   ru   rv   r)   rN   r   )rH   rr   r   r   rP   rC   r   r   )r   r   r   r   )r   r   r   r   )r   r   r  r   )r   r   r   r   )r   r7   r   r   ry   N)r   r-   r[   r.   r   
get_lossesr   r   r   lenintassertGreaterEqualassertLessEqualrd   r  ra   )r   mask8mask15mask16mask24mask32display_surfr0   	surf_8bit
surf_15bit
surf_16bit
surf_24bit
surf_32bitlosseslossr!   s                   r"   test_get_lossesz#GeneralSurfaceTests.test_get_losses  s^   -	"#E(F)F.F7F ">>22:>L>>*-Dz%HI
"FKJ
"FKJ
"FKJ
"FKJ __&F!!&%0S[!, .%%dC0''a0$$T1-. &&(L8  6((*l:  6Y113\BZ224lCZ224lCZ224lCZ224lC ""6<<0 % ..11*=##%""$%
 NN!% %
 NN!s%   IK# "AK0K# K K# # Lc                     ddg}ddg}t        t        ||            D ]J  \  }}t        j                  dt        j                  |      }| j                  ||j                                L y)z<
        Ensure that get_mask can return RGBA mask.
        )   r!  r   i   )ru   rv   r)   rt   r   rC   rY   N)listr  r   r   r   r   re  r   rr   depthsexpectedrH   r!   s         r"   test_get_masks__rgbaz(GeneralSurfaceTests.test_get_masks__rgba  sj    
 -<
 b#Cv$67 	<OHennXvFGXw'8'8':;	<r$   c                     g d}g d}t        t        ||            D ]C  \  }}t        j                  dd|      }|dk(  rd}| j	                  ||j                                E y)z;
        Ensure that get_mask can return RGB mask.
        ))r8  r;  r   r   )rS  r!  r   r   r<  r=  r>  r>  )r   r   r   r   rP   rC   rY   r   r   ry   N)rT  r  r   r   r   re  rU  s         r"   test_get_masks__rgbz'GeneralSurfaceTests.test_get_masks__rgb%  sf    
 )#Cv$67 	<OHennXq%8Gz3Xw'8'8':;		<r$   c                    | j                  t        j                        5  t        j                  j	                  d      }t        j                  j                          |j                          ddd       y# 1 sw Y   yxY w)zX
        Ensure that after display.quit, calling get_masks raises pygame.error.
        rY   N)rd   r   r  r-   r.   ra   re  )r   r!   s     r"   test_get_masks__no_surfacez.GeneralSurfaceTests.test_get_masks__no_surface8  s[     v||, 	 nn--h7GNN!	  	  	 s   AA77B c                    t         j                  j                          	 t        j                  d      }| j	                  |j                         d       |j                  dddd      }| j	                  |j                         d       | j                  t         j                        5  t         j                  j                         }t         j                  j                          |j                          ddd       t         j                  j                          y# 1 sw Y   (xY w# t         j                  j                          w xY w)zget_offset returns the (0,0) if surface is not a child
        returns the position of child subsurface inside of parent
        rN   r'   rR   r6   r   N)r   r-   r[   r   r   
get_offsetr   rd   r  r.   ra   )r   r0   subsurfr!   s       r"   test_get_offsetz#GeneralSurfaceTests.test_get_offsetA  s     		">>*-DT__.7 ooaB3GW//16:""6<<0 % ..113##%""$%
 NN!% %
 NN!s%   BD( (AD5D( D%!D( ( Ec                    t        d      D cg c]  }t        |||       }}t        j                  ddd      }|j	                  |       |j                         }| j                  t        |      t        |             t        ||      D ]  \  }}| j                  ||        |D ]"  }| j                  |t        j                         $ y c c}w )Nr  rn  r   r   )
r   rU   r   r   set_paletter  r   r@  r  r   )r   r  paletter0   palette2r   r   s          r"   test_get_palettez$GeneralSurfaceTests.test_get_paletteU  s    +0:6a5Aq>66~~fa+!##%XG57+ 	$EBR#	$ 	3A!!!V\\2	3 7s   Cc                    t        j                  ddd      }t        j                  dddd      }|j                  d|       |j	                  d      }| j                  |t         j                         | j                  ||       | j                  t        |j                  d       | j                  t        |j                  d	       y )
Nrn  r   r   rR   r7   r   r)   r  r  )	r   r   rU   set_palette_atr  r   r   rd   r  )r   r0   r   r   s       r"   test_get_palette_atz'GeneralSurfaceTests.test_get_palette_ata  s    ~~fa+Q1c*Au%$$Q'ffll3'*d&9&92>*d&9&93?r$   c                    d}g d}|D ]j  \  }}|D ]^  }t        j                  ||f|      }|j                         }|j                  |j	                         z  }|j                         }	| j                  ||	       |j                         }
|j                  |
      }|j                         }|j                  |j	                         z  }|j                         }| j                  ||       |
j                  | dz  | dz        }|j                  |      }|j                         }|j                  t        |j	                               z  }|j                         }| j                  ||       a m y )N)rn  )r"  r  )r  r"  )r7     )rj  r7   )rj  rj  r   rP   rC   rI   r7   )r   r   rK  r2  r   rJ  r   r   r   inflatefloat)r   r'  rV  r   r   rH   r0   buffpitch
test_pitchrect1subsurf1	sub_buff1
sub_pitch1test_sub_pitch1rect2subsurf2	sub_buff2
sub_pitch2test_sub_pitch2s                       r"   test_get_pitchz"GeneralSurfaceTests.test_get_pitchl  sQ   J" 	>ME6 >~~ufoUC(doo&77!^^-
  
3??51$//1	&--0C0C0EE
"*"4"4"6  _=ufqj6'A+>??51$//1	&--h6I6I6K0LL
"*"4"4"6  _=)>	>r$   c                    g d}d}d}|D ]  }t        j                  d|      }|j                  |       |j                         \  }}}}	|j                  |       |j                         \  }
}}}| j	                  ||||	f|
|||f        y)zo
        Tests whether Surface.get_shifts returns proper
        RGBA shifts under various conditions.
        rk  r^  Nr   rI   )r   r   r   rj  r   )r   rV  r   off	bit_depthr!   r   g1b1a1r   g2b2a2s                 r"   test_get_shiftsz#GeneralSurfaceTests.test_get_shifts  s      	AInnXY?Ge$$//1NBBc"$//1NBBb"b"-BB/?@	Ar$   c                     d}|D ]@  \  }}t        j                  ||f      }|j                         }| j                  ||f|       B y )N)r   r$  r&  )rR   i  )i  rR   )ry  i  )r   r   r   r   )r   r'  r   r   r0   
found_sizes         r"   test_get_sizez!GeneralSurfaceTests.test_get_size  sK    R" 	:ME6>>5&/2DJeV_j9	:r$   c                    t        j                  d      }|j                          | j                  |j	                                t        j                  d      }|j                          |j                          |j                          | j                  |j	                                |j                          |j                          |j                          | j                  |j	                                |j                          | j                  |j	                                |j                          | j                  |j	                                t        j                  d      }|j                          |j                          | j                  |j	                                |j                          | j                  |j	                                |j                          | j                  |j	                                y NrN   )r   r   r.  r   r6  r/  r  r/   s     r"   	test_lockzGeneralSurfaceTests.test_lock  sC   : ~~j)		)* ~~j)				)*				)*)**+ ~~j)				)*)**+r$   c                 *   t        dddd      }t        j                  dt        d      }|j	                  |      }| j                  |j                  |      |       | j                  |j                  d      d       |j                  |       | j                  |j                  d      |       |j                  d       | j                  |j                  d      d       |j                  d|       | j                  |j                  d      |       y )	Nr   r^  r)   r  r  rC   r'   ry   )
rU   r   r   r   r  r   	unmap_rgbr,   rS   rT   )r   r   r0   r   s       r"   test_map_rgbz GeneralSurfaceTests.test_map_rgb  s    ac2&~~fh3LL*E2V,l;		!V,e4		,V,l;FAV,e4r$   c                    t        j                  d      }|j                  d      }| j                  |j	                                | j                  |j	                                d}g }|j                  |       |j                  |       |D ]i  }|j                  |d   j                  |             | j                  |d   j	                                | j                  |d   j	                                k y )N)r  r  )r   r   r  r  ))r   r      r  )r   r   r  r  )r   r   r^  r^  r  )r   r   r   r   r   r  append)r   r0   r_  rects
surf_stackr   s         r"   test_mustlockz!GeneralSurfaceTests.test_mustlock  s    ~~l+//"45((*+)F
$'" 	7Djn77=>OOJrN3356OOJrN3356	7r$   c                    t        j                  dt        d      }|j                  d       |j	                  d       | j                  d|j                                t        j                  dt        d      }|j                  d       |j                  |d       | j                  |j                  d      d   dd       y)	z&surf.set_alpha(None) disables blendingr   rC   r   r)   r   r^  Nr)   r   r   r)   r'   r   zthe red component should be 0)	r   r   r   rS   r   r   r   r   r,   r   r<   r   s      r"   test_set_alpha_nonez'GeneralSurfaceTests.test_set_alpha_none  s    NN68R0	 	Dq{{}-^^FHb1
 !
66*1-q2QRr$   c                 D   t        j                  dt        d      }|j                  d       |j	                  d       t        j                  dt        d      }|j                  d       |j                  |d       | j                  |j                  d      d   dd       y	)
z4surf.set_alpha(x), where x != None, enables blendingr   rC   r  r)   r  r'   r   z#the red component should be above 0N)r   r   r   rS   r   r   assertGreaterr,   r  s      r"   test_set_alpha_valuez(GeneralSurfaceTests.test_set_alpha_value	  s~    NN68R0	 	C^^FHb1
 !
6IIfa !%J	
r$   c                    t         j                  j                  t        t        j
                  j                  dd                  }|j                         }| j                  |j                         |j                  |         |       y)zbtest bug discovered by robertpfeiffer
        https://github.com/pygame/pygame/issues/721
        rX   
alien2.pngN)r   r\   r]   r   r^   r_   r`   r   r   r  r  r   r0   r  s      r"   test_palette_colorkeyz)GeneralSurfaceTests.test_palette_colorkey	  sa     ||  bggll6<.P!QR!))+DLL,=>Dr$   c                    t         j                  j                  t        t        j
                  j                  dd                  }|j                         }|j                  d|       | j                  |j                  d      |       y NrX   r  r'   )r   r\   r]   r   r^   r_   r`   r   rT   r   r,   r  s      r"   test_palette_colorkey_set_pxz0GeneralSurfaceTests.test_palette_colorkey_set_px 	  s_    ||  bggll6<.P!QR!FC V,c2r$   c                    t         j                  j                  t        t        j
                  j                  dd                  }|j                         }|j                  |       | j                  |j                  d      |       y r  )r   r\   r]   r   r^   r_   r`   r   rS   r   r,   r  s      r"   test_palette_colorkey_fillz.GeneralSurfaceTests.test_palette_colorkey_fill&	  s\    ||  bggll6<.P!QR!		#V,c2r$   c           
         t        d      D cg c]  }t        j                  |||       }}t        |d         |d<   t        |d         dd |d<   t        j                  ddd      }|j                  |       t        d      D ]g  }| j                  |j                  ||         |d|fz         ||   }|j                  |       | j                  |j                  d	      |d|fz         i t        d      D ]  }t        j                  d
|z
  dd      ||<   ! |j                  |dd        t        d      D ]g  }| j                  |j                  ||         |d|fz         ||   }|j                  |       | j                  |j                  d	      |d|fz         i | j                  t        |j
                  t        dddd      g       | j                  t        |j
                  d       y c c}w )Nr  r6   r   r   r   rn  r   zpalette color %ir'   r)   rR   r7   r  )rR   r7   r   r  )r   r   rU   r   r   rb  r   r  rS   r,   rd   re   )r   r  rc  r0   r   s        r"   test_set_palettez$GeneralSurfaceTests.test_set_palette,	  s   27*=Q6<<1a(==GBK(GBK(1-~~fa+!s 	PAT\\'!*5q:LPQt:ST
AIIaLT[[0!5G1$5NO		P
 r 	5AcAgq!4GAJ	52's 	PAT\\'!*5q:LPQt:ST
AIIaLT[[0!5G1$5NO		P
 	*d&6&6q!Q9L8MN*d&6&6G) >s   G6c                     ddgz  }t        j                  ddd      }| j                  t         j                  |j                  |       y )Nr  r6   r&   rz   rn  r   rC   )r   r   rd   r  rb  )r   rc  r0   s      r"   test_set_palette__failz*GeneralSurfaceTests.test_set_palette__failC	  s<    &~~fa,&,,(8(8'Br$   c                    t        j                  dd      }ddgz  }d|d<   |j                  |       |j                  dd	       | j	                  |j                  d      d
       | j	                  |j                  d      d       y )Nrn  r   rI   r  r  )r   rZ   rz   rR   r'   )r~   r   rZ   )r   rZ   rz   r)   r  )r6   r&   rz   r)   )r   r   rb  rT   r   r,   r   r0   rc  s      r"   test_set_palette__set_atz,GeneralSurfaceTests.test_set_palette__set_atH	  sy    ~~fA.&!
! 	FL)V,.?@V,.?@r$   c                    t        j                  ddd      }|j                  d      }t        dddd      }||k(  rt        dddd      }|j	                  d|       | j                  |j                  d      |       t        |      }|j	                  d|       | j                  |j                  d      |       t        |      dd }|j	                  d|       | j                  |j                  d      |       | j                  t        |j                  d	|       | j                  t        |j                  d
|       y )Nrn  r   r   r6   rR   r)   r7   r   r  r  )	r   r   r  rU   rg  r   r   rd   r  )r   r0   originalreplacementnexts        r"   test_set_palette_atz'GeneralSurfaceTests.test_set_palette_atT	  s   ~~fa+&&r*Aq!S)("1a-KB,,,R0+>XB%,,R0$7Xq#B%,,R0$7*d&9&93L*d&9&92{Kr$   c                 ~   t        j                  d      }|j                  dddd      }|j                  d      }| j                  t        |j                  d       | j                  |j                         |j                                | j                  |j                         |j                                | j                  |j                         |j                                t         j                  j                  t         j                        }| j                  t         j                  |j                  d       y )Nr  r   rR   )r   r   rR   rR   )r   r   rR   rR   i  ry   )r   r   r   rd   re   r   rj  re  r?  __new__r  )r   r0   r<   s      r"   test_subsurfacez#GeneralSurfaceTests.test_subsurfacee	  s    , ~~h'OOAq!Q'OOL) 	*doo7HI):;(89):; ~~%%fnn5&,,Fr$   c                    t        j                  d      }|j                          |j                          | j	                  |j                                t        j                  d      }|j                          |j                          |j                          | j                  |j                                |j                          | j	                  |j                                t        j                  d      }|j                          | j	                  |j                                |j                          | j	                  |j                                t        j                  d      }|j                          |j                          | j	                  |j                                |j                          |j                          | j	                  |j                                y r  )r   r   r.  r/  r  r6  r   r/   s     r"   test_unlockzGeneralSurfaceTests.test_unlock	  s=   ~~j)		*+ ~~j)				)**+ ~~j)*+*+ ~~j)		*+		*+r$   c           
      H   t        j                  ddd      }d}d}|j                  ||       |j                  |      }| j	                  ||       | j                  |t         j                         d}ddd	t        d
ft        dfg}|D ]  \  }}t        j                  d||      }|j                  |j                  |            }|j                  |       |j                  d      }| j	                  ||d||||fz         | j                  |t         j                          y )Nrn  r   r   )rR   rR   rR   C   )r^  r  r   r)   )r   r   )r   rP   )r   rC   r   rC   r'   z %s != %s, flags: %i, bitsize: %i)r   r   rg  r  r   r   rU   r   r  rS   r,   )	r   r0   r   r  
unmapped_cformatsrG   rL  comparison_cs	            r"   test_unmap_rgbz"GeneralSurfaceTests.test_unmap_rgb	  s   ~~fa+Aq!^^A&
Q'j&,,7 GWxnxnM% 	<NE7>>&%9DQ8JIIaL;;v.L2|UG<= !!*fll;	<r$   c                    g d}|D ]%  \  }}}t        j                  dd|      }|j                  d       |j                  dd       |j                         }|j	                  |||f       |j                  ||       |j                         \  }}t        |      D ]  }	t        |      D ]}  }
| j                  |	|
      5  | j                  |j                  |	|
f      |j                  |	|
f      d|j                  |	|
f      |j                  |	|
f      |||fz         d d d          ( t        j                  d	dd
      }|j                  d       |j                  dd       |j                         }t        dddd      }|j                  |       |j                  |       |j	                  ||j                  dz   |j                  dz   f|j                                |j                  dd       |j                         \  }}t        |      D ]F  }	t        |      D ]6  }
| j                  |j                  |	|
f      |j                  |	|
f             8 H d}t        j                  dt         j                   d
      }|j                  d       |j#                  d|       |j                  d       | j                  |j                  d      |       |j                  d       | j                  |j                  d      |       |j                  dd       | j                  |j                  d      |       |j                  dd       | j                  |j                  d      |       y # 1 sw Y   xY w)N))r   r7   r   )r   r7   r   )rP   r7   r   )rC   r7   r   )rC   r  r   )rC   r   r   )rC   r   r   )rC   r   r   )rC   r   )rC   r   r  )rC   r  r7   )rC   r7   r  rY   r   rs  rt  r  )r  r  z %s != %s, bpp:, %i, x: %i, y: %i)r&   r   rC   )r"  rR   r  r  r   rR   r   r  r7   r  r   r  r   )dxr  )dyrn  )r  r  r  r   )r  r  r'   )r   r   rS   r   r   scrollr   r   r  r   r,   r8   r9   r  r  r;   r   rT   )r   scrollsrL  r  r  r0   compr  r  r  r  clip
spot_colors                r"   test_scrollzGeneralSurfaceTests.test_scroll	  s   
  ' 	OGR>>(Aw7DIIk"IIk<099;DIIdRH%KKB==?DAq1X q AQ/ (( KKA/ KKA/> $QF 3 $QF 3 ' " " 	0 ~~h2.		+		+|,yy{Aq!R dd		$!TVVaZ0$--/BAq}}1q 	KA1X K  aV!4dkk1a&6IJK	K &
~~ffoor:		"#FJ'qV,j9qV,j9qQV,j9rb!V,j9O s   A M9	9NN)<r  r  r  r  r  r^   r  r  r  r  r  r  r  r  r  r  platformmachiner  r  r  r  r  r  r  r
  r  r  r  r  r"  r)  r0  r8  rQ  rX  rZ  r\  r`  re  rh  r{  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r$   r"   r  r  (  s   X__


()W40"	"2 X__


()W40"	"4 X__


()W40"	"("
Em4^m4^`4D X__!!!##Fy4DH4D4D4F'F8a	aL<&8"$2"h","@$"L:&
'"R6
$!L3,A\*2X0"d<<& "(
3	@>6A0:8,t57 
S
E33H.C

AL"&GP,@<8@:r$   r  c                   4    e Zd ZdZd Zd Zd Zd Zd Zd Z	y)	SurfaceSubtypeTestzAIssue #280: Methods that return a new Surface preserve subclassesc                 @    t         j                  j                          y r   r   r-   r[   r  s    r"   r  zSurfaceSubtypeTest.setUp
      r$   c                 @    t         j                  j                          y r   r   r-   ra   r  s    r"   tearDownzSurfaceSubtypeTest.tearDown
  r  r$   c                    d}t        |t        d      }|j                         }| j                  ||       | j	                  |t
        j                         | j	                  |t
        j                         | j	                  |t                | j	                  |t                | j                  |j                         | j                  t        t        |d       | j                  |j                         |       y)a   Ensure method copy() preserves the surface's class

        When Surface is subclassed, the inherited copy() method will return
        instances of the subclass. Non Surface fields are uncopied, however.
        This includes instance attributes.
        r   rC   test_attributeN)r   r   r   r   r   r   r   r   r  rd   r6  getattrr   r   r   r   ms1ms2s       r"   r   zSurfaceSubtypeTest.test_copy
  s     !mXr:hhjc"c6>>2c6>>2c?3c?3**+.'38HI7r$   c                    d}t        |dd      }|j                  d      }| j                  ||       | j                  |t        j
                         | j                  |t        j
                         | j                  |t                | j                  |t                | j                  |j                         | j                  t        t        |d       | j                  |j                         |       y)a  Ensure method convert() preserves the surface's class

        When Surface is subclassed, the inherited convert() method will return
        instances of the subclass. Non Surface fields are omitted, however.
        This includes instance attributes.
        r   r   rP   r  N)r   r   r   r   r   r   r   r  rd   r6  r  r   r   r  s       r"   test_convertzSurfaceSubtypeTest.test_convert)
  s     !mQ3kk"oc"c6>>2c6>>2c?3c?3**+.'38HI7r$   c                 j   t         j                  j                  d       d}t        j                  |t        d      }t        |t        d      }|j                  |      }| j                  ||       | j                  |t         j                         | j                  |t         j                         | j                  |t
               | j                  |t
               | j                  |j                         | j                  t        t        |d       | j                  |j                         |       y)a  Ensure method convert_alpha() preserves the surface's class

        When Surface is subclassed, the inherited convert_alpha() method will
        return instances of the subclass. Non Surface fields are omitted,
        however. This includes instance attributes.
        )rZ   rZ   r   r   rC   r  N)r   r-   r.   r   r   r   r  r   r   r   r  rd   r6  r  r   r   )r   r   r<   r  r  s        r"   r  z%SurfaceSubtypeTest.test_convert_alpha=
  s     	) NN=(B7mXr:"c"c6>>2c6>>2c?3c?3**+.'38HI7r$   c                    d}t        dt        d      }|j                  d|      }| j                  ||       | j	                  |t
        j                         | j	                  |t
        j                         | j	                  |t                | j	                  |t                | j                  |j                         | j                  t        t        |d       | j                  |j                         |       y)a  Ensure method subsurface() preserves the surface's class

        When Surface is subclassed, the inherited subsurface() method will
        return instances of the subclass. Non Surface fields are uncopied,
        however. This includes instance attributes.
        r6   r   r   rC   r   r   r  N)r   r   r   r   r   r   r   r   r  rd   r6  r  r   r   r  s       r"   r  z"SurfaceSubtypeTest.test_subsurfaceS
  s     !h"5nnV]3c"c6>>2c6>>2c?3c?3**+.'38HI7r$   N)
r  r  r  r  r  r  r   r  r  r  r  r$   r"   r  r  
  s#    K8(8(8,8r$   r  c                   D   e Zd Z	 e  ej                         ej                  k(  Z	d Z
d Zd Zd Zd Zd Zd Z ej$                  ej&                   d	      d
        Z ej$                  ej&                   d	      d        Z ej$                  ej&                   d	      d        Z ej$                  ej&                   d	      d        Z ej$                  ej&                   d	      d        Z ej$                  ej&                   d	      d        Zy# e$ r dZY w xY w)SurfaceGetBufferTest)ignoresubprocess_ignorec                 x   |j                         \  }}|j                         }|j                         }|j                  }|j	                  d      }t
        sct        t        z  t        z  }|j                         ||z  k(  r	|t        z  }t        |      }	| j                  |	j                  d       | j                  |	j                  d       | j                  |	j                  d       | j                  |	j                  |       | j                  |	j                   d   |       | j                  |	j                   d   |       | j                  |	j"                  d   |       | j                  |	j"                  d   |       | j                  |	j$                  |       | j                  |	j&                  |       y y )Nr#  r7   ur   rR   )r   rJ   rJ  rS  r1  r3  PAI_ALIGNEDPAI_NOTSWAPPEDPAI_WRITEABLEPAI_FORTRANr4  r   twor5  typekinditemsizeshapestridesrG   rX   )
r   r<   s_ws_h
s_bytesizes_pitchs_pixelsrC  rG   inters
             r"   _check_interface_2Dz(SurfaceGetBufferTest._check_interface_2Dr
  sZ   ::<S^^%
++-$$ JJsO.0=@E{{}j 00$"1%EUYY*UXXq)U^^S1U^^Z8U[[^S1U[[^S1U]]1-z:U]]1-w7U[[%0UZZ2! r$   c                    |j                         \  }}|j                         }|j                         }|j                  }t	        |j                               }|dd g dk(  r| j                  rd}d}	nr|dz
  }d}	nj|dd g dk(  r| j                  rd}d}	nO|dz
  }d}	nG|dd g dk(  r| j                  rd}d}	n,|dz
  }d}	n$|dd g d	k(  r| j                  rd}d}	n	|d
z
  }d}	ny |j                  d      }
t        st        |
      }t        t        z  t        z  }| j                  |j                  d       | j                  |j                  d       | j                  |j                   d       | j                  |j"                  d       | j                  |j$                  d   |       | j                  |j$                  d   |       | j                  |j$                  d   d       | j                  |j&                  d   |       | j                  |j&                  d   |       | j                  |j&                  d   |	       | j                  |j(                  |       | j                  |j*                  ||z          y y )Nr   r   )r   r   r   rR   r  )r   r   rP   r7   )r   r   r   )rP   r   r   r   r&  r  )r   rJ   rJ  rS  rT  rj  	lilendianr1  r3  r4  r  r  r  r   r  r5  r  r  r  r  rG   rX   )r   r<   r  r  r  r  r  s_shiftsoffsetsteprC  r  rG   s                r"   _check_interface_3Dz(SurfaceGetBufferTest._check_interface_3D
  sD   ::<S^^%
++-$$' Aa=J&~~ $aa]k)~~ $aa]j(~~ $aa]k)~~ $a JJsO"1%E.0=@EUYY*UXXq)U^^S1U^^Q/U[[^S1U[[^S1U[[^Q/U]]1-z:U]]1-w7U]]1-t4U[[%0UZZF):; r$   c                    |j                         \  }}|j                         }|j                         }|j                  }|j	                         }|j                         }	|	|   sy ||   }
|
dz  }| j                  s||z
  dz
  }|j                  d|         }t        sGt        |      }t        t        z  t        z  }| j                  |j                  d       | j                  |j                  d       | j                  |j                   d       | j                  |j"                  d       | j                  |j$                  d   |       | j                  |j$                  d   |       | j                  |j&                  d   |       | j                  |j&                  d   |       | j                  |j(                  |       | j                  |j*                  ||z          y y )Nr   rR   rgbar7   r  r   )r   rJ   rJ  rS  rj  re  r  r1  r3  r4  r  r  r  r   r  r5  r  r  r  r  rG   rX   )r   r<   planer  r  r  r  r  r  s_masksalpha_shiftr  rC  r  rG   s                  r"   _check_interface_rgbaz*SurfaceGetBufferTest._check_interface_rgba
  s   ::<S^^%
++-$$<<>++- u~uo!~~&(1,F JJve}%"1%E.0=@EUYY*UXXq)U^^S1U^^Q/U[[^S1U[[^S1U]]1-z:U]]1-w7U[[%0UZZF):; r$   c                    | j                  t        j                  ddd             | j                  t        j                  ddd             | j                  t        j                  dt        j                  d             | j	                  t        j                  ddd             | j	                  t        j                  ddd             | j                  t        j                  ddd             | j	                  t        j                  ddd             | j                  t        j                  dt        j                  d             | j	                  t        j                  dt        j                  d             y )Nr!  r   r   r   rP   )r   r   rC   )r  r   r   r   r  r  s    r"   test_array_interfacez)SurfaceGetBufferTest.test_array_interface
  s     1!=>  2!>?  !LM  2!>?  2!>?  2!>?  2!>?  !LM  !LMr$   c                 Z   d}t        j                  |dd      }t        |j                               }g d}|dd |k(  s|dd |ddd   k(  r5|ddd   |dd	 z   }| j	                  t        j                  |dd|             t        j                  |dd
      }t        |j                               }g d}|dd |k(  s|dd |ddd   k(  r5|ddd   |dd	 z   }| j	                  t        j                  |dd
|             g d}| j	                  t        j                  |dd|             y)z.Test non-default color byte orders on 3D viewsr!  r   rC   )r)   rv   ru   r   Nr  r7   r   rP   )rv   ru   rt   r   )r   r   rT  re  r  )r   szr<   r  rr   s        r"   test_array_interface_masksz/SurfaceGetBufferTest.test_array_interface_masks
  s-    NN2q"%q{{}%(1Q<5 GAaLE$B$K$?AErENWQq\1E$$V^^B2u%EFNN2q"%q{{}%(1Q<5 GAaLE$B$K$?AErENWQq\1E$$V^^B2u%EF1  Ar5!ABr$   c                     g dg dg dg dfD ]L  }|D cg c]  }d|z  	 }}t        j                  dt         j                  d|      }| j                  |d       N y c c}w )	Nr   r   r   rP   r   r   rP   r   rP   r   r   r   r   r   r   rP   r)   r   r7   rC   r   )r   r   r   r   )r   shiftsr<   rr   s       r"   test_array_interface_alphaz/SurfaceGetBufferTest.test_array_interface_alpha  s\    %~~~V 	-F(./1TQY/E/vvEBA&&q!,	-/s   Ac                 &   g dg dg dg dfD ]{  }|D cg c]  }d|z  	 }}d|d<   t        d      D ]T  }t        j                  ddd	      }| j                  ||       t        j                  ddd
      }| j                  ||       V } y c c}w )Nr  r  r	  r
  r)   r   r   r  rP   rC   )r   r   r   r   )r   r  r<   rr   r  s        r"   test_array_interface_rgbz-SurfaceGetBufferTest.test_array_interface_rgb  s    %~~~V 	5F(./1TQY/E/E!Hq 5NN61b1**1e4NN61b1**1e4	5	5/s   Bznewbuf not implementedc                    ddl m} |j                  }t        j                  ddd      }|j                         } |||j                        }| j                  |j                  d       | j                  |j                  d u        | j                  |j                  |j                         | j                  |j                  d       | j                  |j                  d u        | j                  |j                  d u        | j                  |j                   d u        | j#                  |j$                         | j                  |j&                  |j(                          |||j*                        }| j                  |j                  d       | j                  |j                  d u        | j#                  |j$                          |||j,                        }| j                  |j                  d       | j                  |j                  d        |||j.                        }| j                  |j                  d       | j                  |j                  d u        | j                  |j                  |j                         | j                  |j                  d       | j                  |j                  |j                  f       | j                  |j                  d u        | j                  |j                   d u        | j#                  |j$                         | j                  |j&                  |j(                          |||j0                        }| j                  |j                  d       | j                  |j                  d u        | j                  |j                  d       |j3                  d      }|j                         } |||j                        }| j                  |j                  d       | j                  |j                  d u        | j                  |j                  |j                         | j                  |j                  d       | j                  |j                  d u        | j                  |j                  d u        | j                  |j                   d u        | j#                  |j$                         | j                  |j&                  |j(                          |||j4                        }| j                  |j                  d       | j                  |j                  d        |||j6                        }| j                  |j                  d       | j                  |j                  d        |||j8                        }| j                  |j                  d       | j                  |j                  d       y )	Nr   buftoolsr6   r  rC   rR   r+  )rR   rR   rR   r"  r   )pygame.tests.test_utilsr  Importerr   r   rK  PyBUF_SIMPLEr   ndimr   formatr@  r2  r  r  r  
suboffsetsr  readonlybufrS  PyBUF_WRITABLEPyBUF_FORMATPyBUF_NDPyBUF_STRIDESr   PyBUF_C_CONTIGUOUSPyBUF_F_CONTIGUOUSPyBUF_ANY_CONTIGUOUSr   r  r  r<   r'  r   r   s          r"   test_newbuf_PyBUF_flags_bytesz2SurfaceGetBufferTest.test_newbuf_PyBUF_flags_bytes  sC   4$$NN7Ar*LLNQ--.#D())Q'4(		T)*,-$ 1 12Q//0#D()$Q--.#3'Q))*#D())Q'188+.		T)*,-$ 1 12Q../#D()D)\\,'MMOQ--.#D())Q'4(		T)*,-$ 2 23Q334#D)Q334#D)Q556#D)r$   c                    ddl m} |j                  }t        j                  ddd      }|j                  d      } |||j                        }| j                  |j                  d       | j                  |j                  d u        | j                  |j                  |j                         | j                  |j                  d       | j                  |j                  d u        | j                  |j                  d u        | j                  |j                   d u        | j#                  |j$                         | j                  |j&                  |j(                         y )Nr   r  r  rC   r$  rR   )r  r  r  r   r   r1  r  r   r  r   r  r@  r2  r  r  r  r  r  r  r  rS  r   r  r  r<   r'  r   s         r"   test_newbuf_PyBUF_flags_0Dz/SurfaceGetBufferTest.test_newbuf_PyBUF_flags_0DY  s    	5$$NN7Ar*JJsOQ--.#D())Q'4(		T)*,-$ 1 12r$   c                    ddl m} |j                  }t        j                  ddd      }|j                  d      } |||j                        }| j                  |j                  d       | j                  |j                  d u        | j                  |j                  |j                         | j                  |j                  |j                                | j                  |j                  d u        | j                  |j                   d u        | j                  |j"                  d u        | j%                  |j&                         | j                  |j(                  |j*                          |||j,                        }| j                  |j                  d       | j                  |j                  d u        | j%                  |j&                          |||j.                        }| j                  |j                  d       | j                  |j                  d        |||j0                        }| j                  |j                  d       | j                  |j                  d u        | j                  |j                  |j                         | j                  |j                  |j                                | j                  |j                  |j3                         |j5                         z  f       | j                  |j                   d u        | j                  |j"                  d u        | j%                  |j&                         | j                  |j(                  |j*                          |||j6                        }| j                  |j                  d       | j                  |j                  d u        | j                  |j                   |j                         f       y )Nr   r  r  rC   r%  =IrR   )r  r  r  r   r   r1  r  r   r  r   r  r@  r2  r  rJ   r  r  r  r  r  r  rS  r  r  r  r   r   r   r'  s         r"   test_newbuf_PyBUF_flags_1Dz/SurfaceGetBufferTest.test_newbuf_PyBUF_flags_1Dm  s   4$$NN7Ar*JJsOQ--.#D())Q^^%564(		T)*,-$ 1 12Q//0#D()$Q--.#4(Q))*#D())Q^^%561;;=1<<>#A"CD		T)*,-$ 1 12Q../#D()Q^^%5$78r$   c                    ddl m} |j                  }t        j                  ddd      }|j                  d      } |||j                        }| j                  |j                  d       | j                  |j                  d u        | j                  |j                  |j                         | j                  |j                  |j                                | j                  |j                  d u        | j                  |j                   d u        | j                  |j"                  d u        | j%                  |j&                         | j                  |j(                  |j*                          |||j,                        }| j                  |j                  d       | j                  |j                  d u        | j                  |j                  |j                         | j                  |j                  |j                                | j                  |j                  |j/                                | j                  |j                   |j                         |j1                         f       | j                  |j"                  d u        | j%                  |j&                         | j                  |j(                  |j*                          |||j2                        }| j                  |j                  d       | j                  |j                  d       | j                  |j                   |j                         |j1                         f        |||j4                        }| j                  |j                  d       | j                  |j                  d       | j                  |j                   |j                         |j1                         f        |||j6                        }| j                  |j                  d       | j                  |j                  d        | j                  |j                   |j                         |j1                         f        |||j8                        }| j                  |j                  d       | j                  |j                  d        | j                  |j                   |j                         |j1                         f       | j;                  t<        |||j>                         | j;                  t<        |||j@                         |jC                  d      }|j                  d      } |||j,                        }| j                  |j                  d       | j                  |j                  d u        | j                  |j                  |j                         | j                  |j                  |j                                | j                  |j                  |j/                                | j                  |j                   |j                         |j1                         f       | j                  |j"                  d u        | j%                  |j&                         | j                  |j(                  |j*                          |||j4                        }| j                  |j                  d       | j                  |j                  d       | j;                  t<        |||j                         | j;                  t<        |||jD                         | j;                  t<        |||jF                         | j;                  t<        |||j>                         | j;                  t<        |||j@                         | j;                  t<        |||j6                         | j;                  t<        |||j8                         y )	Nr   r  r  rC   r#  r7   r*  r  )$r  r  r  r   r   r1  r  r   r  r   r  r@  r2  r  rJ   r  r  r  r  r  r  rS  r   r   rJ  PyBUF_RECORDS_ROPyBUF_RECORDSr"  r#  rd   BufferErrorr  r!  r   r  r  r$  s          r"   test_newbuf_PyBUF_flags_2Dz/SurfaceGetBufferTest.test_newbuf_PyBUF_flags_2D  s   4$$NN7Ar*JJsO Q--.#D())Q^^%564(		T)*,-$ 1 12Q../#D())Q^^%56!**,/Q^^%5q{{}$EF,-$ 1 12Q112#4(Q^^%5q{{}$EFQ../#4(Q^^%5q{{}$EFQ334#4(Q^^%5q{{}$EFQ556#4(Q^^%5q{{}$EF+xH4E4EF+xH4O4OP\\,'KKQ../#D())R__%67"++-0R__%6$FG,-$ 2 23Q../#4(+xH4I4IJ+xH4I4IJ+xH4K4KL+xH4E4EF+xH4O4OP+xH4O4OP+xH4Q4QRr$   c                    ddl m} |j                  }t        j                  ddd      }|j                         \  }}}}| j                  r|dk(  rd}d}	nd}d}	n|d	k(  rd}d}	nd}d}	|j                  d
      }
 ||
|j                        }|j                         \  }}||df}d|j                         |f}| j                  |j                  d       | j                  |j                  d u        | j                  |j                  |
j                          | j                  |j"                  d       | j                  |j$                  |       | j                  |j&                  |       | j                  |j(                  d u        | j+                  |j,                         | j                  |j.                  |j0                  |	z           ||
|j2                        }| j                  |j                  d       | j                  |j                  d       | j                  |j&                  |        ||
|j4                        }| j                  |j                  d       | j                  |j                  d       | j                  |j&                  |       | j7                  t8        ||
|j:                         | j7                  t8        ||
|j<                         | j7                  t8        ||
|j>                         | j7                  t8        ||
|j@                         | j7                  t8        ||
|jB                         | j7                  t8        ||
|jD                         | j7                  t8        ||
|jF                         y )Nr   r  r   r  rP   r)   rR   r  r7   ru   r&  r   r+  )$r  r  r  r   r   re  r  r1  r   r   rJ  r   r  r   r  r@  r2  r  r  r  r  r  r  r  rS  r-  r.  rd   r/  r  r  r  r  r!  r"  r#  )r   r  r  r<   rmaskgmaskbmaskamask
color_stepaddr_offsetr'  r   r  r  r  r  s                   r"   test_newbuf_PyBUF_flags_3Dz/SurfaceGetBufferTest.test_newbuf_PyBUF_flags_3D  s   4$$NN7Ar*%&[[]"ueU>> 

 

JJsOQ../zz|11aQ[[]J.#D())Q'%(G,,-$ 1 1K ?@Q112#3'G,Q../#3'G,+xH4I4IJ+xH4I4IJ+xH4K4KL+xH4E4EF+xH4O4OP+xH4O4OP+xH4Q4QRr$   c                    ddl m} |j                  }t        j                  ddd      }|j                         \  }}}}| j                  r|dk(  rd}nd}n
|dk(  rd}nd}|j                  d      }	 ||	|j                        }
|j                         \  }}||f}|j                         |j                         f}| j                  |
j                  d       | j                  |
j                  d u        | j                  |
j                   |	j"                         | j                  |
j$                  d	       | j                  |
j&                  |       | j                  |
j(                  |       | j                  |
j*                  d u        | j-                  |
j.                         | j                  |
j0                  |j2                  |z           ||	|j4                        }
| j                  |
j                  d       | j                  |
j                  d
       | j                  |
j(                  |        ||	|j6                        }
| j                  |
j                  d       | j                  |
j                  d
       | j                  |
j(                  |       | j9                  t:        ||	|j<                         | j9                  t:        ||	|j>                         | j9                  t:        ||	|j@                         | j9                  t:        ||	|jB                         | j9                  t:        ||	|jD                         | j9                  t:        ||	|jF                         | j9                  t:        ||	|jH                         y )Nr   r  r2  rP   r)   r7   ru   r)  rR   r+  )%r  r  r  r   r   re  r  r1  r   r   rJ   rJ  r   r  r   r  r@  r2  r  r  r  r  r  r  r  rS  r-  r.  rd   r/  r  r  r  r  r!  r"  r#  )r   r  r  r<   r3  r4  r5  r6  r8  r'  r   r  r  r  r  s                  r"   test_newbuf_PyBUF_flags_rgbaz1SurfaceGetBufferTest.test_newbuf_PyBUF_flags_rgba  s    	5$$NN7Ar*%&[[]"ueU>>  JJsOQ../zz|11.."AKKM1#D())Q'%(G,,-$ 1 1K ?@Q112#3'G,Q../#3'G,+xH4I4IJ+xH4I4IJ+xH4K4KL+xH4E4EF+xH4O4OP+xH4O4OP+xH4Q4QRr$   N)r  r  r  r4  	NameError__tags__r   get_sdl_byteorder
LIL_ENDIANr  r  r  r   r  r  r  r  r  r  HAVE_NEWBUFr%  r(  r+  r0  r9  r;  r  r$   r"   r  r  h
  sy   3 )((*f.?.??I34?<B<@	NC*-5 X__+++-EF9* G9*v X__+++-EF3 G3& X__+++-EF$9 G$9L X__+++-EFDS GDSL X__+++-EF0S G0Sd X__+++-EF.S G.SE  323s   D DDr  c                   |    e Zd Zd Zd Zg dZdZg dZddZddZ	dd	Z
dd
Zd Zd Zd Zd Zd Zd Zd Zd Zy)SurfaceBlendTestc                 @    t         j                  j                          y r   r  r  s    r"   r  zSurfaceBlendTest.setUpA      r$   c                 @    t         j                  j                          y r   r  r  s    r"   r  zSurfaceBlendTest.tearDownE  r  r$   )r(   )r6   rz   r~   r   )r   K   rO   r^  )rm      rO   rm   )r   rO   rm   r)   r  ))r'   rR   )r  rR   ))r  r   r7   )r  r7   ))r   r   r   ))r   r  r   ))r  r   r   )r  r   Nc                     || j                   }d}|r	|t        z  }t        j                  | j                  ||      }|dk(  r"|j                  |D cg c]  }|d d 	 c}       |S c c}w Nr   r   r   )_test_paletter   r   r   	surf_sizerb  r   rL  srcalpharc  rG   r0   r   s          r"   _make_surfacezSurfaceBlendTest._make_surface[  sj    ?((GXE~~dnneW=a<W5ae56 6s   A&c                     || j                   }|j                  |d   d       |j                  |d   d       |j                  |d   d       |j                  |d   d       y )	NrR   )r   r   r   r  r7   )r   r   r   r  r   )r   r  r   r  r   )r   r  r   r  rJ  rS   r  s      r"   _fill_surfacezSurfaceBlendTest._fill_surfacef  sZ    ?((G		'!*l+		'!*l+		'!*l+		'!*l+r$   c                 P    | j                  |||      }| j                  ||       |S r   )rN  rQ  )r   rL  rM  rc  r0   s        r"   _make_src_surfacez"SurfaceBlendTest._make_src_surfacen  s+    !!'8W=4)r$   c                    || j                   }|j                         dk(  r-|D cg c]"  }|j                  |j                  |            $ }}| j                  D ]a  \  }}| j                  |j                  |      ||   d|j                  |      ||   |j                         |j                         ||fz         c y c c}w )Nr   z(%s != %s: flags: %i, bpp: %i, posn: %s%s)rJ  r   r  r  _test_pointsr   r,   r   )r   r0   rc  msgr   posnr  s          r"   _assert_surfacez SurfaceBlendTest._assert_surfaces  s    ?((G#@GH1t~~dll1o6HGH(( 	GD!D!
:KK%AJNN$$$&	 Is   'C c                 	   | j                  d      | j                  d      | j                  dd      | j                  d      | j                  d      | j                  dd      g}| j                  d      | j                  d      | j                  dd      | j                  d      | j                  d      | j                  dd      g}ddd	 fd
dd fddd fddt        fddt        fg}|D ]p  }| j                  D cg c]"  }|j                  |j                  |            $ }}|D ]0  }|D ]'  \  }}	}
|j                  |j                  |	            }g }|D ]  }t        d      D cg c]  } |
||   ||          }}|j                         d   r|j                  |d          n|j                  d       |j                  |j                  |            }|j                  |        |j                  |	       |j                  |dt        t        |             | j                  ||d||j                         |j!                         fz         * 3 s | j                  d      }|j                         }t        j"                  |j%                         dd|d   |d   |d   |d   g      }|D ]  \  }}	}
g }| j                  D ]R  }t        d      D cg c]  } |
|	|   ||          }}|j                  d       |j                  t'        |             T |j                  |	       |j                  |dt        t        |             | j                  ||d|         | j                  d      }|j                         }t        |      dk(  r|D cg c]  }|dz	  	 }}n|D cg c]  }|dz  	 }}t        j"                  |j%                         dd|      }| j)                  |       t        j"                  |j%                         dd|      }|D ]  \  }}	}
g }| j                  D ]R  }t        d      D cg c]  } |
|	|   ||          }}|j                  d       |j                  t'        |             T |j                  |	       |j                  |dt        t        |             | j                  ||d|         y c c}w c c}w c c}w c c}w c c}w c c}w )Nr   r   TrM  rP   rC   r   r   r   rO   r)   c                      t        | |z   d      S Nr)   minr'  r   s     r"   <lambda>z2SurfaceBlendTest.test_blit_blend.<locals>.<lambda>      #a!eS/ r$   	BLEND_SUB)rO   r   r   rO   c                      t        | |z
  d      S Nr   maxr`  s     r"   ra  z2SurfaceBlendTest.test_blit_blend.<locals>.<lambda>      #a!eQ- r$   
BLEND_MULT)rO   rm   r   r   c                     | |z  dz   dz	  S Nr)   r   r  r`  s     r"   ra  z2SurfaceBlendTest.test_blit_blend.<locals>.<lambda>      AES=Q:N r$   	BLEND_MINr  	BLEND_MAXr   r)   r   r)   r   r)   r'   r  $, op: %s, src bpp: %i, src flags: %ir   r7   rR   , rt   )rS  rN  r_  rg  rJ  r  r  r   re  r  rS   r   r  r   rX  r   r   r   r   r   rQ  )r   sourcesdestinationsblendr  r   src_paletter  
blend_name	dst_coloropdcr  scr  rr   	src_colorpatms                      r"   test_blit_blendz SurfaceBlendTest.test_blit_blend  s   ""1%""2&""2"5""2&""2&""2"5
 q!r"rD1r"r"rD1
 +-IJ+-GH+-NO*C0*C0
  	CBFBTBTUQ3==Q8UKU# 16 -J	2s{{9'=>BA) $7<Qx@!R1r!u-@@==?1-HHRUOHHSMMM#++a.9$ HHY'HHS&
8SHT((.)3??+<cmmoNO		4 $$R(nnLLNArE!HeAha%(#K
 */ 	<%J	2A!// #	=B1XFR	!il3FFq"# HHYHHS&
0KHL  a2j\):;	< $$R(u:#%*+Q!V+E+%*+Q!V+E+nnS\\^QE:3nnS\\^QE:). 	<%J	2A!// #	=B1XFR	!il3FFq"# HHYHHS&
0KHL  a2j\):;	<k V A6 G ,+ Gs$   'S/S "S%%S*8S/
S4c                 	   | j                  d      | j                  d      | j                  dd      | j                  d      | j                  d      | j                  dd      g}| j                  d      | j                  d      | j                  dd      | j                  d      | j                  d      | j                  dd      g}ddd	 fd
dd fddd fddt        fddt        fg}|D ]O  }| j                  D cg c]"  }|j                  |j                  |            $ }}|D ]  }|D ]  \  }|j                  |j                              }	g }
|D ]p  }t        d      D cg c]  } |	|   ||          }}|j                         d   sd|d<   |j                  |j                  |            }|
j                  |       r |j                         |j                  |dt        t        |             | j                  ||
d||j                         |j!                         fz         	  R | j                  dd      }|j                         }t        j"                  |j%                         t&        d|d   |d   |d   |d   f      }|D ]  \  }| j                  D cg c]!  t)        fdt        d      D              # }
}|j                         |j                  |dt        t        |             | j                  ||
d|         t        j"                  dt&        d      }t        j"                  dt&        d      }t        j"                  dt&        d      }|j                  d       |j                  d       |j+                  d       }|j+                  d       }|j                  |dt,               |j                  d       |j                  d!d        t        d      D ]p  }t        d"      D ]`  }| j/                  |j1                  ||f      |j1                  ||f      d#|j1                  ||f      |j1                  ||f      ||fz         b r y c c}w c c}w c c}w )$Nr   r   TrZ  rP   rC   BLEND_RGBA_ADDr[  c                      t        | |z   d      S r]  r^  r`  s     r"   ra  z7SurfaceBlendTest.test_blit_blend_rgba.<locals>.<lambda>      s1q5# r$   BLEND_RGBA_SUBc                      t        | |z
  d      S re  rf  r`  s     r"   ra  z7SurfaceBlendTest.test_blit_blend_rgba.<locals>.<lambda>      s1q5!} r$   BLEND_RGBA_MULTr   r"  rO   r)   c                     | |z  dz   dz	  S rk  r  r`  s     r"   ra  z7SurfaceBlendTest.test_blit_blend_rgba.<locals>.<lambda>      Q#RS?S r$   BLEND_RGBA_MINro  BLEND_RGBA_MAXr   r   r)   r'   r  rp  r7   rR   r   c              3   <   K   | ]  } |   |           y wr   r  )r  r  rw  rx  r{  s     r"   r  z8SurfaceBlendTest.test_blit_blend_rgba.<locals>.<genexpr>  s      Gb1y|4Gs   rq  )r   r6   )rR   r7   r   r   )rZ   rz   r&   r6   )r7   r   r   r   ))   rC   r_  r  r6   z%s != %s at (%i, %i))rS  rN  r_  rg  rJ  r  r  r   re  r  rS   r   r  r   rX  r   r   r   r   r   r   r   r  r   r,   )r   rr  rs  rt  r  r   ru  r  rv  ry  r  rz  r  rr   r{  tstsubsrcsubdstr  r  rw  rx  s                 `     @@r"   test_blit_blend_rgbaz%SurfaceBlendTest.test_blit_blend_rgba  sl   ""1%""2&""2"5""2&""2&""2"5
 q!r"rD1r"r"rD1
 02NO02LM 02ST/5/5
  	CBFBTBTUQ3==Q8UKU# 16 -J	2s{{9'=>BA) $7<Qx@!R1r!u-@@"}}q1#&AaDMM#++a.9$ HHY'HHS&
8SHT((.)3??+<cmmoNO		8 $$R$$7nnLLNHb58U1XuQxq*R
 */ 	<%J	2 "&!3!3 GeAhGGA  HHYHHS&
0KHL  a2j\):;	< nnWh3nnWh3nnWh3!"--FF.A!"!<0q 	A2Y   JJ1v&JJ1v&*zz1a&)3::q!f+=q!DE	i V A6s   'Q=2R;&Rc                    	 	 	 	 	 	 dd} | j                    |t        j                  dddd      t        j                  dddd               | j                    |t        j                  dddd      t        j                  dddd               | j                    |t        j                  dddd      t        j                  dddd               | j                    |t        j                  dddd      t        j                  dddd               | j                    |t        j                  dddd      t        j                  dddd               | j                    |t        j                  dddd      t        j                  dddd               | j                    |t        j                  dddd      t        j                  dddd               | j                    |t        j                  dddd      t        j                  dddd               | j                    |t        j                  dddd      t        j                  dddd               | j                    |t        j                  dddd      t        j                  dddd               | j                    |t        j                  d	d	d	d	      t        j                  dddd               | j                    |t        j                  dddd      t        j                  d	d	d	d	               | j                    |t        j                  d	d	d	d	      t        j                  d	d	d	d	               | j                    |t        j                  d
d
d
d
      t        j                  dddd               | j                    |t        j                  dddd      t        j                  d
d
d
d
               | j                    |t        j                  d
d
d
d
      t        j                  d
d
d
d
               | j                    |t        j                  dddd      t        j                  dddd               | j                    |t        j                  dddd      t        j                  dddd               | j                    |t        j                  dddd      t        j                  dddd              | j                  t        |t        j                  dddd      t        j                  dddd      dd        | j                    |t        j                  dddd      t        j                  dddd      dd         | j                    |t        j                  dddd      t        j                  dddd      dd         | j                    |t        j                  dddd      t        j                  dddd      ddd         | j                    |t        j                  dddd      t        j                  dddd      ddd         | j                    |t        j                  dddd      t        j                  dddd      dddd         | j                    |t        j                  dddd      t        j                  dddd      ddddd         | j                    |t        j                  dddd      t        j                  dddd      ddddd         | j                    |t        j                  dddd      t        j                  dddd      dddddd         | j                    |t        j                  dddd      t        j                  dddd      ddd         | j                    |t        j                  dddd      t        j                  dddd      ddd         | j                    |t        j                  dddd      t        j                  dddd      dddd        y ) NTc           	      x   |dk(  rAt        j                  |d|      }| |g}	|j                  |	       |j                  |	d          nW|r-t        j                  |t        |      }|j                  |        n(t        j                  |d|      }|j                  |        |dk(  rAt        j                  |d|      }
| |g}	|
j                  |	       |
j                  |	d          nW|r-t        j                  |t        |      }
|
j                  |       n(t        j                  |d|      }
|
j                  |       |
j                  |dt               |
j                  t        t        |d   dz              t        t        |d   dz              f      }| j                  dk(  r|}n| j                  dk(  r| }nt        j                  | j                  |j                  z   |j                  dz   | j                  z  dz	  z
  | j                  |j                  z   |j                  dz   | j                  z  dz	  z
  | j                  |j                  z   |j                  dz   | j                  z  dz	  z
  | j                  |j                  z   |j                  dz   | j                  z  dz	  z
        }|sd|_
        ||fS )Nr   r   rR   r'   r  g       @r)   )r   r   rb  rS   r   r   BLEND_PREMULTIPLIEDr,   rA  rm  r'  rU   r=   r   r   )src_coldst_colsrc_sizedst_sizesrc_bit_depthdst_bit_depthsrc_has_alphadst_has_alphar  rc  r  
actual_colexpected_cols                r"   test_premul_surfzHSurfaceBlendTest.test_blit_blend_premultiplied.<locals>.test_premul_surf8  sG    !nnXq-@"G,($nnXxG!nnXq-@!!nnXq-@"G,($nnXxG!nnXq-@!HHS&0CHDU8A;,-.E(1+:K4L0MNJ
 yyA~&c!&  &||YY*wyy1}		.IQ.NOYY*wyy1}		.IQ.NOYY*wyy1}		.IQ.NOYY*wyy1}		.IQ.NO	  !!$ *--r$   rZ   r&   r   r  r7   r  r   rm   r)   r'   )r  r  rz   r   r  )r   r  )E   r  )r  r  r  F)r  r  r  )r  r  r  r  rP   )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  r  rC   rC   TT)r   r   rU   rd   r  )r   r  s     r"   test_blit_blend_premultipliedz.SurfaceBlendTest.test_blit_blend_premultiplied7  s    8	.v 	fll2r1b96<<BPQSU;VW	
 	fll1aA6RQPR8ST	
 	fll2r1b96<<1aQR;ST	
 	fll1aA6Q1a8PQ	
 	fll1aA6RQPR8ST	
 	fll2r1b96<<1aQR;ST	
 	fll1aA6Q1a8PQ	
 	fll1aA6RQPR8ST	
 	fll2r1b96<<1aQR;ST	
 	fll1aA6Q1a8PQ	
 	S#sC0&,,r2q"2M	
 	RQ+V\\#sC-M	
 	S#sC0&,,sCc2R	
 	S#sC0&,,r2q"2M	
 	RQ+V\\#sC-M	
 	S#sC0&,,sCc2R	
 	S#sC0&,,r2q"2M	
 	RQ+V\\#sC-M	
 	S#sC0&,,sCc2R	
 	LLc3,LLc3, 	 	
 	RQ+RQ+		
 	RQ+RQ+!!		
 	RQ,RQ+!!"	
 	RQ+RQ,!!#	
 	RQ,RQ,!!##		
 	RQ,RQ,!! "#
	
 	RQ,RQ,!! #"
	
 	RQ,RQ,!!  ##		
 	RQ,RQ,!!	
 	RQ,RQ,!!	
 	RQ,RQ,!!		
r$   c                 r   d}d}t        j                  ddd      }|j                  t         j                  ||      }| j	                  t        j
                  d      |       | j	                  |j                  d      d	       | j	                  |j                  d
      |       t        j                  d      }t        j                  d      }| j                  ||       t        j                  ddd      }|j                  |       |j                  t        j
                  dddd            }| j	                  |j                  d      |       | j	                  |j                  d      |       |j                  |dt         j                         | j	                  |j                  d      |       | j	                  |j                  d      |       |j                  |dt         j                         | j	                  |j                  d      |       | j	                  |j                  d      |       y)z%test that an oversized rect works ok.r   )rR   rR   rz   rz   r   r   rC   r   )rR   rR   r   r   r'   r(   r   blackredrY   rR   r6   r   )r   r  )r   r  r6   rR   )r   r   r6   rR   N)r   r   rS   r   r   r8   r,   rU   r   r   BLEND_RGB_ADD)	r   r   r   r   r=   r  r  r0   r_  s	            r"   test_blit_blend_big_rectz)SurfaceBlendTest.test_blit_blend_big_rectO  s   ^^FAr*GG&"2"2%dGK\2A66*N;6*E2W%ll5!E3'~~h2.		%//&++aB":;V,e4V,e4S.&*>*>?V,e4V,e4S-)=)=>V,e4V,e4r$   c                    | j                  dd      }|j                  d       |j                  d        | j                  dd      }|j                  |dt               | j                  |j                  d      d       y )NrC   TrZ  )r   r   r   r^  r'   r  r(   )rN  rS   r   r   r  r   r,   )r   r  r  s      r"   test_GET_PIXELVALSz#SurfaceBlendTest.test_GET_PIXELVALSl  sq    
   d 3 d  d 3fN;F+^<r$   c                    | j                  d      | j                  d      | j                  dd      | j                  d      | j                  d      | j                  dd      g}ddd	 fd
dd fddd fddt        fddt        fg}|D ]G  }| j                  D cg c]"  }|j	                  |j                  |            $ }}|D ]  \  }}}|j	                  |j                  |            }	| j                  |       g }
|D ]  }t        d      D cg c]  } |||   |	|          }}|j                         d   r|j                  |d          n|j                  d       |j	                  |j                  |            }|
j                  |        |j                  |t        t        |             | j                  ||
d|        
 J y c c}w c c}w )Nr   r   TrZ  rP   rC   r   r[  c                      t        | |z   d      S r]  r^  r`  s     r"   ra  z2SurfaceBlendTest.test_fill_blend.<locals>.<lambda>  rb  r$   rc  c                      t        | |z
  d      S re  rf  r`  s     r"   ra  z2SurfaceBlendTest.test_fill_blend.<locals>.<lambda>  rh  r$   ri  r  c                     | |z  dz   dz	  S rk  r  r`  s     r"   ra  z2SurfaceBlendTest.test_fill_blend.<locals>.<lambda>  rl  r$   rm  ro  rn  r   r)   r  rq  rN  r_  rg  rJ  r  r  rQ  r   re  r  rS   r  r   rX  r   rs  rt  r  r   dst_paletterv  
fill_colorrx  fcr  ry  r  s                r"   test_fill_blendz SurfaceBlendTest.test_fill_blendx  s   q!r"rD1r"r"rD1
 +-IJ+-GH+-NO*C0*C0
   	@CBFBTBTUQ3==Q8UKU.3 @*
J]]3;;z#:;""3'%  B388<aBqE2a5)<A<}}q)Ackk!n5AHHQK  76:3NO$$S!r*->?@	@U =s   'GG
c                 z   | j                  d      | j                  d      | j                  dd      | j                  d      | j                  d      | j                  dd      g}ddd	 fd
dd fddd fddt        fddt        fg}|D ]$  }| j                  D cg c]"  }|j	                  |j                  |            $ }}|D ]  \  }}}|j	                  |j                  |            }	| j                  |       g }
|D ]p  }t        d      D cg c]  } |||   |	|          }}|j                         d   sd|d<   |j	                  |j                  |            }|
j                  |       r |j                  |t        t        |             | j                  ||
d|         ' y c c}w c c}w )Nr   r   TrZ  rP   rC   r  r[  c                      t        | |z   d      S r]  r^  r`  s     r"   ra  z7SurfaceBlendTest.test_fill_blend_rgba.<locals>.<lambda>  r  r$   r  c                      t        | |z
  d      S re  rf  r`  s     r"   ra  z7SurfaceBlendTest.test_fill_blend_rgba.<locals>.<lambda>  r  r$   r  r  c                     | |z  dz   dz	  S rk  r  r`  s     r"   ra  z7SurfaceBlendTest.test_fill_blend_rgba.<locals>.<lambda>  r  r$   r  ro  r  r   r   r)   r  rq  r  r  s                r"   test_fill_blend_rgbaz%SurfaceBlendTest.test_fill_blend_rgba  s   q!r"rD1r"r"rD1
 02NO02LM 02ST/5/5
   	@CBFBTBTUQ3==Q8UKU.3 @*
J]]3;;z#:;""3'%  B388<aBqE2a5)<A<==?1-"!ckk!n5AHHQK  76:3NO$$S!r*->?@	@U =s   'F3F8
c                    t        j                  dt         j                  d      }|j                  t        j                  dddd             |j                         }| j                  |j                  d      t        j                  dddd             t        j                  dt         j                  d      }|j                  t        j                  dddd             |j                         }| j                  |j                  d      t        j                  dddd             t        j                  ddd      }|j                  t        j                  dddd             | j                  t              5  |j                          d	d	d	       g d
}|D ]  \  }}}	t        d      D ]  }
| j                  |||	|
      5  t        j                  dt         j                  d      }|j                  t        j                  |||	|
             |j                         }| j                  |j                  d      t	        |dz   |
z  dz	  |dz   |
z  dz	  |	dz   |
z  dz	  |
             d	d	d	         y	# 1 sw Y   xY w# 1 sw Y   xY w)z+Ensure that .premul_alpha() works correctlyrN   rC   r)   rO   r   r   r  r   N))rm   rz   J   L   S   rP   )   r   r  )r  r   r  r  )r  r      )rJ  rz   r  )r8     r  )rn  rw  r~   )   Y   r  )   r  r:  )r  r  r  )r=   r   r   r'  rY   r  rR   r   )r   r   r   rS   rU   premul_alphar   r,   rd   re   r   r  )r   r   r  r   r  invalid_surftest_colorsr=   r   r   r'  r0   s               r"   test_surface_premul_alphaz*SurfaceBlendTest.test_surface_premul_alpha  s%    ^^J<
S#sC01??$2FLLc3PS4TU ^^J<
S#sC01??$2FLLc3PS4TU ~~j!R8&,,sCc:;z* 	(%%'	(
 # 	GAq!3Z \\Aa1\5 !>>(FOORHDIIfll1aA67,,.D$$F+!eq[Q.!eq[Q.!eq[Q.		 	'	( 	(* s   :I5B%J5I>J
FNr   )Nr-  )r  r  r  r  r  rJ  rK  rU  rN  rQ  rS  rX  r~  r  r  r  r  r  r  r  r  r$   r"   rB  rB  @  sg    M I	L	,
(W<rUnV
p5:
= @D@@3r$   rB  c                   
   e Zd ZdZd Zd Zg dZdZddZddZ	d	 Z
d
 Z ej                  d ej                         v d      d        Z ej                  d ej                         v d      d        Zd Zd Zd Zd Zd Zy)SurfaceSelfBlitTestziBlit to self tests.

    This test case is in response to https://github.com/pygame/pygame/issues/19
    c                 @    t         j                  j                          y r   r  r  s    r"   r  zSurfaceSelfBlitTest.setUp  rD  r$   c                 @    t         j                  j                          y r   r  r  s    r"   r  zSurfaceSelfBlitTest.tearDown  r  r$   )r(   )r)   r   r   r   ro  )r  r  Nc                 r    || j                   }|j                  |d          |j                  |d   d       y )NrR   r7   )rR   r7   rR   r7   rP  r  s      r"   rQ  z!SurfaceSelfBlitTest._fill_surface   s4    ?((G		'!*		'!*l+r$   c                     || j                   }d}|r	|t        z  }t        j                  | j                  ||      }|dk(  r"|j                  |D cg c]  }|d d 	 c}       | j                  ||       |S c c}w rI  )rJ  r   r   r   rK  rb  rQ  rL  s          r"   rN  z!SurfaceSelfBlitTest._make_surface  sz    ?((GXE~~dnneW=a<W5ae564) 6s   A8c                 @   |j                         \  }}t        |      D ]}  }t        |      D ]m  }| j                  |j                  ||f      |j                  ||f      d|j                  ||f      |j                  ||f      |j	                         fz         o  y )Nz%s != %s, bpp: %i)r   r   r   r,   r   )r   r'  r   r  r  r  r  s          r"   _assert_samez SurfaceSelfBlitTest._assert_same  s    zz|1q 		A1X   HHaV$HHaV$+88QF+QXXq!f-=q}}OP			r$   c           
      B   d}d}d}ddg}g d}t        j                  dt        d      g}t        j                  ddd      }|j                  d       |j	                  |       t        j                  ddd      }|j                  d	       |j	                  |       |D ]~  }|D ]w  \  }}	}
}}|j                  |       |j                  |d
       |j                  |d       |j                  ||
|f||	ddf       | j                  |j                  |      |       y  y )Nr(   )r^  r  rC   r)   r  ))r   r   rR   r   )r   r   )r   r   1   rR   )r  r7   )r   r   r  r  )r  r  )r  r   r   rR   r  )r  r   r   r  )r   r  rN   rC   r   r)   )r   rR   r   )r   r   r   r   )r   r   r   r   r   )
r   r   r   r   r  r   rS   r   r   r,   )r   bgc
rectc_leftrectc_rightcolorsoverlapssurfsr0   s_xs_yd_xd_y	test_posns                r"   test_overlap_checkz&SurfaceSelfBlitTest.test_overlap_check  s    '
*&(:;
 
Hb9:~~j!R0sT~~j!R0)$T 	FD19 F-S#sI		#		+7		*n5		$c
S#r2,>?  Y!7EF	Fr$   ppc64lezknown ppc64le issuec                 t   t         j                  j                  d       g d}|D ]  }| j                  |      }|j	                  | j
                  d          |j                  |d       g }| j
                  D ]3  }|j                  |j                  |            }|j                  |       5 |d   d   |d   d   |d   d   df|d<   | j                  dd|	      }|j                  |d       |j                  d        | j                  |      }|j                  |d
       | j                  ||        y )NrO   r   rI  rR   r   r   r   r7   rC   TrM  rc  r'   )r   r-   r.   rN  r   rJ  r   r  r  r  r   r  r   bitsizesrL  r0   r  r   tmpr  s           r"   test_colorkeyz!SurfaceSelfBlitTest.test_colorkeyA  s'    		*" 	*G%%g.Dd0034IIdF#A'' NN4<<?3 aDGQqT!Wad1gq1AaD$$R$$BCHHS&!MM$%%g.DIIc6"dD)	*r$   c                 :   t         j                  j                  d       g d}|D ]  }| j                  |      }|j	                  d       |j                  |d       g }| j                  D ]@  }|j                  |j                  |            }|j                  |d   |d   |d   df       B | j                  dd	|
      }|j                  |d       |j	                  d        | j                  |      }|j                  |d       | j                  ||        y )Nr  rI  r^  r  r   rR   r7   rC   Tr  r'   )r   r-   r.   rN  r   r   rJ  r  r  r  r  r  s           r"   test_blanket_alphaz&SurfaceSelfBlitTest.test_blanket_alphaX  s    		*" 	*G%%g.DNN3IIdF#A'' 2NN4<<?3!A$!adC012 $$R$$BCHHS&!MM$%%g.DIIc6"dD)	*r$   c                     ddg}|D ]^  }| j                  |d      }| j                  |d      }|j                  |d       |j                  |d       | j                  ||       ` y )Nr   rC   TrZ  r  )rN  r   r  )r   r  rL  r0   r  s        r"   test_pixel_alphaz$SurfaceSelfBlitTest.test_pixel_alpham  sp    8 	*G%%g%=D%%g%=DIIdF#IIdF#dD)	*r$   c           
      d   g d}g d}|D ]  }| j                  |      }| j                  |      }|D ]z  }| j                  |       | j                  |       |j                  |dt        t        |             |j                  |dt        t        |             | j                  ||       |  y )NrI  )r   rc  ri  rm  rn  r  r  rN  rQ  r   r  r   r  r   r  blendsrL  r0   r  rt  s          r"   
test_blendzSurfaceSelfBlitTest.test_blendv  s    "S 	.G%%g.D%%g.D .""4(""4(		$gfe6L	M		$gfe6L	M!!$-.	.r$   c           
      l   ddg}g d}|D ]  }| j                  |d      }| j                  |d      }|D ]z  }| j                  |       | j                  |       |j                  |dt        t        |             |j                  |dt        t        |             | j                  ||       |  y )Nr   rC   )r  r  r  r  r  TrZ  r  r  r  r  s          r"   test_blend_rgbaz#SurfaceSelfBlitTest.test_blend_rgba  s    8
   	.G%%g%=D%%g%=D .""4(""4(		$gfe6L	M		$gfe6L	M!!$-.	.r$   c                 F   | j                  dd      }|j                         }|j                  |d       |j                  d      }|j                  |d       ~| j	                  ||       d }|j                  d      }| j                  t        j                  |||       y )	NrC   TrZ  r  )r   r   r  r  r'   c                 (    | j                  |d       y )Nr'   )r   )dr<   s     r"   do_blitz4SurfaceSelfBlitTest.test_subsurface.<locals>.do_blit  s    FF1fr$   r   )rN  r   r   r   r  rd   r   r  )r   r0   r  subr  s        r"   r  z#SurfaceSelfBlitTest.test_subsurface  s    !!"t!4yy{		$ool+v$%
	 ool+&,,s;r$   c                     t        j                  dt         j                  d      }| j                  |j	                         d       |j                         }| j                  |j	                         d       y)z;issue 581: alpha of surface copy with SRCALPHA is set to 0.r  rC   r)   N)r   r   r   r   r   r   rf   s      r"   test_copy_alphaz#SurfaceSelfBlitTest.test_copy_alpha  sQ    ~~h<)3/		*C0r$   r   r  )r  r  r  r  r  r  rJ  rK  rQ  rN  r  r  r  r  r  unamer  r  r  r  r  r  r  r  r$   r"   r  r    s    
 GMI,
FD X__Y.(.."224IJ* K*, X__Y.(.."224IJ* K*(*..&<&1r$   r  c                       e Zd Zd Zd Zd Zy)SurfaceFillTestc                 @    t         j                  j                          y r   r  r  s    r"   r  zSurfaceFillTest.setUp  r  r$   c                 @    t         j                  j                          y r   r  r  s    r"   r  zSurfaceFillTest.tearDown  r  r$   c           	         t         j                  j                  d      }|j                  dd       |j                  dd       |j                  dd       |j                  dd       |j	                  d       |j                  d	d
d       |j                  d	dt         j
                         |j                  ddt         j                         |j                  ddt         j                         |j                  ddt         j                         |j                  ddt         j                         |j                  d	dt         j                         |j                  ddt         j                         |j                  ddt         j                         |j                  ddt         j                         |j                  ddt         j                         |j                  d	dt         j                         |j                  ddt         j                          |j                  ddt         j"                         |j                  ddt         j$                         |j                  d	dt         j&                         t         j                  j)                          t+        ddd       D ]9  }| j-                  |j/                  d |f      |j/                  d!d|z
  f             ; y )"Nr   rt  )r   r   rl   r!  )rl   r!  rl   r!  r   )rl   r   rl   r!  )r   r!  rl   r!  )r   r   rl   r   )r)   r   r   r   )rJ  r   rl   rz   r   )rJ  rz   rl   rz   )r   r   r   r   )rJ  r~   rl   rz   )r   r  r  r   )rJ  r   rl   rz   )rJ  x   rl   rz   )r   r   r   r   )rJ  rG  rl   rz   )rJ     rl   rz   )rJ     rl   rz   )rJ  r!  rl   rz   )rJ  i  rl   rz   )rJ  ru  rl   rz   )rJ  J  rl   rz   )rJ  ih  rl   rz   )rJ  i  rl   rz   )rJ  i  rl   rz   )rJ  rz  rl   rz   r   r   r6   r  )r   r-   r.   rS   r9   r   rc  ri  rm  rn  r  r  r  r  r  r  BLEND_RGB_SUBBLEND_RGB_MULTBLEND_RGB_MINBLEND_RGB_MAXflipr   r   r,   )r   screenr  s      r"   r   zSurfaceFillTest.test_fill  s;   ((4 	K!12K!56K!34K!34 	() 	$&7;$&8&:J:JK&(:F<L<LM$&8&:K:KL&(;V=M=MN$&96;K;KL$&96;P;PQ&(;V=R=RS$&96;Q;QR&(;V=R=RS$&96;P;PQ$&96;O;OP&(;V=Q=QR$&96;P;PQ&(;V=Q=QR$&96;O;OP 	 q#r" 	TAV]]B73V]]Cq>5RS	Tr$   N)r  r  r  r  r  r   r  r$   r"   r  r    s    $Tr$   r  __main__)r^   r  pygame.testsr   r  r   r    pygame.tests.test_utils.arrinterImportErrorr<  r   pygame.localsrR  r   r  r8  r;  ctypespython_implementationr3  TestCaser
   r  r  r  r  rB  r  r  r  mainr  r$   r"   <module>r     s)   	  #
	2   *  	  
2H224
4zJh'' zJzO$h'' O$da:(++ a:H/Y8** Y8xUS8,, USpm
x(( m
`~1(++ ~1B+Th'' +T\ zHMMO i~ 	Y 		s   D DD