123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267 |
- #include <stdlib.h>
- #include <string.h>
- #include "test_g3d_lib.h"
- #include "grass/interpf.h"
- static int test_coordinate_transform(void);
- static int test_region(void);
- /* *************************************************************** */
- /* Perfrome the coordinate transformation tests ****************** */
- /* *************************************************************** */
- int unit_test_coordinate_transform(void)
- {
- int sum = 0;
- G_message(_("\n++ Running g3d coordinate transform unit tests ++"));
- sum += test_coordinate_transform();
- sum += test_region();
- if (sum > 0)
- G_warning(_("\n-- g3d coordinate transform unit tests failure --"));
- else
- G_message(_("\n-- g3d coordinate transform unit tests finished successfully --"));
- return sum;
- }
- /* *************************************************************** */
- int test_coordinate_transform(void)
- {
- int sum = 0;
-
- double north, east, top;
- int col = 0, row = 0, depth = 0;
-
- G3D_Region region, default_region;
- G3D_Map *map = NULL;
-
- /* We need to set up a specific region for the new g3d map.
- * First we safe the default region. */
- G3d_getWindow(&default_region);
- G3d_regionCopy(®ion, &default_region);
-
- region.bottom = 0.0;
- region.top = 1000;
- region.south = 1000;
- region.north = 8500;
- region.west = 5000;
- region.east = 10000;
- region.rows = 15;
- region.cols = 10;
- region.depths = 5;
-
- G3d_adjustRegion(®ion);
-
- map = G3d_openNewOptTileSize("test_coordinate_transform", G3D_USE_CACHE_XYZ, ®ion, FCELL_TYPE, 32);
-
- /* The window is the same as the map region ... of course */
- G3d_setWindowMap(map, ®ion);
-
- G_message("Test the upper right corner, coordinates must be col = 9, row = 0, depth = 4");
-
- /*
- ROWS
- 1000 1500 2000 2500 3000 3500 4000 4500 5000 5500 6500 7000 7500 8000 8500 9000
- |....|....|....|....|....|....|....|....|....|....|....|....|....|....|....|
- 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
-
- COLS
- 5000 5500 6000 6500 7000 7500 8000 8500 9000 9500 10000
- |....|....|....|....|....|....|....|....|....|....|
- 0 1 2 3 4 5 6 7 8 9 10
-
- DEPTHS
- 0 200 400 600 800 1000
- |....|....|....|....|....|
- 0 1 2 3 4 5
- */
- north = 8499.9;
- east= 9999.9;
- top = 999.9;
-
- G3d_location2coord(&(map->region), north, east, top, &col, &row, &depth);
- printf("G3d_location2coord col %i row %i depth %i\n", col, row, depth);
- if(region.cols - 1 != col || 0 != row || region.depths - 1 != depth) {
- G_message("Error in G3d_location2coord");
- sum++;
- }
-
- G_message("Test the lower left corner, coordinates must be col = 0 row = 14 depth = 0");
-
- north = 1000.0;
- east= 5000.0;
- top = 0.0;
-
- G3d_location2coord(&(map->region), north, east, top, &col, &row, &depth);
- printf("G3d_location2coord col %i row %i depth %i\n", col, row, depth);
- if(0 != col || 14 != row || 0 != depth) {
- G_message("Error in G3d_location2coord");
- sum++;
- }
-
- G_message("Test the center, coordinates must be col = 4 row = 7 depth = 2");
-
-
- north = 4750.0;
- east= 7499.9;
- top = 500.0;
-
- G3d_location2coord(&(map->region), north, east, top, &col, &row, &depth);
- printf("G3d_location2coord col %i row %i depth %i\n", col, row, depth);
- if((region.cols - 1)/2 != col || (region.rows - 1)/2 != row || (region.depths - 1)/2 != depth) {
- G_message("Error in G3d_location2coord");
- sum++;
- }
-
- G_message("Test the n=3000.1, e=7000.1 and t=800.1, coordinates must be col = 4 row = 10 depth = 4");
-
- north = 3000.1;
- east= 7000.1;
- top = 800.1;
-
- G3d_location2coord(&(map->region), north, east, top, &col, &row, &depth);
- printf("G3d_location2coord col %i row %i depth %i\n", col, row, depth);
- if(4 != col || map->region.rows - 5 != row || 4 != depth) {
- G_message("Error in G3d_location2coord");
- sum++;
- }
-
- G_message("Test the n=2999.9, e=6999.9 and t=799.9, coordinates must be col = 3 row = 11 depth = 3");
-
- north = 2999.9;
- east= 6999.9;
- top = 799.9;
-
- G3d_location2coord(&(map->region), north, east, top, &col, &row, &depth);
- printf("G3d_location2coord col %i row %i depth %i\n", col, row, depth);
- if(3 != col || map->region.rows - 4 != row || 3 != depth) {
- G_message("Error in G3d_location2coord");
- sum++;
- }
-
- G3d_closeCell(map);
-
- G_remove("grid3", "test_coordinate_transform");
-
- return sum;
- }
- /* *************************************************************** */
- int test_region(void)
- {
- int sum = 0;
- G3D_Region region, new_region;
-
- G3d_getWindow(®ion);
- region.bottom = 0.0;
- region.top = 1000;
- region.south = 10000;
- region.north = 20000;
- region.west = 5000;
- region.east = 10000;
- region.rows = 20;
- region.cols = 10;
- region.depths = 5;
- region.ew_res = 0;
- region.ns_res = 0;
- region.tb_res = 0;
-
- /* Test region adjustment */
- G3d_adjustRegion(®ion);
-
- if(region.ew_res != 500) {
- G_message("Error in G3d_adjustRegion: region.ew_res != 500");
- sum++;
- }
-
- if(region.ns_res != 500) {
- G_message("Error in G3d_adjustRegion: region.ew_res != 500");
- sum++;
- }
-
- if(region.tb_res != 200) {
- G_message("Error in G3d_adjustRegion: region.ew_res != 500");
- sum++;
- }
-
- /* Test the region copy */
- G3d_regionCopy(&new_region, ®ion);
-
- if(region.bottom != new_region.bottom) {
- G_message("Error in G3d_regionCopy: region.bottom != new_region.bottom");
- sum++;
- }
-
- if(region.cols != new_region.cols) {
- G_message("Error in G3d_regionCopy: region.cols != new_region.cols");
- sum++;
- }
-
- if(region.depths != new_region.depths) {
- G_message("Error in G3d_regionCopy: region.depths != new_region.depths");
- sum++;
- }
-
- if(region.east != new_region.east) {
- G_message("Error in G3d_regionCopy: region.east != new_region.east");
- sum++;
- }
-
- if(region.ew_res != new_region.ew_res) {
- G_message("Error in G3d_regionCopy: region.ew_res != new_region.ew_res");
- sum++;
- }
-
- if(region.north != new_region.north) {
- G_message("Error in G3d_regionCopy: region.north != new_region.north");
- sum++;
- }
-
- if(region.ns_res != new_region.ns_res) {
- G_message("Error in G3d_regionCopy: region.ns_res != new_region.ns_res");
- sum++;
- }
-
- if(region.proj != new_region.proj) {
- G_message("Error in G3d_regionCopy: region.proj != new_region.proj");
- sum++;
- }
-
- if(region.rows != new_region.rows) {
- G_message("Error in G3d_regionCopy: region.rows != new_region.rows");
- sum++;
- }
-
- if(region.south != new_region.south) {
- G_message("Error in G3d_regionCopy: region.south != new_region.south");
- sum++;
- }
-
- if(region.tb_res != new_region.tb_res) {
- G_message("Error in G3d_regionCopy: region.tb_res != new_region.tb_res");
- sum++;
- }
-
- if(region.top != new_region.top) {
- G_message("Error in G3d_regionCopy: region.top != new_region.top");
- sum++;
- }
-
- if(region.west != new_region.west) {
- G_message("Error in G3d_regionCopy: region.west != new_region.west");
- sum++;
- }
-
- if(region.zone != new_region.zone) {
- G_message("Error in G3d_regionCopy: region.zone != new_region.zone");
- sum++;
- }
-
- return sum;
- }
|