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

游戏引擎

开发平台:

C++ Builder

  1. /**
  2.  * @file lltimestampcache_tut.cpp
  3.  * @author James Tess
  4.  * @date 2008-12-03
  5.  *
  6.  * $LicenseInfo:firstyear=2008&license=viewergpl$
  7.  * 
  8.  * Copyright (c) 2008-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. #include <tut/tut.hpp>
  34. #include "linden_common.h"
  35. #include "../mapserver/lltimestampcache.h"
  36. #include "lltut.h"
  37. namespace tut
  38. {
  39. struct LLTimestampCacheTestData
  40. {
  41. };
  42. typedef test_group<LLTimestampCacheTestData> LLTimestampCacheTestGroup;
  43. typedef LLTimestampCacheTestGroup::object LLTimestampCacheTestObject;
  44. LLTimestampCacheTestGroup timestampCacheTestGroup("LLTimestampCache");
  45. // Most common usage
  46. template<> template<>
  47. void LLTimestampCacheTestObject::test<1>()
  48. {
  49. LLTimestampCache<std::string, std::string> cache;
  50. // put in some data
  51. cache.insert("key1", "val1", 1);
  52. cache.insert("key2", "val2", 2);
  53. cache.insert("key3", "val3", 3);
  54. ensure_equals("size is 3", cache.size(), 3);
  55. // check some items
  56. ensure("has key1", cache.has("key1"));
  57. ensure("no invalid key", !cache.has("invalid key"));
  58. // get some items
  59. ensure_equals("get key1", cache.get("key1", 4), "val1");
  60. ensure_equals("get invalid key", 
  61. cache.get("invalid key", 4), std::string() );
  62. // timestamps
  63. ensure_equals("key1 timestamp updated", cache.getTimestamp("key1"), 4);
  64. ensure_equals("invalid key timestamp", 
  65. cache.getTimestamp("invalid key"), 0);
  66. }
  67. // New empty cache shouldn't have any entries
  68. template<> template<>
  69. void LLTimestampCacheTestObject::test<2>()
  70. {
  71. LLTimestampCache<std::string, std::string> cache;
  72. ensure_equals("starts empty",   cache.size(), 0);
  73. ensure_equals("has nothing",    cache.has("foo"), false);
  74. ensure_equals("gets nothing",   cache.get("foo", 0), std::string() );
  75. U32 max_time = 0xFFFFFFFF;
  76. ensure_equals("erases nothing", cache.eraseBefore(max_time), 0);
  77. }
  78. // Non empty cache
  79. template<> template<>
  80. void LLTimestampCacheTestObject::test<3>()
  81. {
  82. LLTimestampCache<std::string, std::string> cache;
  83. cache.insert("foo", "bar", 123);
  84. ensure_equals("size one", cache.size(), 1);
  85. ensure_equals("has it", cache.has("foo"), true);
  86. ensure_equals("timestamp correct", cache.getTimestamp("foo"), 123);
  87. std::string value = cache.get("foo", 456);
  88. ensure_equals("get value", value, "bar");
  89. ensure_equals("timestamp updated", cache.getTimestamp("foo"), 456);
  90. ensure_equals("erase nothing", cache.eraseBefore(0), 0);
  91. ensure_equals("erase one", cache.eraseBefore(789), 1);
  92. ensure_equals("empty after erase", cache.size(), 0);
  93. }
  94. // Recache of item should update timestamp
  95. template<> template<>
  96. void LLTimestampCacheTestObject::test<4>()
  97. {
  98. LLTimestampCache<std::string, std::string> cache;
  99. cache.insert("foo", "bar", 123);
  100. cache.insert("foo", "bar", 456);
  101. ensure_equals("duplicate suppressed", cache.size(), 1);
  102. ensure_equals("timestamp replaced", cache.getTimestamp("foo"), 456);
  103. }
  104. // Erasing some items
  105. template<> template<>
  106. void LLTimestampCacheTestObject::test<5>()
  107. {
  108. LLTimestampCache<std::string, std::string> cache;
  109. cache.insert("key1", "val1", 1);
  110. cache.insert("key2", "val2", 2);
  111. cache.insert("key3", "val3", 3);
  112. cache.insert("key4", "val4", 4);
  113. size_t erased = cache.eraseBefore(3);
  114. ensure_equals("erase range", erased, 2);
  115. ensure_equals("cache post erase", cache.size(), 2);
  116. ensure_equals("has key3", cache.has("key3"), true);
  117. ensure_equals("not has key2", cache.has("key2"), false);
  118. }
  119. }