tglobals.cpp
上传用户:zhongxx05
上传日期:2007-06-06
资源大小:33641k
文件大小:7k
源码类别:

Symbian

开发平台:

C/C++

  1. /* ***** BEGIN LICENSE BLOCK ***** 
  2.  * Version: RCSL 1.0/RPSL 1.0 
  3.  *  
  4.  * Portions Copyright (c) 1995-2002 RealNetworks, Inc. All Rights Reserved. 
  5.  *      
  6.  * The contents of this file, and the files included with this file, are 
  7.  * subject to the current version of the RealNetworks Public Source License 
  8.  * Version 1.0 (the "RPSL") available at 
  9.  * http://www.helixcommunity.org/content/rpsl unless you have licensed 
  10.  * the file under the RealNetworks Community Source License Version 1.0 
  11.  * (the "RCSL") available at http://www.helixcommunity.org/content/rcsl, 
  12.  * in which case the RCSL will apply. You may also obtain the license terms 
  13.  * directly from RealNetworks.  You may not use this file except in 
  14.  * compliance with the RPSL or, if you have a valid RCSL with RealNetworks 
  15.  * applicable to this file, the RCSL.  Please see the applicable RPSL or 
  16.  * RCSL for the rights, obligations and limitations governing use of the 
  17.  * contents of the file.  
  18.  *  
  19.  * This file is part of the Helix DNA Technology. RealNetworks is the 
  20.  * developer of the Original Code and owns the copyrights in the portions 
  21.  * it created. 
  22.  *  
  23.  * This file, and the files included with this file, is distributed and made 
  24.  * available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 
  25.  * EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES, 
  26.  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS 
  27.  * FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 
  28.  * 
  29.  * Technology Compatibility Kit Test Suite(s) Location: 
  30.  *    http://www.helixcommunity.org/content/tck 
  31.  * 
  32.  * Contributor(s): 
  33.  *  
  34.  * ***** END LICENSE BLOCK ***** */ 
  35. #include "hxassert.h"
  36. #include "globals/hxglobals.h"
  37. #include "hlxclib/stdlib.h"
  38. #include "hlxclib/time.h"
  39. #include "hxmsgs.h"  
  40. #define TEST_SIZE 0x100
  41. #define TEST_STRING "This is a test, it is only a test."
  42. #define TEST_STRING2 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
  43. struct Foo
  44. {
  45.     char m_foo[TEST_SIZE];
  46. };
  47. const UINT32 g_uInt32 = 0;
  48. const UINT32 g_uInt16 = 0;
  49. const Foo* const g_pFoo = NULL;
  50. const char* const g_pStr = NULL;
  51. const CHXMapStringToString* const g_Str2Str = NULL;
  52. const CHXSimpleList* const g_List = NULL;
  53. const char* const kTestStrings[] =
  54. {
  55.     "foo",  "bar",
  56.     "foo2", "bar2",
  57.     "abc",  "xyz",
  58.     "123",  "890",
  59.     NULL
  60. };
  61. class HXGlobalStr
  62. {
  63. public:
  64.     static char*& Get(GlobalID id, int size, const char* init)
  65.     {
  66. HXGlobalManager* pGM = HXGlobalManager::Instance();
  67. GlobalPtr ptr = pGM->Get(id);
  68. if (!ptr)
  69. {
  70.     ptr = pGM->Add(id, (GlobalType)New(size, init), Delete);
  71. }
  72. return (char*&)*ptr;
  73.     }
  74. protected:
  75.     static char* New(int size, const char* init)
  76.     {
  77. char* p = new char[size];
  78. if (init)
  79. {
  80.     strncpy(p, init, size);
  81.     p[size] = 0;
  82. }
  83. return p;
  84.     }
  85.     static void Delete(GlobalType p)
  86.     {
  87. delete[] (char*)p;
  88.     }
  89. };
  90. int main()
  91. {
  92.     // randomize
  93.     srand(time(NULL));
  94.     fprintf( stderr, "global manager test running....n" );
  95.     ////////////////////////
  96.     //
  97.     // HXGlobalManager tests
  98.     //
  99.     ////////////////////////
  100.     UINT32 uLast32 = 0;
  101.     UINT16 uLast16 = 0;
  102.     // test UINT32 accessor
  103.     {
  104. UINT32& uInt32a = (UINT32&)HXGlobalInt32::Get(&g_uInt32);
  105. UINT32& uInt32b = (UINT32&)HXGlobalInt32::Get(&g_uInt32);
  106. if (&uInt32a != &uInt32b)
  107. {
  108.     fprintf( stderr, "FAILED: UINT32& global addresses don't match.n" );
  109.     return 1;
  110. }
  111. for (UINT32 i = 0; i < 0x80000000; i += rand() % 0x1000)
  112. {
  113.     uInt32a = uLast32 = i;
  114.     if (uInt32b != uInt32a || uInt32a != uLast32)
  115.     {
  116. fprintf( stderr, "FAILED: UINT32& assignment failed.n" );
  117. return 1;
  118.     }
  119. }
  120.     }
  121.     // test UINT16 accessor
  122.     {
  123. UINT16& uInt16a = (UINT16&)HXGlobalInt16::Get(&g_uInt16);
  124. UINT16& uInt16b = (UINT16&)HXGlobalInt16::Get(&g_uInt16);
  125. if (&uInt16a != &uInt16b)
  126. {
  127.     fprintf( stderr, "FAILED: UINT16& global addresses don't match.n" );
  128.     return 1;
  129. }
  130. for (UINT16 i = 0; i < 0x8000; i += rand() % 0x1000)
  131. {
  132.     uInt16a = uLast16 = i;
  133.     if (uInt16b != uInt16a || uInt16a != uLast16)
  134.     {
  135. fprintf( stderr, "FAILED: UINT16& assignment failed.n" );
  136. return 1;
  137.     }
  138. }
  139.     }
  140.     // test pointer accessor
  141.     {
  142. Foo*& pFooa = (Foo*&)HXGlobalPtr::Get(&g_pFoo);
  143. Foo*& pFoob = (Foo*&)HXGlobalPtr::Get(&g_pFoo);
  144. if (&pFooa != &pFoob)
  145. {
  146.     fprintf( stderr, "FAILED: void*& global addresses don't match.n" );
  147.     return 1;
  148. }
  149. pFooa = new Foo;
  150. strcpy(pFooa->m_foo, TEST_STRING);
  151. if (strcmp(pFooa->m_foo, pFoob->m_foo) || strcmp(pFoob->m_foo, TEST_STRING))
  152. {
  153.     fprintf( stderr, "FAILED: void*& modification failed.n" );
  154.     return 1;
  155. }
  156.     }
  157.     // test a vector
  158.     {
  159. char*& pStra = (char*&)HXGlobalStr::Get(&g_pStr, TEST_SIZE, TEST_STRING);
  160. char*& pStrb = (char*&)HXGlobalStr::Get(&g_pStr, TEST_SIZE, TEST_STRING);
  161. if (&pStra != &pStrb)
  162. {
  163.     fprintf( stderr, "FAILED: char*& global addresses don't match.n" );
  164.     return 1;
  165. }
  166. strcpy(pStra, TEST_STRING2);
  167. if (strcmp(pStra, pStrb) || strcmp(pStrb, TEST_STRING2))
  168. {
  169.     fprintf( stderr, "FAILED: char*& modification failed.n" );
  170.     return 1;
  171. }
  172.     }
  173.     // test the ints again
  174.     {
  175. UINT32& uInt32 = (UINT32&)HXGlobalInt32::Get(&g_uInt32);
  176. if (uInt32 != uLast32)
  177. {
  178.     fprintf( stderr, "FAILED: UINT32& match failed.n" );
  179.     return 1;
  180. }
  181. UINT16& uInt16 = (UINT16&)HXGlobalInt16::Get(&g_uInt16);
  182. if (uInt16 != uLast16)
  183. {
  184.     fprintf( stderr, "FAILED: UINT16& match failed.n" );
  185.     return 1;
  186. }
  187.     }
  188.     // test a map
  189.     {
  190. CHXMapStringToString& g_Str2Str = HXGlobalMapStringToString::Get(&::g_Str2Str);
  191. for (const char* const* p = kTestStrings; *p != NULL; p += 2)
  192. {
  193.     g_Str2Str.SetAt(p[0], p[1]);
  194. }
  195.     }
  196.     // now check
  197.     {
  198. CHXMapStringToString& g_Str2Str = HXGlobalMapStringToString::Get(&::g_Str2Str);
  199. for (const char* const* p = kTestStrings; *p != NULL; p += 2)
  200. {
  201.     CHXString value;
  202.     if (g_Str2Str.Lookup(p[0], value))
  203.     {
  204. if (strcmp(value, p[1]))
  205. {
  206.     fprintf( stderr, "FAILED: incorrect map entry.n" );
  207.     return 1;
  208. }
  209.     }
  210.     else
  211.     {
  212. fprintf( stderr, "FAILED: map entry missing.n" );
  213. return 1;
  214.     }
  215. }
  216.     }
  217.     // test a list
  218.     {
  219. CHXSimpleList& g_List = HXGlobalList::Get(&::g_List);
  220. for (const char* const* p = kTestStrings; *p != NULL; ++p)
  221. {
  222.     g_List.AddTail((void*)*p);
  223. }
  224.     }
  225.     // now check
  226.     {
  227. CHXSimpleList& g_List = HXGlobalList::Get(&::g_List);
  228. CHXSimpleList::Iterator i = g_List.Begin();
  229. for (const char* const* p = kTestStrings; *p != NULL; ++p, ++i)
  230. {
  231.     if ((void*)*p != *i)
  232.     {
  233. fprintf( stderr, "FAILED: incorrect list entry.n" );
  234. return 1;
  235.     }
  236. }
  237.     }
  238.     fprintf( stderr, "PASSED!n" ); 
  239.     return 0;
  240. }