ComponentsTests.cpp 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. module Tests;
  2. import Core.Components;
  3. import Core.Test;
  4. template class Core::Components<int>;
  5. using IntComponent = Core::Components<int>;
  6. template<typename T>
  7. static void testEntityIterator(T c) {
  8. auto iter = c.entities();
  9. auto pos = iter.begin();
  10. auto end = iter.end();
  11. if(Core::testTrue(pos != end)) {
  12. Core::test(1, (*pos).entity);
  13. Core::test(10, (*pos).component);
  14. Core::testTrue(pos != end);
  15. ++pos;
  16. }
  17. if(Core::testTrue(pos != end)) {
  18. Core::test(5, (*pos).entity);
  19. Core::test(20, (*pos).component);
  20. Core::testTrue(pos != end);
  21. ++pos;
  22. }
  23. if(Core::testTrue(pos != end)) {
  24. Core::test(10, (*pos).entity);
  25. Core::test(30, (*pos).component);
  26. Core::testTrue(pos != end);
  27. ++pos;
  28. }
  29. Core::testFalse(pos != end);
  30. }
  31. static void testAddForEach() {
  32. IntComponent c;
  33. int* i1 = nullptr;
  34. int* i2 = nullptr;
  35. int* i3 = nullptr;
  36. Core::testTrue(c.put(i1, 1, 10));
  37. Core::testFalse(c.put(i1, 1, 20));
  38. Core::testTrue(c.put(i2, 5, 20));
  39. Core::testTrue(c.put(i3, 10, 30));
  40. if(Core::testNotNull(i1) && Core::testNotNull(i2) &&
  41. Core::testNotNull(i3)) {
  42. Core::test(10, *i1);
  43. Core::test(20, *i2);
  44. Core::test(30, *i3);
  45. }
  46. testEntityIterator<IntComponent&>(c);
  47. testEntityIterator<const IntComponent&>(c);
  48. }
  49. template<typename T>
  50. static void testComponentIterator(T c) {
  51. auto iter = c.begin();
  52. auto end = c.end();
  53. if(Core::testTrue(iter != end)) {
  54. Core::test(10, *(iter++));
  55. }
  56. if(Core::testTrue(iter != end)) {
  57. Core::test(20, *(iter++));
  58. }
  59. if(Core::testTrue(iter != end)) {
  60. Core::test(30, *(iter++));
  61. }
  62. Core::testFalse(iter != c.end());
  63. }
  64. static void testAddComponentForEach() {
  65. IntComponent c;
  66. int* i1 = nullptr;
  67. int* i2 = nullptr;
  68. int* i3 = nullptr;
  69. Core::testTrue(c.put(i1, 1, 10));
  70. Core::testTrue(c.put(i2, 5, 20));
  71. Core::testTrue(c.put(i3, 10, 30));
  72. if(Core::testNotNull(i1) && Core::testNotNull(i2) &&
  73. Core::testNotNull(i3)) {
  74. Core::test(10, *i1);
  75. Core::test(20, *i2);
  76. Core::test(30, *i3);
  77. }
  78. testComponentIterator<IntComponent&>(c);
  79. testComponentIterator<const IntComponent&>(c);
  80. }
  81. static void testRemove() {
  82. IntComponent c;
  83. Core::testTrue(c.add(1, 10));
  84. Core::testTrue(c.add(5, 20));
  85. Core::testTrue(c.add(10, 30));
  86. Core::testFalse(c.remove(20));
  87. Core::testTrue(c.remove(5));
  88. Core::testFalse(c.remove(30));
  89. Core::testTrue(c.add(20, 40));
  90. Core::testTrue(c.remove(20));
  91. int* i1 = c.search(1);
  92. Core::testNull(c.search(5));
  93. int* i3 = c.search(10);
  94. if(Core::testNotNull(i1) && Core::testNotNull(i3)) {
  95. Core::test(10, *i1);
  96. Core::test(30, *i3);
  97. }
  98. Core::testTrue(c.remove(10));
  99. i1 = c.search(1);
  100. Core::testNull(c.search(5));
  101. Core::testNull(c.search(10));
  102. if(Core::testNotNull(i1)) {
  103. Core::test(10, *i1);
  104. }
  105. Core::testTrue(c.remove(1));
  106. Core::testNull(c.search(1));
  107. Core::testNull(c.search(5));
  108. Core::testNull(c.search(10));
  109. }
  110. static void testConstSearch() {
  111. IntComponent c;
  112. int* i = nullptr;
  113. Core::testTrue(c.put(i, 1, 10));
  114. const IntComponent& cc = c;
  115. const int* component = cc.search(1);
  116. if(Core::testTrue(component != nullptr)) {
  117. Core::test(10, *component);
  118. }
  119. Core::testNull(cc.search(2));
  120. }
  121. void testComponents() {
  122. testAddForEach();
  123. testAddComponentForEach();
  124. testRemove();
  125. testConstSearch();
  126. }