llworldmap_test.cpp
上传用户:king477883
上传日期:2021-03-01
资源大小:9553k
文件大小:19k
源码类别:

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file llworldmap_test.cpp
  3.  * @author Merov Linden
  4.  * @date 2009-03-09
  5.  *
  6.  * $LicenseInfo:firstyear=2006&license=viewergpl$
  7.  * 
  8.  * Copyright (c) 2006-2010, Linden Research, Inc.
  9.  * 
  10.  * Second Life Viewer Source Code
  11.  * The source code in this file ("Source Code") is provided by Linden Lab
  12.  * to you under the terms of the GNU General Public License, version 2.0
  13.  * ("GPL"), unless you have obtained a separate licensing agreement
  14.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  15.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  16.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  17.  * 
  18.  * There are special exceptions to the terms and conditions of the GPL as
  19.  * it is applied to this Source Code. View the full text of the exception
  20.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  21.  * online at
  22.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  23.  * 
  24.  * By copying, modifying or distributing this software, you acknowledge
  25.  * that you have read and understood your obligations described above,
  26.  * and agree to abide by those obligations.
  27.  * 
  28.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  29.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  30.  * COMPLETENESS OR PERFORMANCE.
  31.  * $/LicenseInfo$
  32.  */
  33. // Precompiled header: almost always required for newview cpp files
  34. #include "../llviewerprecompiledheaders.h"
  35. // Class to test
  36. #include "../llworldmap.h"
  37. // Dependencies
  38. #include "../llviewerimagelist.h"
  39. #include "../llworldmapmessage.h"
  40. // Tut header
  41. #include "../test/lltut.h"
  42. // -------------------------------------------------------------------------------------------
  43. // Stubbing: Declarations required to link and run the class being tested
  44. // Notes: 
  45. // * Add here stubbed implementation of the few classes and methods used in the class to be tested
  46. // * Add as little as possible (let the link errors guide you)
  47. // * Do not make any assumption as to how those classes or methods work (i.e. don't copy/paste code)
  48. // * A simulator for a class can be implemented here. Please comment and document thoroughly.
  49. // Stub image calls
  50. LLViewerImageList::LLViewerImageList() { }
  51. LLViewerImageList::~LLViewerImageList() { }
  52. LLViewerImageList gImageList;
  53. LLViewerImage* LLViewerImageList::getImage(const LLUUID &image_id,
  54.    BOOL usemipmaps,
  55.    BOOL level_immediate,
  56.    LLGLint internal_format,
  57.    LLGLenum primary_format,
  58.    LLHost request_from_host)
  59. { return NULL; }
  60. void LLViewerImage::setBoostLevel(S32 level) { }
  61. void LLImageGL::setAddressMode(LLTexUnit::eTextureAddressMode mode) { }
  62. // Stub related map calls
  63. LLWorldMapMessage::LLWorldMapMessage() { }
  64. LLWorldMapMessage::~LLWorldMapMessage() { }
  65. void LLWorldMapMessage::sendItemRequest(U32 type, U64 handle) { }
  66. void LLWorldMapMessage::sendMapBlockRequest(U16 min_x, U16 min_y, U16 max_x, U16 max_y, bool return_nonexistent) { }
  67. LLWorldMipmap::LLWorldMipmap() { }
  68. LLWorldMipmap::~LLWorldMipmap() { }
  69. void LLWorldMipmap::reset() { }
  70. void LLWorldMipmap::dropBoostLevels() { }
  71. void LLWorldMipmap::equalizeBoostLevels() { }
  72. LLPointer<LLViewerImage> LLWorldMipmap::getObjectsTile(U32 grid_x, U32 grid_y, S32 level, bool load)
  73. { return NULL; }
  74. // Stub other stuff
  75. BOOL gPacificDaylightTime;
  76. // End Stubbing
  77. // -------------------------------------------------------------------------------------------
  78. // -------------------------------------------------------------------------------------------
  79. // TUT
  80. // -------------------------------------------------------------------------------------------
  81. const F32 X_WORLD_TEST = 1000.0f * REGION_WIDTH_METERS;
  82. const F32 Y_WORLD_TEST = 2000.0f * REGION_WIDTH_METERS;
  83. const F32 Z_WORLD_TEST = 240.0f;
  84. const std::string ITEM_NAME_TEST = "Item Foo";
  85. const std::string TOOLTIP_TEST = "Tooltip Foo";
  86. const std::string SIM_NAME_TEST = "Sim Foo";
  87. namespace tut
  88. {
  89. // Test wrapper declarations
  90. struct iteminfo_test
  91. {
  92. // Instance to be tested
  93. LLItemInfo* mItem;
  94. // Constructor and destructor of the test wrapper
  95. iteminfo_test()
  96. {
  97. LLUUID id;
  98. mItem = new LLItemInfo(X_WORLD_TEST, Y_WORLD_TEST, ITEM_NAME_TEST, id);
  99. }
  100. ~iteminfo_test()
  101. {
  102. delete mItem;
  103. }
  104. };
  105. struct siminfo_test
  106. {
  107. // Instance to be tested
  108. LLSimInfo* mSim;
  109. // Constructor and destructor of the test wrapper
  110. siminfo_test()
  111. {
  112. U64 handle = to_region_handle_global(X_WORLD_TEST, Y_WORLD_TEST);
  113. mSim = new LLSimInfo(handle);
  114. }
  115. ~siminfo_test()
  116. {
  117. delete mSim;
  118. }
  119. };
  120. struct worldmap_test
  121. {
  122. // Instance to be tested
  123. LLWorldMap* mWorld;
  124. // Constructor and destructor of the test wrapper
  125. worldmap_test()
  126. {
  127. mWorld = LLWorldMap::getInstance();
  128. }
  129. ~worldmap_test()
  130. {
  131. mWorld = NULL;
  132. }
  133. };
  134. // Tut templating thingamagic: test group, object and test instance
  135. typedef test_group<iteminfo_test> iteminfo_t;
  136. typedef iteminfo_t::object iteminfo_object_t;
  137. tut::iteminfo_t tut_iteminfo("iteminfo");
  138. typedef test_group<siminfo_test> siminfo_t;
  139. typedef siminfo_t::object siminfo_object_t;
  140. tut::siminfo_t tut_siminfo("siminfo");
  141. typedef test_group<worldmap_test> worldmap_t;
  142. typedef worldmap_t::object worldmap_object_t;
  143. tut::worldmap_t tut_worldmap("worldmap");
  144. // ---------------------------------------------------------------------------------------
  145. // Test functions
  146. // Notes:
  147. // * Test as many as you possibly can without requiring a full blown simulation of everything
  148. // * The tests are executed in sequence so the test instance state may change between calls
  149. // * Remember that you cannot test private methods with tut
  150. // ---------------------------------------------------------------------------------------
  151. // ---------------------------------------------------------------------------------------
  152. // Test the LLItemInfo interface
  153. // ---------------------------------------------------------------------------------------
  154. template<> template<>
  155. void iteminfo_object_t::test<1>()
  156. {
  157. // Test 1 : setCount() / getCount()
  158. mItem->setCount(10);
  159. ensure("LLItemInfo::setCount() test failed", mItem->getCount() == 10);
  160. // Test 2 : setTooltip() / getToolTip()
  161. std::string tooltip = TOOLTIP_TEST;
  162. mItem->setTooltip(tooltip);
  163. ensure("LLItemInfo::setTooltip() test failed", mItem->getToolTip() == TOOLTIP_TEST);
  164. // Test 3 : setElevation() / getGlobalPosition()
  165. mItem->setElevation(Z_WORLD_TEST);
  166. LLVector3d pos = mItem->getGlobalPosition();
  167. LLVector3d ref(X_WORLD_TEST, Y_WORLD_TEST, Z_WORLD_TEST);
  168. ensure("LLItemInfo::getGlobalPosition() test failed", pos == ref);
  169. // Test 4 : getName()
  170. std::string name = mItem->getName();
  171. ensure("LLItemInfo::getName() test failed", name == ITEM_NAME_TEST);
  172. // Test 5 : isName()
  173. ensure("LLItemInfo::isName() test failed", mItem->isName(name));
  174. // Test 6 : getUUID()
  175. LLUUID id;
  176. ensure("LLItemInfo::getUUID() test failed", mItem->getUUID() == id);
  177. // Test 7 : getRegionHandle()
  178. U64 handle = to_region_handle_global(X_WORLD_TEST, Y_WORLD_TEST);
  179. ensure("LLItemInfo::getRegionHandle() test failed", mItem->getRegionHandle() == handle);
  180. }
  181. // ---------------------------------------------------------------------------------------
  182. // Test the LLSimInfo interface
  183. // ---------------------------------------------------------------------------------------
  184. // Test Setters and Accessors methods
  185. template<> template<>
  186. void siminfo_object_t::test<1>()
  187. {
  188. // Test 1 : setName() / getName()
  189. std::string name = SIM_NAME_TEST;
  190. mSim->setName(name);
  191. ensure("LLSimInfo::setName() test failed", mSim->getName() == SIM_NAME_TEST);
  192. // Test 2 : isName()
  193. ensure("LLSimInfo::isName() test failed", mSim->isName(name));
  194. // Test 3 : getGlobalPos()
  195. LLVector3 local;
  196. LLVector3d ref(X_WORLD_TEST, Y_WORLD_TEST, 0.0f);
  197. LLVector3d pos = mSim->getGlobalPos(local);
  198. ensure("LLSimInfo::getGlobalPos() test failed", pos == ref);
  199. // Test 4 : getGlobalOrigin()
  200. pos = mSim->getGlobalOrigin();
  201. ensure("LLSimInfo::getGlobalOrigin() test failed", pos == ref);
  202. // Test 5 : clearImage()
  203. try {
  204. mSim->clearImage();
  205. } catch (...) {
  206. fail("LLSimInfo::clearImage() test failed");
  207. }
  208. // Test 6 : dropImagePriority()
  209. try {
  210. mSim->dropImagePriority();
  211. } catch (...) {
  212. fail("LLSimInfo::dropImagePriority() test failed");
  213. }
  214. // Test 7 : updateAgentCount()
  215. try {
  216. mSim->updateAgentCount(0.0f);
  217. } catch (...) {
  218. fail("LLSimInfo::updateAgentCount() test failed");
  219. }
  220. // Test 8 : getAgentCount()
  221. S32 agents = mSim->getAgentCount();
  222. ensure("LLSimInfo::getAgentCount() test failed", agents == 0);
  223. // Test 9 : setLandForSaleImage() / getLandForSaleImage()
  224. LLUUID id;
  225. mSim->setLandForSaleImage(id);
  226. LLPointer<LLViewerImage> image = mSim->getLandForSaleImage();
  227. ensure("LLSimInfo::getLandForSaleImage() test failed", image.isNull());
  228. // Test 10 : isPG()
  229. mSim->setAccess(SIM_ACCESS_PG);
  230. ensure("LLSimInfo::isPG() test failed", mSim->isPG());
  231. // Test 11 : isDown()
  232. mSim->setAccess(SIM_ACCESS_DOWN);
  233. ensure("LLSimInfo::isDown() test failed", mSim->isDown());
  234. // Test 12 : Access strings can't be accessed from unit test...
  235. //ensure("LLSimInfo::getAccessString() test failed", mSim->getAccessString() == "Offline");
  236. // Test 13 : Region strings can't be accessed from unit test...
  237. //mSim->setRegionFlags(REGION_FLAGS_SANDBOX);
  238. //ensure("LLSimInfo::setRegionFlags() test failed", mSim->getFlagsString() == "Sandbox");
  239. }
  240. // Test management of LLInfoItem lists
  241. template<> template<>
  242. void siminfo_object_t::test<2>()
  243. {
  244. // Test 14 : clearItems()
  245. try {
  246. mSim->clearItems();
  247. } catch (...) {
  248. fail("LLSimInfo::clearItems() at init test failed");
  249. }
  250. // Test 15 : Verify that all the lists are empty
  251. LLSimInfo::item_info_list_t list;
  252. list = mSim->getTeleHub();
  253. ensure("LLSimInfo::getTeleHub() empty at init test failed", list.empty());
  254. list = mSim->getInfoHub();
  255. ensure("LLSimInfo::getInfoHub() empty at init test failed", list.empty());
  256. list = mSim->getPGEvent();
  257. ensure("LLSimInfo::getPGEvent() empty at init test failed", list.empty());
  258. list = mSim->getMatureEvent();
  259. ensure("LLSimInfo::getMatureEvent() empty at init test failed", list.empty());
  260. list = mSim->getLandForSale();
  261. ensure("LLSimInfo::getLandForSale() empty at init test failed", list.empty());
  262. list = mSim->getAgentLocation();
  263. ensure("LLSimInfo::getAgentLocation() empty at init test failed", list.empty());
  264. // Create an item to be inserted
  265. LLUUID id;
  266. LLItemInfo item(X_WORLD_TEST, Y_WORLD_TEST, ITEM_NAME_TEST, id);
  267. // Insert the item in each list
  268. mSim->insertTeleHub(item);
  269. mSim->insertInfoHub(item);
  270. mSim->insertPGEvent(item);
  271. mSim->insertMatureEvent(item);
  272. mSim->insertLandForSale(item);
  273. mSim->insertAgentLocation(item);
  274. // Test 16 : Verify that the lists contain 1 item each
  275. list = mSim->getTeleHub();
  276. ensure("LLSimInfo::insertTeleHub() test failed", list.size() == 1);
  277. list = mSim->getInfoHub();
  278. ensure("LLSimInfo::insertInfoHub() test failed", list.size() == 1);
  279. list = mSim->getPGEvent();
  280. ensure("LLSimInfo::insertPGEvent() test failed", list.size() == 1);
  281. list = mSim->getMatureEvent();
  282. ensure("LLSimInfo::insertMatureEvent() test failed", list.size() == 1);
  283. list = mSim->getLandForSale();
  284. ensure("LLSimInfo::insertLandForSale() test failed", list.size() == 1);
  285. list = mSim->getAgentLocation();
  286. ensure("LLSimInfo::insertAgentLocation() test failed", list.size() == 1);
  287. // Test 17 : clearItems()
  288. try {
  289. mSim->clearItems();
  290. } catch (...) {
  291. fail("LLSimInfo::clearItems() at end test failed");
  292. }
  293. // Test 18 : Verify that all the lists are empty again... *except* agent which is persisted!! (on purpose)
  294. list = mSim->getTeleHub();
  295. ensure("LLSimInfo::getTeleHub() empty after clear test failed", list.empty());
  296. list = mSim->getInfoHub();
  297. ensure("LLSimInfo::getInfoHub() empty after clear test failed", list.empty());
  298. list = mSim->getPGEvent();
  299. ensure("LLSimInfo::getPGEvent() empty after clear test failed", list.empty());
  300. list = mSim->getMatureEvent();
  301. ensure("LLSimInfo::getMatureEvent() empty after clear test failed", list.empty());
  302. list = mSim->getLandForSale();
  303. ensure("LLSimInfo::getLandForSale() empty after clear test failed", list.empty());
  304. list = mSim->getAgentLocation();
  305. ensure("LLSimInfo::getAgentLocation() empty after clear test failed", list.size() == 1);
  306. }
  307. // ---------------------------------------------------------------------------------------
  308. // Test the LLWorldMap interface
  309. // ---------------------------------------------------------------------------------------
  310. // Test Setters and Accessors methods
  311. template<> template<>
  312. void worldmap_object_t::test<1>()
  313. {
  314. // Test 1 : reset()
  315. try {
  316. mWorld->reset();
  317. } catch (...) {
  318. fail("LLWorldMap::reset() at init test failed");
  319. }
  320. // Test 2 : clearImageRefs()
  321. try {
  322. mWorld->clearImageRefs();
  323. } catch (...) {
  324. fail("LLWorldMap::clearImageRefs() test failed");
  325. }
  326. // Test 3 : dropImagePriorities()
  327. try {
  328. mWorld->dropImagePriorities();
  329. } catch (...) {
  330. fail("LLWorldMap::dropImagePriorities() test failed");
  331. }
  332. // Test 4 : reloadItems()
  333. try {
  334. mWorld->reloadItems(true);
  335. } catch (...) {
  336. fail("LLWorldMap::reloadItems() test failed");
  337. }
  338. // Test 5 : updateRegions()
  339. try {
  340. mWorld->updateRegions(1000, 1000, 1004, 1004);
  341. } catch (...) {
  342. fail("LLWorldMap::updateRegions() test failed");
  343. }
  344. // Test 6 : equalizeBoostLevels()
  345.   try {
  346.   mWorld->equalizeBoostLevels();
  347.   } catch (...) {
  348.   fail("LLWorldMap::equalizeBoostLevels() test failed");
  349.   }
  350. // Test 7 : getObjectsTile()
  351. try {
  352. LLPointer<LLViewerImage> image = mWorld->getObjectsTile((U32)(X_WORLD_TEST/REGION_WIDTH_METERS), (U32)(Y_WORLD_TEST/REGION_WIDTH_METERS), 1);
  353. ensure("LLWorldMap::getObjectsTile() failed", image.isNull());
  354. } catch (...) {
  355. fail("LLWorldMap::getObjectsTile() test failed with exception");
  356. }
  357. }
  358. // Test management of LLSimInfo lists
  359. template<> template<>
  360. void worldmap_object_t::test<2>()
  361. {
  362. // Test 8 : reset()
  363. try {
  364. mWorld->reset();
  365. } catch (...) {
  366. fail("LLWorldMap::reset() at init test failed");
  367. }
  368. // Test 9 : Verify that all the region list is empty
  369. LLWorldMap::sim_info_map_t list;
  370. list = mWorld->getRegionMap();
  371. ensure("LLWorldMap::getRegionMap() empty at init test failed", list.empty());
  372. // Test 10 : Insert a region
  373. bool success;
  374. LLUUID id;
  375. std::string name_sim = SIM_NAME_TEST;
  376. success = mWorld->insertRegion( U32(X_WORLD_TEST), 
  377. U32(Y_WORLD_TEST), 
  378. name_sim,
  379. id,
  380. SIM_ACCESS_PG,
  381. REGION_FLAGS_SANDBOX);
  382. list = mWorld->getRegionMap();
  383. ensure("LLWorldMap::insertRegion() failed", success && (list.size() == 1));
  384. // Test 11 : Insert an item in the same region -> number of regions doesn't increase
  385. std::string name_item = ITEM_NAME_TEST;
  386. success = mWorld->insertItem( U32(X_WORLD_TEST + REGION_WIDTH_METERS/2),
  387. U32(Y_WORLD_TEST + REGION_WIDTH_METERS/2), 
  388. name_item,
  389. id,
  390. MAP_ITEM_LAND_FOR_SALE,
  391. 0, 0);
  392. list = mWorld->getRegionMap();
  393. ensure("LLWorldMap::insertItem() in existing region failed", success && (list.size() == 1));
  394. // Test 12 : Insert an item in another region -> number of regions increases
  395. success = mWorld->insertItem( U32(X_WORLD_TEST + REGION_WIDTH_METERS*2), 
  396. U32(Y_WORLD_TEST + REGION_WIDTH_METERS*2), 
  397. name_item,
  398. id,
  399. MAP_ITEM_LAND_FOR_SALE,
  400. 0, 0);
  401. list = mWorld->getRegionMap();
  402. ensure("LLWorldMap::insertItem() in unexisting region failed", success && (list.size() == 2));
  403. // Test 13 : simInfoFromPosGlobal() in region
  404. LLVector3d pos1( X_WORLD_TEST + REGION_WIDTH_METERS*2 + REGION_WIDTH_METERS/2, 
  405. Y_WORLD_TEST + REGION_WIDTH_METERS*2 + REGION_WIDTH_METERS/2, 
  406. 0.0f);
  407. LLSimInfo* sim;
  408. sim = mWorld->simInfoFromPosGlobal(pos1);
  409. ensure("LLWorldMap::simInfoFromPosGlobal() test on existing region failed", sim != NULL);
  410. // Test 14 : simInfoFromPosGlobal() outside region
  411. LLVector3d pos2( X_WORLD_TEST + REGION_WIDTH_METERS*4 + REGION_WIDTH_METERS/2, 
  412. Y_WORLD_TEST + REGION_WIDTH_METERS*4 + REGION_WIDTH_METERS/2, 
  413. 0.0f);
  414. sim = mWorld->simInfoFromPosGlobal(pos2);
  415. ensure("LLWorldMap::simInfoFromPosGlobal() test outside region failed", sim == NULL);
  416. // Test 15 : simInfoFromName()
  417. sim = mWorld->simInfoFromName(name_sim);
  418. ensure("LLWorldMap::simInfoFromName() test on existing region failed", sim != NULL);
  419. // Test 16 : simInfoFromHandle()
  420. U64 handle = to_region_handle_global(X_WORLD_TEST, Y_WORLD_TEST);
  421. sim = mWorld->simInfoFromHandle(handle);
  422. ensure("LLWorldMap::simInfoFromHandle() test on existing region failed", sim != NULL);
  423. // Test 17 : simNameFromPosGlobal()
  424. LLVector3d pos3( X_WORLD_TEST + REGION_WIDTH_METERS/2, 
  425. Y_WORLD_TEST + REGION_WIDTH_METERS/2, 
  426. 0.0f);
  427. success = mWorld->simNameFromPosGlobal(pos3, name_sim);
  428. ensure("LLWorldMap::simNameFromPosGlobal() test on existing region failed", success && (name_sim == SIM_NAME_TEST));
  429. // Test 18 : reset()
  430. try {
  431. mWorld->reset();
  432. } catch (...) {
  433. fail("LLWorldMap::reset() at end test failed");
  434. }
  435. // Test 19 : Verify that all the region list is empty
  436. list = mWorld->getRegionMap();
  437. ensure("LLWorldMap::getRegionMap() empty at end test failed", list.empty());
  438. }
  439. // Test tracking
  440. template<> template<>
  441. void worldmap_object_t::test<3>()
  442. {
  443. // Point to track
  444. LLVector3d pos( X_WORLD_TEST + REGION_WIDTH_METERS/2, Y_WORLD_TEST + REGION_WIDTH_METERS/2, Z_WORLD_TEST);
  445. // Test 20 : no tracking
  446. mWorld->cancelTracking();
  447. ensure("LLWorldMap::cancelTracking() at begin test failed", mWorld->isTracking() == false);
  448. // Test 21 : set tracking
  449. mWorld->setTracking(pos);
  450. ensure("LLWorldMap::setTracking() failed", mWorld->isTracking() && !mWorld->isTrackingValidLocation());
  451. // Test 22 : set click and commit flags
  452. mWorld->setTrackingDoubleClick();
  453. ensure("LLWorldMap::setTrackingDoubleClick() failed", mWorld->isTrackingDoubleClick());
  454. mWorld->setTrackingCommit();
  455. ensure("LLWorldMap::setTrackingCommit() failed", mWorld->isTrackingCommit());
  456. // Test 23 : in rectangle test
  457. bool inRect = mWorld->isTrackingInRectangle( X_WORLD_TEST, Y_WORLD_TEST,  
  458. X_WORLD_TEST + REGION_WIDTH_METERS, 
  459. Y_WORLD_TEST + REGION_WIDTH_METERS);
  460. ensure("LLWorldMap::isTrackingInRectangle() in rectangle failed", inRect);
  461. inRect = mWorld->isTrackingInRectangle( X_WORLD_TEST + REGION_WIDTH_METERS, 
  462. Y_WORLD_TEST + REGION_WIDTH_METERS,  
  463. X_WORLD_TEST + 2 * REGION_WIDTH_METERS, 
  464. Y_WORLD_TEST + 2 * REGION_WIDTH_METERS);
  465. ensure("LLWorldMap::isTrackingInRectangle() outside rectangle failed", !inRect);
  466. // Test 24 : set tracking to valid and invalid
  467. mWorld->setTrackingValid();
  468. ensure("LLWorldMap::setTrackingValid() failed", mWorld->isTrackingValidLocation() && !mWorld->isTrackingInvalidLocation());
  469. mWorld->setTrackingInvalid();
  470. ensure("LLWorldMap::setTrackingInvalid() failed", !mWorld->isTrackingValidLocation() && mWorld->isTrackingInvalidLocation());
  471. // Test 25 : getTrackedPositionGlobal()
  472. LLVector3d res = mWorld->getTrackedPositionGlobal();
  473. ensure("LLWorldMap::getTrackedPositionGlobal() failed", res == pos);
  474. // Test 26 : reset tracking
  475. mWorld->cancelTracking();
  476. ensure("LLWorldMap::cancelTracking() at end test failed", mWorld->isTracking() == false);
  477. }
  478. }