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

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file llprimitive_test.cpp
  3.  * @brief llprimitive tests
  4.  *
  5.  * $LicenseInfo:firstyear=2001&license=viewergpl$
  6.  * 
  7.  * Copyright (c) 2001-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 "linden_common.h"
  33. #include "../test/lltut.h"
  34. #include "../llprimitive.h"
  35. #include "../../llmath/llvolumemgr.h"
  36. class DummyVolumeMgr : public LLVolumeMgr
  37. {
  38. public:
  39. DummyVolumeMgr() : LLVolumeMgr(), mVolumeTest(NULL), mCurrDetailTest(0) {}
  40. ~DummyVolumeMgr() 
  41. {
  42. }
  43. virtual LLVolume *refVolume(const LLVolumeParams &volume_params, const S32 detail) 
  44. {
  45. if (mVolumeTest.isNull() || volume_params != mCurrParamsTest || detail != mCurrDetailTest)
  46. {
  47. F32 volume_detail = LLVolumeLODGroup::getVolumeScaleFromDetail(detail);
  48. mVolumeTest = new LLVolume(volume_params, volume_detail, FALSE, FALSE);
  49. mCurrParamsTest = volume_params;
  50. mCurrDetailTest = detail;
  51. return mVolumeTest;
  52. else 
  53. {
  54. return mVolumeTest;
  55. }
  56. }
  57. virtual void unrefVolume(LLVolume *volumep) 
  58. {
  59. if (mVolumeTest == volumep)
  60. {
  61. mVolumeTest = NULL;
  62. }
  63. }
  64. private:
  65. LLPointer<LLVolume> mVolumeTest;
  66. LLVolumeParams mCurrParamsTest;
  67. S32 mCurrDetailTest;
  68. };
  69. class PRIMITIVE_TEST_SETUP
  70. {
  71. public:
  72. PRIMITIVE_TEST_SETUP()
  73. {
  74. volume_manager_test = new DummyVolumeMgr();
  75. LLPrimitive::setVolumeManager(volume_manager_test);
  76. }
  77. ~PRIMITIVE_TEST_SETUP()
  78. {
  79. LLPrimitive::cleanupVolumeManager();
  80. }
  81. DummyVolumeMgr * volume_manager_test;
  82. }; 
  83. namespace tut
  84. {
  85. struct llprimitive
  86. {
  87. PRIMITIVE_TEST_SETUP setup_class;
  88. };
  89.     
  90. typedef test_group<llprimitive> llprimitive_t;
  91. typedef llprimitive_t::object llprimitive_object_t;
  92. tut::llprimitive_t tut_llprimitive("llprimitive");
  93. template<> template<>
  94. void llprimitive_object_t::test<1>()
  95. {
  96. set_test_name("Test LLPrimitive Instantiation");
  97. LLPrimitive test;
  98. }
  99. template<> template<>
  100. void llprimitive_object_t::test<2>()
  101. {
  102. set_test_name("Test LLPrimitive PCode setter and getter.");
  103. LLPrimitive test;
  104. ensure_equals(test.getPCode(), 0);
  105. LLPCode code = 1;
  106. test.setPCode(code);
  107. ensure_equals(test.getPCode(), code);
  108. }
  109. template<> template<>
  110. void llprimitive_object_t::test<3>()
  111. {
  112. set_test_name("Test llprimitive constructor and initer.");
  113. LLPCode code = 1;
  114. LLPrimitive primitive;
  115. primitive.init_primitive(code);
  116. ensure_equals(primitive.getPCode(), code);
  117. }
  118. template<> template<>
  119. void llprimitive_object_t::test<4>()
  120. {
  121. set_test_name("Test Static llprimitive constructor and initer.");
  122. LLPCode code = 1;
  123. LLPrimitive * primitive = LLPrimitive::createPrimitive(code);
  124. ensure(primitive != NULL);
  125. ensure_equals(primitive->getPCode(), code);
  126. }
  127. template<> template<>
  128. void llprimitive_object_t::test<5>()
  129. {
  130. set_test_name("Test setVolume creation of new unique volume.");
  131. LLPrimitive primitive;
  132. LLVolumeParams params;
  133. // Make sure volume starts off null
  134. ensure(primitive.getVolume() == NULL);
  135. // Make sure we have no texture entries before setting the volume
  136. ensure_equals(primitive.getNumTEs(), 0);
  137. // Test that GEOMETRY has not been flagged as changed.
  138. ensure(!primitive.isChanged(LLXform::GEOMETRY));
  139. // Make sure setVolume returns true
  140. ensure(primitive.setVolume(params, 0, true) == TRUE);
  141. LLVolume* new_volume = primitive.getVolume();
  142. // make sure new volume was actually created
  143. ensure(new_volume != NULL);
  144. // Make sure that now that we've set the volume we have texture entries
  145. ensure_not_equals(primitive.getNumTEs(), 0);
  146. // Make sure that the number of texture entries equals the number of faces in the volume (should be 6)
  147. ensure_equals(new_volume->getNumFaces(), 6);
  148. ensure_equals(primitive.getNumTEs(), new_volume->getNumFaces());
  149. // Test that GEOMETRY has been flagged as changed.
  150. ensure(primitive.isChanged(LLXform::GEOMETRY));
  151. // Run it twice to make sure it doesn't create a different one if params are the same
  152. ensure(primitive.setVolume(params, 0, true) == FALSE);
  153. ensure(new_volume == primitive.getVolume());
  154. // Change the param definition and try setting it again.
  155. params.setRevolutions(4);
  156. ensure(primitive.setVolume(params, 0, true) == TRUE);
  157. // Ensure that we now have a different volume
  158. ensure(new_volume != primitive.getVolume());
  159. }
  160. template<> template<>
  161. void llprimitive_object_t::test<6>()
  162. {
  163. set_test_name("Test setVolume creation of new NOT-unique volume.");
  164. LLPrimitive primitive;
  165. LLVolumeParams params;
  166. // Make sure volume starts off null
  167. ensure(primitive.getVolume() == NULL);
  168. // Make sure we have no texture entries before setting the volume
  169. ensure_equals(primitive.getNumTEs(), 0);
  170. // Test that GEOMETRY has not been flagged as changed.
  171. ensure(!primitive.isChanged(LLXform::GEOMETRY));
  172. // Make sure setVolume returns true
  173. ensure(primitive.setVolume(params, 0, false) == TRUE);
  174. LLVolume* new_volume = primitive.getVolume();
  175. // make sure new volume was actually created
  176. ensure(new_volume != NULL);
  177. // Make sure that now that we've set the volume we have texture entries
  178. ensure_not_equals(primitive.getNumTEs(), 0);
  179. // Make sure that the number of texture entries equals the number of faces in the volume (should be 6)
  180. ensure_equals(new_volume->getNumFaces(), 6);
  181. ensure_equals(primitive.getNumTEs(), new_volume->getNumFaces());
  182. // Test that GEOMETRY has been flagged as changed.
  183. ensure(primitive.isChanged(LLXform::GEOMETRY));
  184. // Run it twice to make sure it doesn't create a different one if params are the same
  185. ensure(primitive.setVolume(params, 0, false) == FALSE);
  186. ensure(new_volume == primitive.getVolume());
  187. // Change the param definition and try setting it again.
  188. params.setRevolutions(4);
  189. ensure(primitive.setVolume(params, 0, false) == TRUE); 
  190. // Ensure that we now have a different volume
  191. ensure(new_volume != primitive.getVolume());
  192. }
  193. }
  194. #include "llmessagesystem_stub.cpp"