/***************************************************************************** * * MODULE: Grass PDE Numerical Library * AUTHOR(S): Soeren Gebbert, Berlin (GER) Dec 2006 * soerengebbert gmx de * * PURPOSE: Unit tests for les solving * * COPYRIGHT: (C) 2000 by the GRASS Development Team * * This program is free software under the GNU General Public * License (>=v2). Read the file COPYING that comes with GRASS * for details. * *****************************************************************************/ #include #include #include #include #include #include #include #include "test_rtree_lib.h" /* prototypes */ static int test_basics_1d(void); static int test_basics_2d(void); static int test_basics_3d(void); static int test_basics_4d(void); /* ************************************************************************* */ /* Performe the solver unit tests ****************************************** */ /* ************************************************************************* */ int unit_test_basics(void) { int sum = 0; G_message(_("\n++ Running basic unit tests ++")); sum += test_basics_1d(); sum += test_basics_2d(); sum += test_basics_3d(); sum += test_basics_4d(); if (sum > 0) G_warning(_("\n-- Basic rtree unit tests failure --")); else G_message(_("\n-- Basic rtree unit tests finished successfully --")); return sum; } /* *************************************************************** */ /* *************************************************************** */ /* *************************************************************** */ int test_basics_1d(void) { int sum = 0, num, i; struct RTree* tree = RTreeCreateTree(-1, 0, 1); struct ilist *list = G_new_ilist(); for(i = 0; i < 10; i++) { struct RTree_Rect* rect1 = RTreeAllocRect(tree); RTreeSetRect1D(rect1, tree,(i - 2), (i + 2)); RTreeInsertRect(rect1, i + 1, tree); struct RTree_Rect* rect2 = RTreeAllocRect(tree); RTreeSetRect1D(rect2, tree, 2.0, 7.0); num = RTreeSearch2(tree, rect2, list); printf("Found %i neighbors\n", num); if(num != i + 1) sum++; RTreeFreeRect(rect1); RTreeFreeRect(rect2); } RTreeDestroyTree(tree); G_free_ilist(list); return sum; } /* *************************************************************** */ /* *************************************************************** */ /* *************************************************************** */ int test_basics_2d(void) { int sum = 0, num, i; struct RTree* tree = RTreeCreateTree(-1, 0, 2); struct ilist *list = G_new_ilist(); for(i = 0; i < 10; i++) { struct RTree_Rect* rect1 = RTreeAllocRect(tree); RTreeSetRect2D(rect1, tree,(i - 2), (i + 2), (i - 2), (i + 2)); RTreeInsertRect(rect1, i + 1, tree); struct RTree_Rect* rect2 = RTreeAllocRect(tree); RTreeSetRect2D(rect2, tree, 2.0, 7.0, 2.0, 7.0); num = RTreeSearch2(tree, rect2, list); printf("Found %i neighbors\n", num); if(num != i + 1) sum++; RTreeFreeRect(rect1); RTreeFreeRect(rect2); } RTreeDestroyTree(tree); G_free_ilist(list); return sum; } /* *************************************************************** */ /* *************************************************************** */ /* *************************************************************** */ int test_basics_3d(void) { int sum = 0, num, i; struct RTree* tree = RTreeCreateTree(-1, 0, 3); struct ilist *list = G_new_ilist(); for(i = 0; i < 10; i++) { struct RTree_Rect* rect1 = RTreeAllocRect(tree); RTreeSetRect3D(rect1, tree,(i - 2), (i + 2), (i - 2), (i + 2), (i - 2), (i + 2)); RTreeInsertRect(rect1, i + 1, tree); struct RTree_Rect* rect2 = RTreeAllocRect(tree); RTreeSetRect3D(rect2, tree, 2.0, 7.0, 2.0, 7.0, 2.0, 7.0); num = RTreeSearch2(tree, rect2, list); printf("Found %i neighbors\n", num); if(num != i + 1) sum++; RTreeFreeRect(rect1); RTreeFreeRect(rect2); } RTreeDestroyTree(tree); G_free_ilist(list); return sum; } /* *************************************************************** */ /* *************************************************************** */ /* *************************************************************** */ int test_basics_4d(void) { int sum = 0, num, i; struct RTree* tree = RTreeCreateTree(-1, 0, 4); struct ilist *list = G_new_ilist(); for(i = 0; i < 10; i++) { struct RTree_Rect* rect1 = RTreeAllocRect(tree); RTreeSetRect4D(rect1, tree,(i - 2), (i + 2), (i - 2), (i + 2), (i - 2), (i + 2), (i - 2), (i + 2)); RTreeInsertRect(rect1, i + 1, tree); struct RTree_Rect* rect2 = RTreeAllocRect(tree); RTreeSetRect4D(rect2, tree, 2.0, 7.0, 2.0, 7.0, 2.0, 7.0, 2.0, 7.0); num = RTreeSearch2(tree, rect2, list); printf("Found %i neighbors\n", num); if(num != i + 1) sum++; RTreeFreeRect(rect1); RTreeFreeRect(rect2); } RTreeDestroyTree(tree); G_free_ilist(list); return sum; }