test_tb_geometry.cpp 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. // ================================================================================
  2. // == This file is a part of Turbo Badger. (C) 2011-2014, Emil Segerås ==
  3. // == See tb_core.h for more information. ==
  4. // ================================================================================
  5. #include "tb_test.h"
  6. #include "tb_geometry.h"
  7. #ifdef TB_UNIT_TESTING
  8. using namespace tb;
  9. TB_TEST_GROUP(tb_geometry)
  10. {
  11. TB_TEST(TBRegion_include)
  12. {
  13. TBRegion region;
  14. TB_VERIFY(region.IncludeRect(TBRect(10, 10, 100, 100)));
  15. TB_VERIFY(region.IncludeRect(TBRect(50, 50, 100, 100)));
  16. TB_VERIFY(region.GetNumRects() == 3);
  17. TB_VERIFY(region.GetRect(0).Equals(TBRect(10, 10, 100, 100)));
  18. TB_VERIFY(region.GetRect(1).Equals(TBRect(110, 50, 40, 60)));
  19. TB_VERIFY(region.GetRect(2).Equals(TBRect(50, 110, 100, 40)));
  20. }
  21. TB_TEST(TBRegion_include_adjecent_coalesce)
  22. {
  23. TBRegion region;
  24. TB_VERIFY(region.IncludeRect(TBRect(10, 10, 10, 10)));
  25. // extend right
  26. TB_VERIFY(region.IncludeRect(TBRect(20, 10, 10, 10)));
  27. TB_VERIFY(region.GetNumRects() == 1);
  28. TB_VERIFY(region.GetRect(0).Equals(TBRect(10, 10, 20, 10)));
  29. // extend bottom
  30. TB_VERIFY(region.IncludeRect(TBRect(10, 20, 20, 10)));
  31. TB_VERIFY(region.GetNumRects() == 1);
  32. TB_VERIFY(region.GetRect(0).Equals(TBRect(10, 10, 20, 20)));
  33. // extend left
  34. TB_VERIFY(region.IncludeRect(TBRect(0, 10, 10, 20)));
  35. TB_VERIFY(region.GetNumRects() == 1);
  36. TB_VERIFY(region.GetRect(0).Equals(TBRect(0, 10, 30, 20)));
  37. // extend top
  38. TB_VERIFY(region.IncludeRect(TBRect(0, 0, 30, 10)));
  39. TB_VERIFY(region.GetNumRects() == 1);
  40. TB_VERIFY(region.GetRect(0).Equals(TBRect(0, 0, 30, 30)));
  41. }
  42. TB_TEST(TBRegion_include_overlap_coalesce)
  43. {
  44. TBRegion region;
  45. TB_VERIFY(region.IncludeRect(TBRect(10, 10, 10, 10)));
  46. // extend to left and right
  47. TB_VERIFY(region.IncludeRect(TBRect(0, 10, 30, 10)));
  48. TB_VERIFY(region.GetNumRects() == 1);
  49. TB_VERIFY(region.GetRect(0).Equals(TBRect(0, 10, 30, 10)));
  50. }
  51. TB_TEST(TBRegion_include_overlap_multi_coalesce)
  52. {
  53. TBRegion region;
  54. TB_VERIFY(region.IncludeRect(TBRect(10, 10, 10, 10)));
  55. // extend in all directions at once
  56. TB_VERIFY(region.IncludeRect(TBRect(0, 0, 100, 100)));
  57. TB_VERIFY(region.GetNumRects() == 1);
  58. TB_VERIFY(region.GetRect(0).Equals(TBRect(0, 0, 100, 100)));
  59. }
  60. TB_TEST(TBRegion_exclude)
  61. {
  62. TBRegion region;
  63. TB_VERIFY(region.Set(TBRect(100, 100, 100, 100)));
  64. // Exclude in the middle (cut a 20x20 hole)
  65. TB_VERIFY(region.ExcludeRect(TBRect(140, 140, 20, 20)));
  66. TB_VERIFY(region.GetNumRects() == 4);
  67. TB_VERIFY(region.GetRect(0).Equals(TBRect(100, 100, 100, 40)));
  68. TB_VERIFY(region.GetRect(1).Equals(TBRect(100, 140, 40, 20)));
  69. TB_VERIFY(region.GetRect(2).Equals(TBRect(160, 140, 40, 20)));
  70. TB_VERIFY(region.GetRect(3).Equals(TBRect(100, 160, 100, 40)));
  71. // Exclude in the middle (cut a 40x40 hole)
  72. TB_VERIFY(region.ExcludeRect(TBRect(130, 130, 40, 40)));
  73. TB_VERIFY(region.GetNumRects() == 4);
  74. TB_VERIFY(region.GetRect(0).Equals(TBRect(100, 100, 100, 30)));
  75. TB_VERIFY(region.GetRect(1).Equals(TBRect(100, 130, 30, 40)));
  76. TB_VERIFY(region.GetRect(2).Equals(TBRect(170, 130, 30, 40)));
  77. TB_VERIFY(region.GetRect(3).Equals(TBRect(100, 170, 100, 30)));
  78. }
  79. }
  80. #endif // TB_UNIT_TESTING