blit_test.py 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. import unittest
  2. import pygame
  3. from pygame.locals import *
  4. class BlitTest( unittest.TestCase ):
  5. def test_SRCALPHA( self ):
  6. """ SRCALPHA tests.
  7. """
  8. #blend(s, 0, d) = d
  9. s = pygame.Surface((1,1), SRCALPHA, 32)
  10. s.fill((255, 255,255, 0))
  11. d = pygame.Surface((1,1), SRCALPHA, 32)
  12. d.fill((0, 0,255, 255))
  13. s.blit(d, (0,0))
  14. self.assertEqual(s.get_at((0,0)), d.get_at((0,0)) )
  15. #blend(s, 255, d) = s
  16. s = pygame.Surface((1,1), SRCALPHA, 32)
  17. s.fill((123, 0, 0, 255))
  18. s1 = pygame.Surface((1,1), SRCALPHA, 32)
  19. s1.fill((123, 0, 0, 255))
  20. d = pygame.Surface((1,1), SRCALPHA, 32)
  21. d.fill((10, 0,0, 0))
  22. s.blit(d, (0,0))
  23. self.assertEqual(s.get_at((0,0)), s1.get_at((0,0)) )
  24. #TODO: these should be true too.
  25. #blend(0, sA, 0) = 0
  26. #blend(255, sA, 255) = 255
  27. #blend(s, sA, d) <= 255
  28. def test_BLEND( self ):
  29. """ BLEND_ tests.
  30. """
  31. #test that it doesn't overflow, and that it is saturated.
  32. s = pygame.Surface((1,1), SRCALPHA, 32)
  33. s.fill((255, 255,255, 0))
  34. d = pygame.Surface((1,1), SRCALPHA, 32)
  35. d.fill((0, 0,255, 255))
  36. s.blit(d, (0,0), None, BLEND_ADD)
  37. #print "d %s" % (d.get_at((0,0)),)
  38. #print s.get_at((0,0))
  39. #self.assertEqual(s.get_at((0,0))[2], 255 )
  40. #self.assertEqual(s.get_at((0,0))[3], 0 )
  41. s.blit(d, (0,0), None, BLEND_RGBA_ADD)
  42. #print s.get_at((0,0))
  43. self.assertEqual(s.get_at((0,0))[3], 255 )
  44. # test adding works.
  45. s.fill((20, 255,255, 0))
  46. d.fill((10, 0,255, 255))
  47. s.blit(d, (0,0), None, BLEND_ADD)
  48. self.assertEqual(s.get_at((0,0))[2], 255 )
  49. # test subbing works.
  50. s.fill((20, 255,255, 0))
  51. d.fill((10, 0,255, 255))
  52. s.blit(d, (0,0), None, BLEND_SUB)
  53. self.assertEqual(s.get_at((0,0))[0], 10 )
  54. # no overflow in sub blend.
  55. s.fill((20, 255,255, 0))
  56. d.fill((30, 0,255, 255))
  57. s.blit(d, (0,0), None, BLEND_SUB)
  58. self.assertEqual(s.get_at((0,0))[0], 0 )
  59. def make_blit_list(self, num_surfs):
  60. blit_list = []
  61. for i in range(num_surfs):
  62. dest = (i * 10, 0)
  63. surf = pygame.Surface((10, 10), SRCALPHA, 32)
  64. color = (i * 1, i * 1, i * 1)
  65. surf.fill(color)
  66. blit_list.append((surf, dest))
  67. return blit_list
  68. def test_blits(self):
  69. NUM_SURFS = 255
  70. PRINT_TIMING = 0
  71. dst = pygame.Surface((NUM_SURFS * 10, 10), SRCALPHA, 32)
  72. dst.fill((230, 230, 230))
  73. blit_list = self.make_blit_list(NUM_SURFS)
  74. def blits(blit_list):
  75. for surface, dest in blit_list:
  76. dst.blit(surface, dest)
  77. from time import time
  78. t0 = time()
  79. results = blits(blit_list)
  80. t1 = time()
  81. if PRINT_TIMING:
  82. print("python blits: %s" % (t1-t0))
  83. dst.fill((230, 230, 230))
  84. t0 = time()
  85. results = dst.blits(blit_list)
  86. t1 = time()
  87. if PRINT_TIMING:
  88. print("Surface.blits :%s" % (t1-t0))
  89. # check if we blit all the different colors in the correct spots.
  90. for i in range(NUM_SURFS):
  91. color = (i * 1, i * 1, i * 1)
  92. self.assertEqual(dst.get_at((i * 10, 0)), color)
  93. self.assertEqual(dst.get_at(((i * 10) + 5, 5)), color)
  94. self.assertEqual(len(results), NUM_SURFS)
  95. t0 = time()
  96. results = dst.blits(blit_list, doreturn = 0)
  97. t1 = time()
  98. if PRINT_TIMING:
  99. print("Surface.blits doreturn=0: %s" % (t1-t0))
  100. self.assertEqual(results, None)
  101. t0 = time()
  102. results = dst.blits(((surf, dest) for surf, dest in blit_list))
  103. t1 = time()
  104. if PRINT_TIMING:
  105. print("Surface.blits generator: %s" % (t1-t0))
  106. def test_blits_not_sequence(self):
  107. dst = pygame.Surface((100, 10), SRCALPHA, 32)
  108. self.assertRaises(ValueError, dst.blits, None)
  109. def test_blits_wrong_length(self):
  110. dst = pygame.Surface((100, 10), SRCALPHA, 32)
  111. self.assertRaises(ValueError, dst.blits, [pygame.Surface((10, 10), SRCALPHA, 32)])
  112. def test_blits_bad_surf_args(self):
  113. dst = pygame.Surface((100, 10), SRCALPHA, 32)
  114. self.assertRaises(TypeError, dst.blits, [(None, None)])
  115. def test_blits_bad_dest(self):
  116. dst = pygame.Surface((100, 10), SRCALPHA, 32)
  117. self.assertRaises(TypeError, dst.blits, [(pygame.Surface((10, 10), SRCALPHA, 32), None)])
  118. if __name__ == '__main__':
  119. unittest.main()