str2ptr_tests.cpp
上传用户:dangjiwu
上传日期:2013-07-19
资源大小:42019k
文件大小:9k
源码类别:

Symbian

开发平台:

Visual C++

  1. /* ***** BEGIN LICENSE BLOCK *****
  2.  * Source last modified: $Id: str2ptr_tests.cpp,v 1.1.1.1.50.3 2004/07/09 01:45:55 hubbe Exp $
  3.  * 
  4.  * Portions Copyright (c) 1995-2004 RealNetworks, Inc. All Rights Reserved.
  5.  * 
  6.  * The contents of this file, and the files included with this file,
  7.  * are subject to the current version of the RealNetworks Public
  8.  * Source License (the "RPSL") available at
  9.  * http://www.helixcommunity.org/content/rpsl unless you have licensed
  10.  * the file under the current version of the RealNetworks Community
  11.  * Source License (the "RCSL") available at
  12.  * http://www.helixcommunity.org/content/rcsl, in which case the RCSL
  13.  * will apply. You may also obtain the license terms directly from
  14.  * RealNetworks.  You may not use this file except in compliance with
  15.  * the RPSL or, if you have a valid RCSL with RealNetworks applicable
  16.  * to this file, the RCSL.  Please see the applicable RPSL or RCSL for
  17.  * the rights, obligations and limitations governing use of the
  18.  * contents of the file.
  19.  * 
  20.  * Alternatively, the contents of this file may be used under the
  21.  * terms of the GNU General Public License Version 2 or later (the
  22.  * "GPL") in which case the provisions of the GPL are applicable
  23.  * instead of those above. If you wish to allow use of your version of
  24.  * this file only under the terms of the GPL, and not to allow others
  25.  * to use your version of this file under the terms of either the RPSL
  26.  * or RCSL, indicate your decision by deleting the provisions above
  27.  * and replace them with the notice and other provisions required by
  28.  * the GPL. If you do not delete the provisions above, a recipient may
  29.  * use your version of this file under the terms of any one of the
  30.  * RPSL, the RCSL or the GPL.
  31.  * 
  32.  * This file is part of the Helix DNA Technology. RealNetworks is the
  33.  * developer of the Original Code and owns the copyrights in the
  34.  * portions it created.
  35.  * 
  36.  * This file, and the files included with this file, is distributed
  37.  * and made available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY
  38.  * KIND, EITHER EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS
  39.  * ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES
  40.  * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET
  41.  * ENJOYMENT OR NON-INFRINGEMENT.
  42.  * 
  43.  * Technology Compatibility Kit Test Suite(s) Location:
  44.  *    http://www.helixcommunity.org/content/tck
  45.  * 
  46.  * Contributor(s):
  47.  * 
  48.  * ***** END LICENSE BLOCK ***** */
  49. #include "./map_spec_tests.h"
  50. #include "chxmapstringtoob.h"
  51. #include "hx_ut_debug.h"
  52. #include "./hxlist.h"
  53. #include "./kv_store.h"
  54. #include "./find_match.h"
  55. template<>
  56. class MapSpecificTests<CHXMapStringToOb>
  57. {
  58. public:
  59.     bool operator()();
  60. private:
  61.     bool TestIterator();
  62.     bool TestIterator2();
  63.     bool TestGetStartPosition();
  64.     bool TestGetNextAssoc();
  65.     bool TestSetCaseSensitive();
  66. };
  67. bool MapSpecificTests<CHXMapStringToOb>::operator() ()
  68. {
  69.     bool ret = (TestIterator() &&
  70. TestIterator2() &&
  71. TestGetStartPosition() &&
  72. TestGetNextAssoc() &&
  73. TestSetCaseSensitive());
  74.     DPRINTF (D_ERROR, ("MapSpecificTests<CHXMapStringToOb> : %dn",
  75.        ret));
  76.     return ret;
  77. }
  78. bool MapSpecificTests<CHXMapStringToOb>::TestIterator()
  79. {
  80.     bool ret = true;
  81.     CHXMapStringToOb map;
  82.     KeyValueStore<CHXString, void*> store;
  83.     for (int i = 0; i < 10; i++)
  84. store.Create(i);
  85.     for (int j = 0; j < store.GetCount(); j++)
  86. map.SetAt(store.GetKey(j), store.GetValue(j));
  87.     CHXMapStringToOb::Iterator itr = map.Begin();
  88.     HLXList<int> matchList;
  89.     for (; ret && (itr != map.End()); ++itr)
  90.     {
  91. int index = 0;
  92. if (FindMatch<CHXString, void*>()(store, itr.get_key(), *itr, index))
  93. {
  94.     if (!matchList.Find(index))
  95. matchList.AddTail(index);
  96.     else
  97. ret = false;
  98. }
  99. else
  100.     ret = false;
  101.     }
  102.     if (ret)
  103. ret = (matchList.GetCount() == map.GetCount());
  104.     return ret;
  105. }
  106. bool MapSpecificTests<CHXMapStringToOb>::TestIterator2()
  107. {
  108.     // This test is the same as TestIterator() except that
  109.     // it uses the default constructor of the iterator.
  110.     bool ret = true;
  111.     CHXMapStringToOb map;
  112.     KeyValueStore<CHXString, void*> store;
  113.     for (int i = 0; i < 10; i++)
  114. store.Create(i);
  115.     for (int j = 0; j < store.GetCount(); j++)
  116. map.SetAt(store.GetKey(j), store.GetValue(j));
  117.     CHXMapStringToOb::Iterator itr;
  118.     HLXList<int> matchList;
  119.     for (itr = map.Begin(); ret && (itr != map.End()); ++itr)
  120.     {
  121. int index = 0;
  122. if (FindMatch<CHXString, void*>()(store, itr.get_key(), *itr, index))
  123. {
  124.     if (!matchList.Find(index))
  125. matchList.AddTail(index);
  126.     else
  127. ret = false;
  128. }
  129. else
  130.     ret = false;
  131.     }
  132.     if (ret)
  133. ret = (matchList.GetCount() == map.GetCount());
  134.     return ret;
  135. }
  136. bool MapSpecificTests<CHXMapStringToOb>::TestGetStartPosition()
  137. {
  138.     bool ret = false;
  139.     CHXMapStringToOb map;
  140.     POSITION pos = map.GetStartPosition();
  141.     if (!pos)
  142.     {
  143. KeyValueStore<CHXString, void*> store;
  144. store.Create(0);
  145. map.SetAt(store.GetKey(0), store.GetValue(0));
  146. pos = map.GetStartPosition();
  147. if (pos)
  148.     ret = true;
  149. else
  150. {
  151.     DPRINTF (D_ERROR, ("MapSpecificTests<CHXMapStringToOb>::TestGetStartPosition() : pos NULL for a non-empty mapn"));
  152. }
  153.     }
  154.     else
  155.     {
  156. DPRINTF (D_ERROR, ("MapSpecificTests<CHXMapStringToOb>::TestGetStartPosition() : pos not NULL for an empty mapn"));
  157.     }
  158.     return ret;
  159. }
  160. bool MapSpecificTests<CHXMapStringToOb>::TestGetNextAssoc()
  161. {
  162.     bool ret = true;
  163.     CHXMapStringToOb map;
  164.     KeyValueStore<CHXString, void*> store;
  165.     for (int i = 0; i < 10; i++)
  166. store.Create(i);
  167.     for (int j = 0; j < store.GetCount(); j++)
  168. map.SetAt(store.GetKey(j), store.GetValue(j));
  169.     POSITION pos = map.GetStartPosition();
  170.     HLXList<int> matchList;
  171.     while (ret && pos)
  172.     {
  173. CHXString key;
  174. const char* pKey;
  175. void* value = 0;
  176. int index = 0;
  177. POSITION tmpPos = pos;
  178. map.GetNextAssoc(tmpPos, key, value);
  179. map.GetNextAssoc(pos, pKey, value);
  180. if (tmpPos != pos)
  181. {
  182.     DPRINTF (D_ERROR, ("MapSpecificTests<CHXMapStringToOb>::TestGetNextAssoc() : The two versions of GetNextAssoc() do not return the same positionn"));
  183.     ret = false;
  184. }
  185. else if (key != pKey)
  186. {
  187.     DPRINTF (D_ERROR, ("MapSpecificTests<CHXMapStringToOb>::TestGetNextAssoc() : The two versions of GetNextAssoc() do not return the same keyn"));
  188.     ret = false;
  189. }
  190. if (!FindMatch<CHXString, void*>()(store, key, value, index))
  191. {
  192.     DPRINTF (D_ERROR, ("MapSpecificTests<CHXMapStringToOb>::TestGetNextAssoc() : failed to find the key/value pairn"));
  193.     
  194.     ret = false;
  195. }
  196. if (matchList.Find(index))
  197. {
  198.     DPRINTF (D_ERROR, ("MapSpecificTests<CHXMapStringToOb>::TestGetNextAssoc() : Item %d already visitedn", index));
  199.     ret = false;
  200. }
  201. else
  202.     matchList.AddTail(index);
  203.     }
  204.     if (ret && (matchList.GetCount() != map.GetCount()))
  205.     {
  206. DPRINTF (D_ERROR, ("MapSpecificTests<CHXMapStringToOb>::TestGetNextAssoc() : items visited count doesn't match map item countn"));
  207. ret = false;
  208.     }
  209.     
  210.     return ret;
  211. }
  212. bool MapSpecificTests<CHXMapStringToOb>::TestSetCaseSensitive()
  213. {
  214.     bool ret = true;
  215.     CHXMapStringToOb map;
  216.     struct StrToObTestData 
  217.     {
  218. const char* m_pKey;
  219. bool m_success;
  220. int m_value;
  221.     };
  222.     struct StrToObTestData testData[] = {
  223.     {"aaron", true  , 0},
  224.     {"Aaron", false , 0},
  225.     {"Craig", false , 1},
  226.     {"craig", false , 1},
  227.     {"cRaig", true  , 1},
  228.     {"HeLiX", true  , 2},
  229.     {"HELIX", false , 2},
  230.     {"helix", false , 2},
  231.     {"heLIX", false , 2}
  232.     };
  233.     int testCount = sizeof(testData) / sizeof(struct StrToObTestData);
  234.     map.SetAt("aaron", (void*)0);
  235.     map.SetAt("cRaig", (void*)1);
  236.     map.SetAt("HeLiX", (void*)2);
  237.     
  238.     for (int i = 0; ret && (i < testCount); i++)
  239.     {
  240. void* value = 0;
  241. bool result = (map.Lookup(testData[i].m_pKey, value) == TRUE);
  242. if (result != testData[i].m_success)
  243. {
  244.     DPRINTF(D_ERROR, ("MapSpecificTests<CHXMapStringToOb>::TestSetCaseSensitive() : Test %d lookup got %d expected %dn",
  245.       i,
  246.       result,
  247.       testData[i].m_success));
  248.     ret = false;
  249. }
  250. else if (result && ((int)value != testData[i].m_value))
  251. {
  252.     DPRINTF(D_ERROR, ("MapSpecificTests<CHXMapStringToOb>::TestSetCaseSensitive() : Test %d value got %d expected %dn",
  253.       i,
  254.       (int)value,
  255.       testData[i].m_value));
  256.     ret = false;
  257. }
  258.     }
  259.     if (ret)
  260.     {
  261. map.RemoveAll();
  262. map.SetCaseSensitive(false);
  263. map.SetAt("aaron", (void*)0);
  264. map.SetAt("cRaig", (void*)1);
  265. map.SetAt("HeLiX", (void*)2);
  266. #ifdef DO_MAP_DUMP
  267.         map.Dump();
  268. #endif /* DO_MAP_DUMP */
  269. for (int j = 0; ret && (j < testCount); j++)
  270. {
  271.     void* value = 0;
  272.     bool result = (map.Lookup(testData[j].m_pKey, value) == TRUE);
  273.             if (!result)
  274.     {
  275. DPRINTF(D_ERROR, ("MapSpecificTests<CHXMapStringToOb>::TestSetCaseSensitive() : Test %d lookup failedn",
  276.   j));
  277. ret = false;
  278.     }
  279.     else if ((int)value != testData[j].m_value)
  280.     {
  281. DPRINTF(D_ERROR, ("MapSpecificTests<CHXMapStringToOb>::TestSetCaseSensitive() : Test %d value got %d expected %dn",
  282.   j,
  283.   (int)value,
  284.   testData[j].m_value));
  285. ret = false;
  286.     }
  287. }
  288.     }
  289.     return ret;
  290. }