test_basics.c 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. /*****************************************************************************
  2. *
  3. * MODULE: Grass PDE Numerical Library
  4. * AUTHOR(S): Soeren Gebbert, Berlin (GER) Dec 2006
  5. * soerengebbert <at> gmx <dot> de
  6. *
  7. * PURPOSE: Unit tests for les solving
  8. *
  9. * COPYRIGHT: (C) 2000 by the GRASS Development Team
  10. *
  11. * This program is free software under the GNU General Public
  12. * License (>=v2). Read the file COPYING that comes with GRASS
  13. * for details.
  14. *
  15. *****************************************************************************/
  16. #include <stdio.h>
  17. #include <stdlib.h>
  18. #include <string.h>
  19. #include <grass/glocale.h>
  20. #include <grass/gis.h>
  21. #include <grass/rtree.h>
  22. #include <grass/vector.h>
  23. #include "test_rtree_lib.h"
  24. /* prototypes */
  25. static int test_basics_1d(void);
  26. static int test_basics_2d(void);
  27. static int test_basics_3d(void);
  28. static int test_basics_4d(void);
  29. /* ************************************************************************* */
  30. /* Performe the solver unit tests ****************************************** */
  31. /* ************************************************************************* */
  32. int unit_test_basics(void)
  33. {
  34. int sum = 0;
  35. G_message(_("\n++ Running basic unit tests ++"));
  36. sum += test_basics_1d();
  37. sum += test_basics_2d();
  38. sum += test_basics_3d();
  39. sum += test_basics_4d();
  40. if (sum > 0)
  41. G_warning(_("\n-- Basic rtree unit tests failure --"));
  42. else
  43. G_message(_("\n-- Basic rtree unit tests finished successfully --"));
  44. return sum;
  45. }
  46. /* *************************************************************** */
  47. /* *************************************************************** */
  48. /* *************************************************************** */
  49. int test_basics_1d(void)
  50. {
  51. int sum = 0, num, i;
  52. struct RTree* tree = RTreeCreateTree(-1, 0, 1);
  53. struct ilist *list = G_new_ilist();
  54. for(i = 0; i < 10; i++) {
  55. struct RTree_Rect* rect1 = RTreeAllocRect(tree);
  56. RTreeSetRect1D(rect1, tree,(i - 2), (i + 2));
  57. RTreeInsertRect(rect1, i + 1, tree);
  58. struct RTree_Rect* rect2 = RTreeAllocRect(tree);
  59. RTreeSetRect1D(rect2, tree, 2.0, 7.0);
  60. num = RTreeSearch2(tree, rect2, list);
  61. printf("Found %i neighbors\n", num);
  62. if(num != i + 1)
  63. sum++;
  64. RTreeFreeRect(rect1);
  65. RTreeFreeRect(rect2);
  66. }
  67. RTreeDestroyTree(tree);
  68. G_free_ilist(list);
  69. return sum;
  70. }
  71. /* *************************************************************** */
  72. /* *************************************************************** */
  73. /* *************************************************************** */
  74. int test_basics_2d(void)
  75. {
  76. int sum = 0, num, i;
  77. struct RTree* tree = RTreeCreateTree(-1, 0, 2);
  78. struct ilist *list = G_new_ilist();
  79. for(i = 0; i < 10; i++) {
  80. struct RTree_Rect* rect1 = RTreeAllocRect(tree);
  81. RTreeSetRect2D(rect1, tree,(i - 2), (i + 2), (i - 2), (i + 2));
  82. RTreeInsertRect(rect1, i + 1, tree);
  83. struct RTree_Rect* rect2 = RTreeAllocRect(tree);
  84. RTreeSetRect2D(rect2, tree, 2.0, 7.0, 2.0, 7.0);
  85. num = RTreeSearch2(tree, rect2, list);
  86. printf("Found %i neighbors\n", num);
  87. if(num != i + 1)
  88. sum++;
  89. RTreeFreeRect(rect1);
  90. RTreeFreeRect(rect2);
  91. }
  92. RTreeDestroyTree(tree);
  93. G_free_ilist(list);
  94. return sum;
  95. }
  96. /* *************************************************************** */
  97. /* *************************************************************** */
  98. /* *************************************************************** */
  99. int test_basics_3d(void)
  100. {
  101. int sum = 0, num, i;
  102. struct RTree* tree = RTreeCreateTree(-1, 0, 3);
  103. struct ilist *list = G_new_ilist();
  104. for(i = 0; i < 10; i++) {
  105. struct RTree_Rect* rect1 = RTreeAllocRect(tree);
  106. RTreeSetRect3D(rect1, tree,(i - 2), (i + 2), (i - 2), (i + 2),
  107. (i - 2), (i + 2));
  108. RTreeInsertRect(rect1, i + 1, tree);
  109. struct RTree_Rect* rect2 = RTreeAllocRect(tree);
  110. RTreeSetRect3D(rect2, tree, 2.0, 7.0, 2.0,
  111. 7.0, 2.0, 7.0);
  112. num = RTreeSearch2(tree, rect2, list);
  113. printf("Found %i neighbors\n", num);
  114. if(num != i + 1)
  115. sum++;
  116. RTreeFreeRect(rect1);
  117. RTreeFreeRect(rect2);
  118. }
  119. RTreeDestroyTree(tree);
  120. G_free_ilist(list);
  121. return sum;
  122. }
  123. /* *************************************************************** */
  124. /* *************************************************************** */
  125. /* *************************************************************** */
  126. int test_basics_4d(void)
  127. {
  128. int sum = 0, num, i;
  129. struct RTree* tree = RTreeCreateTree(-1, 0, 4);
  130. struct ilist *list = G_new_ilist();
  131. for(i = 0; i < 10; i++) {
  132. struct RTree_Rect* rect1 = RTreeAllocRect(tree);
  133. RTreeSetRect4D(rect1, tree,(i - 2), (i + 2), (i - 2), (i + 2),
  134. (i - 2), (i + 2), (i - 2), (i + 2));
  135. RTreeInsertRect(rect1, i + 1, tree);
  136. struct RTree_Rect* rect2 = RTreeAllocRect(tree);
  137. RTreeSetRect4D(rect2, tree, 2.0, 7.0, 2.0,
  138. 7.0, 2.0, 7.0, 2.0, 7.0);
  139. num = RTreeSearch2(tree, rect2, list);
  140. printf("Found %i neighbors\n", num);
  141. if(num != i + 1)
  142. sum++;
  143. RTreeFreeRect(rect1);
  144. RTreeFreeRect(rect2);
  145. }
  146. RTreeDestroyTree(tree);
  147. G_free_ilist(list);
  148. return sum;
  149. }