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

Symbian

开发平台:

Visual C++

  1. /* ***** BEGIN LICENSE BLOCK *****
  2.  * Source last modified: $Id: tglobals.cpp,v 1.3.36.3 2004/07/09 01:44:00 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 "hxassert.h"
  50. #include "globals/hxglobals.h"
  51. #include "hlxclib/stdlib.h"
  52. #include "hlxclib/time.h"
  53. #include "hxmsgs.h"  
  54. #define TEST_SIZE 0x100
  55. #define TEST_STRING "This is a test, it is only a test."
  56. #define TEST_STRING2 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
  57. struct Foo
  58. {
  59.     char m_foo[TEST_SIZE];
  60. };
  61. const UINT32 g_uInt32 = 0;
  62. const UINT32 g_uInt16 = 0;
  63. const Foo* const g_pFoo = NULL;
  64. const char* const g_pStr = NULL;
  65. const CHXMapStringToString* const g_Str2Str = NULL;
  66. const CHXSimpleList* const g_List = NULL;
  67. const char* const kTestStrings[] =
  68. {
  69.     "foo",  "bar",
  70.     "foo2", "bar2",
  71.     "abc",  "xyz",
  72.     "123",  "890",
  73.     NULL
  74. };
  75. class HXGlobalStr
  76. {
  77. public:
  78.     static char*& Get(GlobalID id, int size, const char* init)
  79.     {
  80. HXGlobalManager* pGM = HXGlobalManager::Instance();
  81. GlobalPtr ptr = pGM->Get(id);
  82. if (!ptr)
  83. {
  84.     ptr = pGM->Add(id, (GlobalType)New(size, init), Delete);
  85. }
  86. return (char*&)*ptr;
  87.     }
  88. protected:
  89.     static char* New(int size, const char* init)
  90.     {
  91. char* p = new char[size];
  92. if (init)
  93. {
  94.     strncpy(p, init, size);
  95.     p[size] = 0;
  96. }
  97. return p;
  98.     }
  99.     static void Delete(GlobalType p)
  100.     {
  101. delete[] (char*)p;
  102.     }
  103. };
  104. int main()
  105. {
  106.     // randomize
  107.     srand(time(NULL));
  108.     fprintf( stderr, "global manager test running....n" );
  109.     ////////////////////////
  110.     //
  111.     // HXGlobalManager tests
  112.     //
  113.     ////////////////////////
  114.     UINT32 uLast32 = 0;
  115.     UINT16 uLast16 = 0;
  116.     // test UINT32 accessor
  117.     {
  118. UINT32& uInt32a = (UINT32&)HXGlobalInt32::Get(&g_uInt32);
  119. UINT32& uInt32b = (UINT32&)HXGlobalInt32::Get(&g_uInt32);
  120. if (&uInt32a != &uInt32b)
  121. {
  122.     fprintf( stderr, "FAILED: UINT32& global addresses don't match.n" );
  123.     return 1;
  124. }
  125. for (UINT32 i = 0; i < 0x80000000; i += rand() % 0x1000)
  126. {
  127.     uInt32a = uLast32 = i;
  128.     if (uInt32b != uInt32a || uInt32a != uLast32)
  129.     {
  130. fprintf( stderr, "FAILED: UINT32& assignment failed.n" );
  131. return 1;
  132.     }
  133. }
  134.     }
  135.     // test UINT16 accessor
  136.     {
  137. UINT16& uInt16a = (UINT16&)HXGlobalInt16::Get(&g_uInt16);
  138. UINT16& uInt16b = (UINT16&)HXGlobalInt16::Get(&g_uInt16);
  139. if (&uInt16a != &uInt16b)
  140. {
  141.     fprintf( stderr, "FAILED: UINT16& global addresses don't match.n" );
  142.     return 1;
  143. }
  144. for (UINT16 i = 0; i < 0x8000; i += rand() % 0x1000)
  145. {
  146.     uInt16a = uLast16 = i;
  147.     if (uInt16b != uInt16a || uInt16a != uLast16)
  148.     {
  149. fprintf( stderr, "FAILED: UINT16& assignment failed.n" );
  150. return 1;
  151.     }
  152. }
  153.     }
  154.     // test pointer accessor
  155.     {
  156. Foo*& pFooa = (Foo*&)HXGlobalPtr::Get(&g_pFoo);
  157. Foo*& pFoob = (Foo*&)HXGlobalPtr::Get(&g_pFoo);
  158. if (&pFooa != &pFoob)
  159. {
  160.     fprintf( stderr, "FAILED: void*& global addresses don't match.n" );
  161.     return 1;
  162. }
  163. pFooa = new Foo;
  164. strcpy(pFooa->m_foo, TEST_STRING);
  165. if (strcmp(pFooa->m_foo, pFoob->m_foo) || strcmp(pFoob->m_foo, TEST_STRING))
  166. {
  167.     fprintf( stderr, "FAILED: void*& modification failed.n" );
  168.     return 1;
  169. }
  170.     }
  171.     // test a vector
  172.     {
  173. char*& pStra = (char*&)HXGlobalStr::Get(&g_pStr, TEST_SIZE, TEST_STRING);
  174. char*& pStrb = (char*&)HXGlobalStr::Get(&g_pStr, TEST_SIZE, TEST_STRING);
  175. if (&pStra != &pStrb)
  176. {
  177.     fprintf( stderr, "FAILED: char*& global addresses don't match.n" );
  178.     return 1;
  179. }
  180. strcpy(pStra, TEST_STRING2);
  181. if (strcmp(pStra, pStrb) || strcmp(pStrb, TEST_STRING2))
  182. {
  183.     fprintf( stderr, "FAILED: char*& modification failed.n" );
  184.     return 1;
  185. }
  186.     }
  187.     // test the ints again
  188.     {
  189. UINT32& uInt32 = (UINT32&)HXGlobalInt32::Get(&g_uInt32);
  190. if (uInt32 != uLast32)
  191. {
  192.     fprintf( stderr, "FAILED: UINT32& match failed.n" );
  193.     return 1;
  194. }
  195. UINT16& uInt16 = (UINT16&)HXGlobalInt16::Get(&g_uInt16);
  196. if (uInt16 != uLast16)
  197. {
  198.     fprintf( stderr, "FAILED: UINT16& match failed.n" );
  199.     return 1;
  200. }
  201.     }
  202.     // test a map
  203.     {
  204. CHXMapStringToString& g_Str2Str = HXGlobalMapStringToString::Get(&::g_Str2Str);
  205. for (const char* const* p = kTestStrings; *p != NULL; p += 2)
  206. {
  207.     g_Str2Str.SetAt(p[0], p[1]);
  208. }
  209.     }
  210.     // now check
  211.     {
  212. CHXMapStringToString& g_Str2Str = HXGlobalMapStringToString::Get(&::g_Str2Str);
  213. for (const char* const* p = kTestStrings; *p != NULL; p += 2)
  214. {
  215.     CHXString value;
  216.     if (g_Str2Str.Lookup(p[0], value))
  217.     {
  218. if (strcmp(value, p[1]))
  219. {
  220.     fprintf( stderr, "FAILED: incorrect map entry.n" );
  221.     return 1;
  222. }
  223.     }
  224.     else
  225.     {
  226. fprintf( stderr, "FAILED: map entry missing.n" );
  227. return 1;
  228.     }
  229. }
  230.     }
  231.     // test a list
  232.     {
  233. CHXSimpleList& g_List = HXGlobalList::Get(&::g_List);
  234. for (const char* const* p = kTestStrings; *p != NULL; ++p)
  235. {
  236.     g_List.AddTail((void*)*p);
  237. }
  238.     }
  239.     // now check
  240.     {
  241. CHXSimpleList& g_List = HXGlobalList::Get(&::g_List);
  242. CHXSimpleList::Iterator i = g_List.Begin();
  243. for (const char* const* p = kTestStrings; *p != NULL; ++p, ++i)
  244. {
  245.     if ((void*)*p != *i)
  246.     {
  247. fprintf( stderr, "FAILED: incorrect list entry.n" );
  248. return 1;
  249.     }
  250. }
  251.     }
  252.     fprintf( stderr, "PASSED!n" ); 
  253.     return 0;
  254. }