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

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file llscriptresource_tut.cpp
  3.  * @brief Test LLScriptResource
  4.  *
  5.  * $LicenseInfo:firstyear=2008&license=viewergpl$
  6.  * 
  7.  * Copyright (c) 2008-2010, Linden Research, Inc.
  8.  * 
  9.  * Second Life Viewer Source Code
  10.  * The source code in this file ("Source Code") is provided by Linden Lab
  11.  * to you under the terms of the GNU General Public License, version 2.0
  12.  * ("GPL"), unless you have obtained a separate licensing agreement
  13.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  14.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  15.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  16.  * 
  17.  * There are special exceptions to the terms and conditions of the GPL as
  18.  * it is applied to this Source Code. View the full text of the exception
  19.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  20.  * online at
  21.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  22.  * 
  23.  * By copying, modifying or distributing this software, you acknowledge
  24.  * that you have read and understood your obligations described above,
  25.  * and agree to abide by those obligations.
  26.  * 
  27.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  28.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  29.  * COMPLETENESS OR PERFORMANCE.
  30.  * $/LicenseInfo$
  31.  */
  32. //#include <tut/tut.h>
  33. #include "linden_common.h"
  34. #include "lltut.h"
  35. #include "llscriptresource.h"
  36. #include "llscriptresourceconsumer.h"
  37. #include "llscriptresourcepool.h"
  38. class TestConsumer : public LLScriptResourceConsumer
  39. {
  40. public:
  41. TestConsumer()
  42. : mUsedURLs(0)
  43. { }
  44. // LLScriptResourceConsumer interface:
  45. S32 getUsedPublicURLs() const
  46. {
  47. return mUsedURLs;
  48. }
  49. // Test details:
  50. S32 mUsedURLs;
  51. };
  52. namespace tut
  53. {
  54. class LLScriptResourceTestData
  55. {
  56. };
  57. typedef test_group<LLScriptResourceTestData> LLScriptResourceTestGroup;
  58. typedef LLScriptResourceTestGroup::object LLScriptResourceTestObject;
  59. LLScriptResourceTestGroup scriptResourceTestGroup("scriptResource");
  60. template<> template<>
  61. void LLScriptResourceTestObject::test<1>()
  62. {
  63. LLScriptResource resource;
  64. U32 total = 42;
  65. resource.setTotal(total);
  66. ensure_equals("Verify set/get total", resource.getTotal(), total);
  67. ensure_equals("Verify all resources are initially available",resource.getAvailable(),total);
  68. // Requesting too many, releasing non-allocated
  69. ensure("Request total + 1 resources should fail",!resource.request(total + 1));
  70. ensure_equals("Verify all resources available after failed request",resource.getAvailable(),total);
  71. ensure("Releasing resources when none allocated should fail",!resource.release());
  72. ensure_equals("All resources should be available after failed release",resource.getAvailable(),total);
  73. ensure("Request one resource", resource.request());
  74. ensure_equals("Verify available resources after successful request",resource.getAvailable(),total - 1);
  75. // Is this right?  Or should we release all used resources if we try to release more than are currently used?
  76. ensure("Release more resources than allocated",!resource.release(2));
  77. ensure_equals("Verify resource availability after failed release",resource.getAvailable(),total - 1);
  78. ensure("Release a resource",resource.release());
  79. ensure_equals("Verify all resources available after successful release",resource.getAvailable(),total);
  80. }
  81. template<> template<>
  82. void LLScriptResourceTestObject::test<2>()
  83. {
  84. LLScriptResource resource;
  85. U32 total = 42;
  86. resource.setTotal(total);
  87. S32 resources_to_request = 30;
  88. ensure("Get multiple resources resources",resource.request(resources_to_request));
  89. ensure_equals("Verify available resources is correct after request of multiple resources",resource.getAvailable(), total - resources_to_request);
  90. S32 resources_to_release = (resources_to_request / 2);
  91. ensure("Release some resources",resource.release(resources_to_release));
  92. S32 expected_available = (total - resources_to_request + resources_to_release);
  93. ensure_equals("Verify available resources after release of some resources",resource.getAvailable(), expected_available);
  94. resources_to_release = (resources_to_request - resources_to_release);
  95. ensure("Release remaining resources",resource.release(resources_to_release));
  96. ensure_equals("Verify available resources after release of remaining resources",resource.getAvailable(), total);
  97. }
  98. template<> template<>
  99. void LLScriptResourceTestObject::test<3>()
  100. {
  101. LLScriptResource resource;
  102. U32 total = 42;
  103. resource.setTotal(total);
  104. ensure("Request all resources",resource.request(total));
  105. U32 low_total = 10;
  106. ensure("Release all resources",resource.release(total));
  107. ensure_equals("Verify all resources available after releasing",resource.getAvailable(),total);
  108. resource.setTotal(low_total);
  109. ensure_equals("Verify low total resources are available after set",resource.getAvailable(),low_total);
  110. }
  111. template<> template<>
  112. void LLScriptResourceTestObject::test<4>()
  113. {
  114. S32 big_resource_total = 100;
  115. S32 small_resource_total = 10;
  116. LLScriptResourcePool big_pool;
  117. big_pool.getPublicURLResource().setTotal(big_resource_total);
  118. LLScriptResourcePool small_pool;
  119. small_pool.getPublicURLResource().setTotal(small_resource_total);
  120. TestConsumer consumer;
  121. LLScriptResourcePool& initial_pool = consumer.getScriptResourcePool();
  122. ensure("Initial resource pool is 'null'.", (&initial_pool == &LLScriptResourcePool::null));
  123. consumer.switchScriptResourcePools(big_pool);
  124. LLScriptResourcePool& get_pool = consumer.getScriptResourcePool();
  125. ensure("Get resource that was set.", (&big_pool == &get_pool));
  126. ensure_equals("No public urls in use yet.", consumer.getUsedPublicURLs(),0);
  127. S32 request_urls = 5;
  128. consumer.mUsedURLs = request_urls;
  129. consumer.getScriptResourcePool().getPublicURLResource().request(request_urls);
  130. ensure_equals("Available urls on big_pool is 5 less than total.",
  131. big_pool.getPublicURLResource().getAvailable(), big_resource_total - request_urls);
  132. ensure("Switching from big pool to small pool",
  133.    consumer.switchScriptResourcePools(small_pool));
  134. ensure_equals("All resources available to big pool again",
  135. big_pool.getPublicURLResource().getAvailable(), big_resource_total);
  136. ensure_equals("Available urls on small pool is 5 less than total.",
  137. small_pool.getPublicURLResource().getAvailable(), small_resource_total - request_urls);
  138. ensure("Switching from small pool to big pool",
  139.    consumer.switchScriptResourcePools(big_pool));
  140. consumer.getScriptResourcePool().getPublicURLResource().release(request_urls);
  141. request_urls = 50; // Too many for the small_pool
  142. consumer.mUsedURLs = request_urls;
  143. consumer.getScriptResourcePool().getPublicURLResource().request(request_urls);
  144. // Verify big pool has them
  145. ensure_equals("Available urls on big pool is 50 less than total.",
  146. big_pool.getPublicURLResource().getAvailable(), big_resource_total - request_urls);
  147. // Verify can't switch to small_pool
  148. ensure("Switching to small pool with too many resources",
  149.    !consumer.switchScriptResourcePools(small_pool));
  150. // Verify big pool still accounting for used resources
  151. ensure_equals("Available urls on big_pool is still 50 less than total.",
  152. big_pool.getPublicURLResource().getAvailable(), big_resource_total - request_urls);
  153. // Verify small pool still has all resources available.
  154. ensure_equals("All resources in small pool are still available.",
  155. small_pool.getPublicURLResource().getAvailable(), small_resource_total);
  156. }
  157. }