unichar.cpp 28 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159
  1. ///////////////////////////////////////////////////////////////////////////////
  2. // Name: tests/strings/unichar.cpp
  3. // Purpose: Test for wxUniChar class
  4. // Author: Vaclav Slavik
  5. // Created: 2007-03-11
  6. // Copyright: (c) 2007 REA Elektronik GmbH
  7. // Licence: wxWindows licence
  8. ///////////////////////////////////////////////////////////////////////////////
  9. // ----------------------------------------------------------------------------
  10. // headers
  11. // ----------------------------------------------------------------------------
  12. #include "testprec.h"
  13. #ifdef __BORLANDC__
  14. #pragma hdrstop
  15. #endif
  16. #ifndef WX_PRECOMP
  17. #include "wx/wx.h"
  18. #endif // WX_PRECOMP
  19. #include "wx/string.h"
  20. // ----------------------------------------------------------------------------
  21. // test class
  22. // ----------------------------------------------------------------------------
  23. class UniCharTestCase : public CppUnit::TestCase
  24. {
  25. public:
  26. UniCharTestCase() {}
  27. private:
  28. CPPUNIT_TEST_SUITE( UniCharTestCase );
  29. CPPUNIT_TEST( CharCompare );
  30. CPPUNIT_TEST( CharCompareIntl );
  31. CPPUNIT_TEST( StringCompare );
  32. CPPUNIT_TEST( ShortCompare );
  33. CPPUNIT_TEST( UnsignedShortCompare );
  34. CPPUNIT_TEST( IntCompare );
  35. CPPUNIT_TEST( UnsignedIntCompare );
  36. CPPUNIT_TEST( LongCompare );
  37. CPPUNIT_TEST( UnsignedLongCompare );
  38. wxIF_LONG_LONG_TYPE( CPPUNIT_TEST( wxLongLongCompare ); )
  39. wxIF_LONG_LONG_TYPE( CPPUNIT_TEST( wxULongLongCompare ); )
  40. wxIF_WCHAR_T_TYPE( CPPUNIT_TEST( WideCharCompare ); )
  41. CPPUNIT_TEST( UniCharAssignmentOperator );
  42. CPPUNIT_TEST( UniCharRefAssignmentOperator );
  43. CPPUNIT_TEST( CharAssignmentOperator );
  44. CPPUNIT_TEST( UnsignedCharAssignmentOperator );
  45. CPPUNIT_TEST( ShortAssignmentOperator );
  46. CPPUNIT_TEST( UnsignedShortAssignmentOperator );
  47. CPPUNIT_TEST( IntAssignmentOperator );
  48. CPPUNIT_TEST( UnsignedIntAssignmentOperator );
  49. CPPUNIT_TEST( LongAssignmentOperator );
  50. CPPUNIT_TEST( UnsignedLongAssignmentOperator );
  51. wxIF_LONG_LONG_TYPE( CPPUNIT_TEST( wxLongLongAssignmentOperator ); )
  52. wxIF_LONG_LONG_TYPE( CPPUNIT_TEST( wxULongLongAssignmentOperator ); )
  53. wxIF_WCHAR_T_TYPE( CPPUNIT_TEST( WideCharAssignmentOperator ); )
  54. CPPUNIT_TEST( CharParenOperator );
  55. CPPUNIT_TEST( UnsignedCharParenOperator );
  56. CPPUNIT_TEST( ShortParenOperator );
  57. CPPUNIT_TEST( UnsignedShortParenOperator );
  58. CPPUNIT_TEST( IntParenOperator );
  59. CPPUNIT_TEST( UnsignedIntParenOperator );
  60. CPPUNIT_TEST( LongParenOperator );
  61. CPPUNIT_TEST( UnsignedLongParenOperator );
  62. wxIF_LONG_LONG_TYPE( CPPUNIT_TEST( wxLongLongParenOperator ); )
  63. wxIF_LONG_LONG_TYPE( CPPUNIT_TEST( wxULongLongParenOperator ); )
  64. wxIF_WCHAR_T_TYPE( CPPUNIT_TEST( WideCharParenOperator ); )
  65. CPPUNIT_TEST(RefUniCharAssignmentOperator);
  66. CPPUNIT_TEST(RefUniCharRefAssignmentOperator);
  67. CPPUNIT_TEST(RefCharAssignmentOperator);
  68. CPPUNIT_TEST( RefShortAssignmentOperator );
  69. CPPUNIT_TEST( RefUnsignedShortAssignmentOperator );
  70. CPPUNIT_TEST( RefIntAssignmentOperator );
  71. CPPUNIT_TEST( RefUnsignedIntAssignmentOperator );
  72. CPPUNIT_TEST( RefLongAssignmentOperator );
  73. CPPUNIT_TEST( RefUnsignedLongAssignmentOperator );
  74. wxIF_LONG_LONG_TYPE( CPPUNIT_TEST( RefwxLongLongAssignmentOperator ); )
  75. wxIF_LONG_LONG_TYPE( CPPUNIT_TEST( RefwxULongLongAssignmentOperator ); )
  76. wxIF_WCHAR_T_TYPE( CPPUNIT_TEST( RefWideCharAssignmentOperator ); )
  77. CPPUNIT_TEST(RefCharParenOperator);
  78. CPPUNIT_TEST( RefShortParenOperator );
  79. CPPUNIT_TEST( RefUnsignedShortParenOperator );
  80. CPPUNIT_TEST( RefIntParenOperator );
  81. CPPUNIT_TEST( RefUnsignedIntParenOperator );
  82. CPPUNIT_TEST( RefLongParenOperator );
  83. CPPUNIT_TEST( RefUnsignedLongParenOperator );
  84. wxIF_LONG_LONG_TYPE( CPPUNIT_TEST( RefwxLongLongParenOperator ); )
  85. wxIF_LONG_LONG_TYPE( CPPUNIT_TEST( RefwxULongLongParenOperator ); )
  86. wxIF_WCHAR_T_TYPE( CPPUNIT_TEST( RefWideCharParenOperator ); )
  87. CPPUNIT_TEST( RefShortCompare );
  88. CPPUNIT_TEST( RefUnsignedShortCompare );
  89. CPPUNIT_TEST( RefIntCompare );
  90. CPPUNIT_TEST( RefUnsignedIntCompare );
  91. CPPUNIT_TEST( RefLongCompare );
  92. CPPUNIT_TEST( RefUnsignedLongCompare );
  93. wxIF_LONG_LONG_TYPE( CPPUNIT_TEST( RefwxLongLongCompare ); )
  94. wxIF_LONG_LONG_TYPE( CPPUNIT_TEST( RefwxULongLongCompare ); )
  95. wxIF_WCHAR_T_TYPE( CPPUNIT_TEST( RefWideCharCompare ); )
  96. #if wxUSE_UNICODE
  97. CPPUNIT_TEST( StringCompareIntl );
  98. #endif // wxUSE_UNICODE
  99. CPPUNIT_TEST_SUITE_END();
  100. void CharCompare();
  101. void CharCompareIntl();
  102. void StringCompare();
  103. void StringCompareIntl();
  104. void ShortCompare();
  105. void UnsignedShortCompare();
  106. void IntCompare();
  107. void UnsignedIntCompare();
  108. void LongCompare();
  109. void UnsignedLongCompare();
  110. wxIF_LONG_LONG_TYPE( void wxLongLongCompare(); )
  111. wxIF_LONG_LONG_TYPE( void wxULongLongCompare(); )
  112. wxIF_WCHAR_T_TYPE( void WideCharCompare(); )
  113. void UniCharAssignmentOperator();
  114. void UniCharRefAssignmentOperator();
  115. void CharAssignmentOperator();
  116. void UnsignedCharAssignmentOperator();
  117. void ShortAssignmentOperator();
  118. void UnsignedShortAssignmentOperator();
  119. void IntAssignmentOperator();
  120. void UnsignedIntAssignmentOperator();
  121. void LongAssignmentOperator();
  122. void UnsignedLongAssignmentOperator();
  123. wxIF_LONG_LONG_TYPE( void wxLongLongAssignmentOperator(); )
  124. wxIF_LONG_LONG_TYPE( void wxULongLongAssignmentOperator(); )
  125. wxIF_WCHAR_T_TYPE( void WideCharAssignmentOperator(); )
  126. void CharParenOperator();
  127. void UnsignedCharParenOperator();
  128. void ShortParenOperator();
  129. void UnsignedShortParenOperator();
  130. void IntParenOperator();
  131. void UnsignedIntParenOperator();
  132. void LongParenOperator();
  133. void UnsignedLongParenOperator();
  134. wxIF_LONG_LONG_TYPE( void wxLongLongParenOperator(); )
  135. wxIF_LONG_LONG_TYPE( void wxULongLongParenOperator(); )
  136. wxIF_WCHAR_T_TYPE( void WideCharParenOperator(); )
  137. void RefUniCharAssignmentOperator();
  138. void RefUniCharRefAssignmentOperator();
  139. void RefCharAssignmentOperator();
  140. void RefUnsignedCharAssignmentOperator();
  141. void RefShortAssignmentOperator();
  142. void RefUnsignedShortAssignmentOperator();
  143. void RefIntAssignmentOperator();
  144. void RefUnsignedIntAssignmentOperator();
  145. void RefLongAssignmentOperator();
  146. void RefUnsignedLongAssignmentOperator();
  147. wxIF_LONG_LONG_TYPE( void RefwxLongLongAssignmentOperator(); )
  148. wxIF_LONG_LONG_TYPE( void RefwxULongLongAssignmentOperator(); )
  149. wxIF_WCHAR_T_TYPE( void RefWideCharAssignmentOperator(); )
  150. void RefCharParenOperator();
  151. void RefUnsignedCharParenOperator();
  152. void RefShortParenOperator();
  153. void RefUnsignedShortParenOperator();
  154. void RefIntParenOperator();
  155. void RefUnsignedIntParenOperator();
  156. void RefLongParenOperator();
  157. void RefUnsignedLongParenOperator();
  158. wxIF_LONG_LONG_TYPE( void RefwxLongLongParenOperator(); )
  159. wxIF_LONG_LONG_TYPE( void RefwxULongLongParenOperator(); )
  160. wxIF_WCHAR_T_TYPE( void RefWideCharParenOperator(); )
  161. void RefShortCompare();
  162. void RefUnsignedShortCompare();
  163. void RefIntCompare();
  164. void RefUnsignedIntCompare();
  165. void RefLongCompare();
  166. void RefUnsignedLongCompare();
  167. wxIF_LONG_LONG_TYPE( void RefwxLongLongCompare(); )
  168. wxIF_LONG_LONG_TYPE( void RefwxULongLongCompare(); )
  169. wxIF_WCHAR_T_TYPE( void RefWideCharCompare(); )
  170. DECLARE_NO_COPY_CLASS(UniCharTestCase)
  171. };
  172. // register in the unnamed registry so that these tests are run by default
  173. CPPUNIT_TEST_SUITE_REGISTRATION( UniCharTestCase );
  174. // also include in its own registry so that these tests can be run alone
  175. CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( UniCharTestCase, "UniCharTestCase" );
  176. void UniCharTestCase::CharCompare()
  177. {
  178. wxUniChar a('a');
  179. wxUniChar b('b');
  180. CPPUNIT_ASSERT( a == a );
  181. CPPUNIT_ASSERT( a == 'a' );
  182. CPPUNIT_ASSERT( a == wxT('a') );
  183. CPPUNIT_ASSERT( a == wxUniChar('a') );
  184. CPPUNIT_ASSERT( a == wxUniChar(wxT('a')) );
  185. CPPUNIT_ASSERT( a == a );
  186. CPPUNIT_ASSERT( 'a' == a );
  187. CPPUNIT_ASSERT( wxT('a') == a );
  188. CPPUNIT_ASSERT( wxUniChar('a') == a );
  189. CPPUNIT_ASSERT( wxUniChar(wxT('a')) == a );
  190. CPPUNIT_ASSERT( a != b );
  191. CPPUNIT_ASSERT( a != 'b' );
  192. CPPUNIT_ASSERT( a != wxT('b') );
  193. CPPUNIT_ASSERT( a != wxUniChar('b') );
  194. CPPUNIT_ASSERT( a != wxUniChar(wxT('b')) );
  195. CPPUNIT_ASSERT( b != a );
  196. CPPUNIT_ASSERT( 'b' != a );
  197. CPPUNIT_ASSERT( wxT('b') != a );
  198. CPPUNIT_ASSERT( wxUniChar('b') != a );
  199. CPPUNIT_ASSERT( wxUniChar(wxT('b')) != a );
  200. CPPUNIT_ASSERT( a < b );
  201. CPPUNIT_ASSERT( a < 'b' );
  202. CPPUNIT_ASSERT( a < wxT('b') );
  203. CPPUNIT_ASSERT( a < wxUniChar('b') );
  204. CPPUNIT_ASSERT( a < wxUniChar(wxT('b')) );
  205. CPPUNIT_ASSERT( b > a );
  206. CPPUNIT_ASSERT( 'b' > a );
  207. CPPUNIT_ASSERT( wxT('b') > a );
  208. CPPUNIT_ASSERT( wxUniChar('b') > a );
  209. CPPUNIT_ASSERT( wxUniChar(wxT('b')) > a );
  210. CPPUNIT_ASSERT( a <= b );
  211. CPPUNIT_ASSERT( a <= 'b' );
  212. CPPUNIT_ASSERT( a <= wxT('b') );
  213. CPPUNIT_ASSERT( a <= wxUniChar('b') );
  214. CPPUNIT_ASSERT( a <= wxUniChar(wxT('b')) );
  215. CPPUNIT_ASSERT( b >= a );
  216. CPPUNIT_ASSERT( 'b' >= a );
  217. CPPUNIT_ASSERT( wxT('b') >= a );
  218. CPPUNIT_ASSERT( wxUniChar('b') >= a );
  219. CPPUNIT_ASSERT( wxUniChar(wxT('b')) >= a );
  220. CPPUNIT_ASSERT( a <= a );
  221. CPPUNIT_ASSERT( a <= 'a' );
  222. CPPUNIT_ASSERT( a <= wxT('a') );
  223. CPPUNIT_ASSERT( a <= wxUniChar('a') );
  224. CPPUNIT_ASSERT( a <= wxUniChar(wxT('a')) );
  225. CPPUNIT_ASSERT( a >= a );
  226. CPPUNIT_ASSERT( 'a' >= a );
  227. CPPUNIT_ASSERT( wxT('a') >= a );
  228. CPPUNIT_ASSERT( wxUniChar('a') >= a );
  229. CPPUNIT_ASSERT( wxUniChar(wxT('a')) >= a );
  230. CPPUNIT_ASSERT( b > a );
  231. CPPUNIT_ASSERT( b > 'a' );
  232. CPPUNIT_ASSERT( b > wxT('a') );
  233. CPPUNIT_ASSERT( b > wxUniChar('a') );
  234. CPPUNIT_ASSERT( b > wxUniChar(wxT('a')) );
  235. CPPUNIT_ASSERT( a < b );
  236. CPPUNIT_ASSERT( 'a' < b );
  237. CPPUNIT_ASSERT( wxT('a') < b );
  238. CPPUNIT_ASSERT( wxUniChar('a') < b );
  239. CPPUNIT_ASSERT( wxUniChar(wxT('a')) < b );
  240. CPPUNIT_ASSERT( b >= a );
  241. CPPUNIT_ASSERT( b >= 'a' );
  242. CPPUNIT_ASSERT( b >= wxT('a') );
  243. CPPUNIT_ASSERT( b >= wxUniChar('a') );
  244. CPPUNIT_ASSERT( b >= wxUniChar(wxT('a')) );
  245. CPPUNIT_ASSERT( a <= b );
  246. CPPUNIT_ASSERT( 'a' <= b );
  247. CPPUNIT_ASSERT( wxT('a') <= b );
  248. CPPUNIT_ASSERT( wxUniChar('a') <= b );
  249. CPPUNIT_ASSERT( wxUniChar(wxT('a')) <= b );
  250. CPPUNIT_ASSERT( b >= b );
  251. CPPUNIT_ASSERT( b >= 'b' );
  252. CPPUNIT_ASSERT( b >= wxT('b') );
  253. CPPUNIT_ASSERT( b >= wxUniChar('b') );
  254. CPPUNIT_ASSERT( b >= wxUniChar(wxT('b')) );
  255. CPPUNIT_ASSERT( b <= b );
  256. CPPUNIT_ASSERT( 'b' <= b );
  257. CPPUNIT_ASSERT( wxT('b') <= b );
  258. CPPUNIT_ASSERT( wxUniChar('b') <= b );
  259. CPPUNIT_ASSERT( wxUniChar(wxT('b')) <= b );
  260. CPPUNIT_ASSERT( b - a == 1 );
  261. CPPUNIT_ASSERT( a - b == -1 );
  262. }
  263. #define CYRILLIC_SMALL_LETTER_YU ((wchar_t)0x044E)
  264. #define ARABIC_LETTER_NOON ((wchar_t)0x0646)
  265. void UniCharTestCase::CharCompareIntl()
  266. {
  267. wxUniChar a(CYRILLIC_SMALL_LETTER_YU);
  268. wxUniChar b(ARABIC_LETTER_NOON);
  269. CPPUNIT_ASSERT( a == a );
  270. CPPUNIT_ASSERT( a == CYRILLIC_SMALL_LETTER_YU );
  271. CPPUNIT_ASSERT( a == wxUniChar(CYRILLIC_SMALL_LETTER_YU) );
  272. CPPUNIT_ASSERT( a != b );
  273. CPPUNIT_ASSERT( a != ARABIC_LETTER_NOON );
  274. CPPUNIT_ASSERT( a != wxUniChar(ARABIC_LETTER_NOON) );
  275. CPPUNIT_ASSERT( a < b );
  276. CPPUNIT_ASSERT( a < ARABIC_LETTER_NOON );
  277. CPPUNIT_ASSERT( a < wxUniChar(ARABIC_LETTER_NOON) );
  278. CPPUNIT_ASSERT( a <= b );
  279. CPPUNIT_ASSERT( a <= ARABIC_LETTER_NOON );
  280. CPPUNIT_ASSERT( a <= wxUniChar(ARABIC_LETTER_NOON) );
  281. CPPUNIT_ASSERT( a <= a );
  282. CPPUNIT_ASSERT( a <= CYRILLIC_SMALL_LETTER_YU );
  283. CPPUNIT_ASSERT( a <= wxUniChar(CYRILLIC_SMALL_LETTER_YU) );
  284. CPPUNIT_ASSERT( b > a );
  285. CPPUNIT_ASSERT( b > CYRILLIC_SMALL_LETTER_YU );
  286. CPPUNIT_ASSERT( b > wxUniChar(CYRILLIC_SMALL_LETTER_YU) );
  287. CPPUNIT_ASSERT( b >= a );
  288. CPPUNIT_ASSERT( b >= CYRILLIC_SMALL_LETTER_YU );
  289. CPPUNIT_ASSERT( b >= wxUniChar(CYRILLIC_SMALL_LETTER_YU) );
  290. CPPUNIT_ASSERT( b >= b );
  291. CPPUNIT_ASSERT( b >= ARABIC_LETTER_NOON );
  292. CPPUNIT_ASSERT( b >= wxUniChar(ARABIC_LETTER_NOON) );
  293. CPPUNIT_ASSERT( b - a == 504 );
  294. CPPUNIT_ASSERT( a - b == -504 );
  295. }
  296. void UniCharTestCase::StringCompare()
  297. {
  298. // test string comparison with chars
  299. wxString sa = "a";
  300. const wxString sb = "b";
  301. char c1 = 'a';
  302. wchar_t c2 = wxT('a');
  303. wxUniChar c3 = 'a';
  304. CPPUNIT_ASSERT( sa == 'a');
  305. CPPUNIT_ASSERT( 'a' == sa);
  306. CPPUNIT_ASSERT( sb != 'a');
  307. CPPUNIT_ASSERT( 'a' != sb);
  308. CPPUNIT_ASSERT( sa == c1);
  309. CPPUNIT_ASSERT( c1 == sa);
  310. CPPUNIT_ASSERT( sb != c1);
  311. CPPUNIT_ASSERT( c1 != sb);
  312. CPPUNIT_ASSERT( sa == c2);
  313. CPPUNIT_ASSERT( c2 == sa);
  314. CPPUNIT_ASSERT( sb != c2);
  315. CPPUNIT_ASSERT( c2 != sb);
  316. CPPUNIT_ASSERT( sa == c3);
  317. CPPUNIT_ASSERT( c3 == sa);
  318. CPPUNIT_ASSERT( sb != c3);
  319. CPPUNIT_ASSERT( c3 != sb);
  320. // test wxUniCharRef:
  321. CPPUNIT_ASSERT( sa == sa[0]);
  322. CPPUNIT_ASSERT( sa[0] == sa);
  323. CPPUNIT_ASSERT( sb != sa[0]);
  324. CPPUNIT_ASSERT( sa[0] != sb);
  325. // test const version of operator[] (returns wxUniChar, not wxUniCharRef):
  326. CPPUNIT_ASSERT( sb == sb[0]);
  327. CPPUNIT_ASSERT( sb[0] == sb);
  328. CPPUNIT_ASSERT( sa != sb[0]);
  329. CPPUNIT_ASSERT( sb[0] != sa);
  330. }
  331. #if wxUSE_UNICODE
  332. void UniCharTestCase::StringCompareIntl()
  333. {
  334. // test string comparison with chars
  335. wxString sa = CYRILLIC_SMALL_LETTER_YU;
  336. const wxString sb = ARABIC_LETTER_NOON;
  337. wchar_t c2 = CYRILLIC_SMALL_LETTER_YU;
  338. wxUniChar c3 = CYRILLIC_SMALL_LETTER_YU;
  339. CPPUNIT_ASSERT( sa == CYRILLIC_SMALL_LETTER_YU);
  340. CPPUNIT_ASSERT( CYRILLIC_SMALL_LETTER_YU == sa);
  341. CPPUNIT_ASSERT( sb != CYRILLIC_SMALL_LETTER_YU);
  342. CPPUNIT_ASSERT( CYRILLIC_SMALL_LETTER_YU != sb);
  343. CPPUNIT_ASSERT( sa == c2);
  344. CPPUNIT_ASSERT( c2 == sa);
  345. CPPUNIT_ASSERT( sb != c2);
  346. CPPUNIT_ASSERT( c2 != sb);
  347. CPPUNIT_ASSERT( sa == c3);
  348. CPPUNIT_ASSERT( c3 == sa);
  349. CPPUNIT_ASSERT( sb != c3);
  350. CPPUNIT_ASSERT( c3 != sb);
  351. // test wxUniCharRef:
  352. CPPUNIT_ASSERT( sa == sa[0]);
  353. CPPUNIT_ASSERT( sa[0] == sa);
  354. CPPUNIT_ASSERT( sb != sa[0]);
  355. CPPUNIT_ASSERT( sa[0] != sb);
  356. // test const version of operator[] (returns wxUniChar, not wxUniCharRef):
  357. CPPUNIT_ASSERT( sb == sb[0]);
  358. CPPUNIT_ASSERT( sb[0] == sb);
  359. CPPUNIT_ASSERT( sa != sb[0]);
  360. CPPUNIT_ASSERT( sb[0] != sa);
  361. }
  362. #endif // wxUSE_UNICODE
  363. #define wxUNICHAR_TEST_INT_COMPARE \
  364. wxUniChar a(aVal); \
  365. CPPUNIT_ASSERT( a == aVal ); \
  366. CPPUNIT_ASSERT( a != bVal ); \
  367. CPPUNIT_ASSERT( a < bVal ); \
  368. CPPUNIT_ASSERT( a <= bVal ); \
  369. CPPUNIT_ASSERT( a > cVal ); \
  370. CPPUNIT_ASSERT( a >= cVal );
  371. void UniCharTestCase::ShortCompare()
  372. {
  373. short aVal = 2;
  374. short bVal = 3;
  375. short cVal = 1;
  376. wxUNICHAR_TEST_INT_COMPARE
  377. }
  378. void UniCharTestCase::UnsignedShortCompare()
  379. {
  380. unsigned short aVal = 2;
  381. unsigned short bVal = 3;
  382. unsigned short cVal = 1;
  383. wxUNICHAR_TEST_INT_COMPARE
  384. }
  385. void UniCharTestCase::IntCompare()
  386. {
  387. int aVal = 2;
  388. int bVal = 3;
  389. int cVal = 1;
  390. wxUNICHAR_TEST_INT_COMPARE
  391. }
  392. void UniCharTestCase::UnsignedIntCompare()
  393. {
  394. unsigned int aVal = 2;
  395. unsigned int bVal = 3;
  396. unsigned int cVal = 1;
  397. wxUNICHAR_TEST_INT_COMPARE
  398. }
  399. void UniCharTestCase::LongCompare()
  400. {
  401. long aVal = 2;
  402. long bVal = 3;
  403. long cVal = 1;
  404. wxUNICHAR_TEST_INT_COMPARE
  405. }
  406. void UniCharTestCase::UnsignedLongCompare()
  407. {
  408. unsigned long aVal = 2;
  409. unsigned long bVal = 3;
  410. unsigned long cVal = 1;
  411. wxUNICHAR_TEST_INT_COMPARE
  412. }
  413. #ifdef wxHAS_LONG_LONG_T_DIFFERENT_FROM_LONG
  414. void UniCharTestCase::wxLongLongCompare()
  415. {
  416. wxLongLong_t aVal = 2;
  417. wxLongLong_t bVal = 3;
  418. wxLongLong_t cVal = 1;
  419. wxUNICHAR_TEST_INT_COMPARE
  420. }
  421. void UniCharTestCase::wxULongLongCompare()
  422. {
  423. wxULongLong_t aVal = 2;
  424. wxULongLong_t bVal = 3;
  425. wxULongLong_t cVal = 1;
  426. wxUNICHAR_TEST_INT_COMPARE
  427. }
  428. #endif
  429. #if wxWCHAR_T_IS_REAL_TYPE
  430. void UniCharTestCase::WideCharCompare()
  431. {
  432. wchar_t aVal = 2;
  433. wchar_t bVal = 3;
  434. wchar_t cVal = 1;
  435. wxUNICHAR_TEST_INT_COMPARE
  436. }
  437. #endif
  438. #undef wxUNICHAR_TEST_INT_COMPARE
  439. #define wxUNICHAR_TEST_ASSIGNMENT_OPERATOR \
  440. wxUniChar a; \
  441. wxUniChar b(bVal); \
  442. a = b; \
  443. CPPUNIT_ASSERT(a == b);
  444. void UniCharTestCase::UniCharAssignmentOperator()
  445. {
  446. wxUniChar a;
  447. wxUniChar b('b');
  448. a = b;
  449. CPPUNIT_ASSERT(a == b);
  450. }
  451. void UniCharTestCase::UniCharRefAssignmentOperator()
  452. {
  453. wxUniChar a;
  454. wxUniChar b('b');
  455. wxString bStr('b');
  456. wxUniCharRef bRef = bStr[0];
  457. a = bRef;
  458. CPPUNIT_ASSERT(a == b);
  459. }
  460. void UniCharTestCase::CharAssignmentOperator()
  461. {
  462. char bVal = 'b';
  463. wxUNICHAR_TEST_ASSIGNMENT_OPERATOR
  464. }
  465. void UniCharTestCase::UnsignedCharAssignmentOperator()
  466. {
  467. unsigned char bVal = 2;
  468. wxUNICHAR_TEST_ASSIGNMENT_OPERATOR
  469. }
  470. void UniCharTestCase::ShortAssignmentOperator()
  471. {
  472. short bVal = 2;
  473. wxUNICHAR_TEST_ASSIGNMENT_OPERATOR
  474. }
  475. void UniCharTestCase::UnsignedShortAssignmentOperator()
  476. {
  477. unsigned short bVal = 2;
  478. wxUNICHAR_TEST_ASSIGNMENT_OPERATOR
  479. }
  480. void UniCharTestCase::IntAssignmentOperator()
  481. {
  482. int bVal = 2;
  483. wxUNICHAR_TEST_ASSIGNMENT_OPERATOR
  484. }
  485. void UniCharTestCase::UnsignedIntAssignmentOperator()
  486. {
  487. unsigned int bVal = 2;
  488. wxUNICHAR_TEST_ASSIGNMENT_OPERATOR
  489. }
  490. void UniCharTestCase::LongAssignmentOperator()
  491. {
  492. long bVal = 2;
  493. wxUNICHAR_TEST_ASSIGNMENT_OPERATOR
  494. }
  495. void UniCharTestCase::UnsignedLongAssignmentOperator()
  496. {
  497. unsigned long bVal = 2;
  498. wxUNICHAR_TEST_ASSIGNMENT_OPERATOR
  499. }
  500. #ifdef wxHAS_LONG_LONG_T_DIFFERENT_FROM_LONG
  501. void UniCharTestCase::wxLongLongAssignmentOperator()
  502. {
  503. wxLongLong_t bVal = 2;
  504. wxUNICHAR_TEST_ASSIGNMENT_OPERATOR
  505. }
  506. void UniCharTestCase::wxULongLongAssignmentOperator()
  507. {
  508. wxULongLong_t bVal = 2;
  509. wxUNICHAR_TEST_ASSIGNMENT_OPERATOR
  510. }
  511. #endif
  512. #if wxWCHAR_T_IS_REAL_TYPE
  513. void UniCharTestCase::WideCharAssignmentOperator()
  514. {
  515. wchar_t bVal = 2;
  516. wxUNICHAR_TEST_ASSIGNMENT_OPERATOR
  517. }
  518. #endif
  519. #undef wxUNICHAR_TEST_ASSIGNMENT_OPERATOR
  520. void UniCharTestCase::CharParenOperator()
  521. {
  522. char aVal;
  523. char bVal = 'b';
  524. wxUniChar b(bVal);
  525. aVal = (char) b;
  526. CPPUNIT_ASSERT(aVal == bVal);
  527. }
  528. void UniCharTestCase::UnsignedCharParenOperator()
  529. {
  530. unsigned char aVal;
  531. unsigned char bVal = 'b';
  532. wxUniChar b(bVal);
  533. aVal = (unsigned char) b;
  534. CPPUNIT_ASSERT(aVal == bVal);
  535. }
  536. void UniCharTestCase::ShortParenOperator()
  537. {
  538. short aVal;
  539. short bVal = 2;
  540. wxUniChar b(bVal);
  541. aVal = (short) b;
  542. CPPUNIT_ASSERT(aVal == bVal);
  543. }
  544. void UniCharTestCase::UnsignedShortParenOperator()
  545. {
  546. unsigned short aVal;
  547. unsigned short bVal = 2;
  548. wxUniChar b(bVal);
  549. aVal = (unsigned short) b;
  550. CPPUNIT_ASSERT(aVal == bVal);
  551. }
  552. void UniCharTestCase::IntParenOperator()
  553. {
  554. int aVal;
  555. int bVal = 2;
  556. wxUniChar b(bVal);
  557. aVal = (int) b;
  558. CPPUNIT_ASSERT(aVal == bVal);
  559. }
  560. void UniCharTestCase::UnsignedIntParenOperator()
  561. {
  562. unsigned int aVal;
  563. unsigned int bVal = 2;
  564. wxUniChar b(bVal);
  565. aVal = (unsigned int) b;
  566. CPPUNIT_ASSERT(aVal == bVal);
  567. }
  568. void UniCharTestCase::LongParenOperator()
  569. {
  570. long aVal;
  571. long bVal = 2;
  572. wxUniChar b(bVal);
  573. aVal = (long) b;
  574. CPPUNIT_ASSERT(aVal == bVal);
  575. }
  576. void UniCharTestCase::UnsignedLongParenOperator()
  577. {
  578. unsigned long aVal;
  579. unsigned long bVal = 2;
  580. wxUniChar b(bVal);
  581. aVal = (unsigned long) b;
  582. CPPUNIT_ASSERT(aVal == bVal);
  583. }
  584. #ifdef wxHAS_LONG_LONG_T_DIFFERENT_FROM_LONG
  585. void UniCharTestCase::wxLongLongParenOperator()
  586. {
  587. wxLongLong_t aVal;
  588. wxLongLong_t bVal = 2;
  589. wxUniChar b(bVal);
  590. aVal = (wxLongLong_t) b;
  591. CPPUNIT_ASSERT(aVal == bVal);
  592. }
  593. void UniCharTestCase::wxULongLongParenOperator()
  594. {
  595. wxULongLong_t aVal;
  596. wxULongLong_t bVal = 2;
  597. wxUniChar b(bVal);
  598. aVal = (wxULongLong_t) b;
  599. CPPUNIT_ASSERT(aVal == bVal);
  600. }
  601. #endif
  602. #if wxWCHAR_T_IS_REAL_TYPE
  603. void UniCharTestCase::WideCharParenOperator()
  604. {
  605. wchar_t aVal;
  606. wchar_t bVal = 2;
  607. wxUniChar b(bVal);
  608. aVal = (wchar_t) b;
  609. CPPUNIT_ASSERT(aVal == bVal);
  610. }
  611. #endif
  612. void UniCharTestCase::RefUniCharAssignmentOperator()
  613. {
  614. wxString dummyStr('0');
  615. wxUniCharRef bRef = dummyStr[0];
  616. wxChar b = 'b';
  617. wxUniChar bVal(b);
  618. bRef = bVal;
  619. CPPUNIT_ASSERT(bRef == b);
  620. }
  621. void UniCharTestCase::RefUniCharRefAssignmentOperator()
  622. {
  623. wxChar b = 'b';
  624. wxString testStr(b);
  625. wxUniCharRef testRef = testStr[0];
  626. wxString dummyStr('0');
  627. wxUniCharRef bRef = dummyStr[0];
  628. bRef = testRef;
  629. CPPUNIT_ASSERT(bRef == testRef);
  630. }
  631. void UniCharTestCase::RefCharAssignmentOperator()
  632. {
  633. wxString dummyStr('0');
  634. wxUniCharRef bRef = dummyStr[0];
  635. char b = 'b';
  636. bRef = b;
  637. CPPUNIT_ASSERT(bRef == b);
  638. }
  639. void UniCharTestCase::RefUnsignedCharAssignmentOperator()
  640. {
  641. wxString dummyStr('0');
  642. wxUniCharRef bRef = dummyStr[0];
  643. unsigned char b = 'b';
  644. bRef = b;
  645. CPPUNIT_ASSERT(bRef == b);
  646. }
  647. void UniCharTestCase::RefShortAssignmentOperator()
  648. {
  649. wxString dummyStr('0');
  650. wxUniCharRef bRef = dummyStr[0];
  651. short b = 2;
  652. bRef = b;
  653. CPPUNIT_ASSERT(bRef == b);
  654. }
  655. void UniCharTestCase::RefUnsignedShortAssignmentOperator()
  656. {
  657. wxString dummyStr('0');
  658. wxUniCharRef bRef = dummyStr[0];
  659. unsigned short b = 2;
  660. bRef = b;
  661. CPPUNIT_ASSERT(bRef == b);
  662. }
  663. void UniCharTestCase::RefIntAssignmentOperator()
  664. {
  665. wxString dummyStr('0');
  666. wxUniCharRef bRef = dummyStr[0];
  667. int b = 2;
  668. bRef = b;
  669. CPPUNIT_ASSERT(bRef == b);
  670. }
  671. void UniCharTestCase::RefUnsignedIntAssignmentOperator()
  672. {
  673. wxString dummyStr('0');
  674. wxUniCharRef bRef = dummyStr[0];
  675. unsigned int b = 2;
  676. bRef = b;
  677. CPPUNIT_ASSERT(bRef == b);
  678. }
  679. void UniCharTestCase::RefLongAssignmentOperator()
  680. {
  681. wxString dummyStr('0');
  682. wxUniCharRef bRef = dummyStr[0];
  683. long b = 2;
  684. bRef = b;
  685. CPPUNIT_ASSERT(bRef == b);
  686. }
  687. void UniCharTestCase::RefUnsignedLongAssignmentOperator()
  688. {
  689. wxString dummyStr('0');
  690. wxUniCharRef bRef = dummyStr[0];
  691. unsigned long b = 2;
  692. bRef = b;
  693. CPPUNIT_ASSERT(bRef == b);
  694. }
  695. #ifdef wxHAS_LONG_LONG_T_DIFFERENT_FROM_LONG
  696. void UniCharTestCase::RefwxLongLongAssignmentOperator()
  697. {
  698. wxString dummyStr('0');
  699. wxUniCharRef bRef = dummyStr[0];
  700. wxLongLong_t b = 2;
  701. bRef = b;
  702. CPPUNIT_ASSERT(bRef == b);
  703. }
  704. void UniCharTestCase::RefwxULongLongAssignmentOperator()
  705. {
  706. wxString dummyStr('0');
  707. wxUniCharRef bRef = dummyStr[0];
  708. unsigned long b = 2;
  709. bRef = b;
  710. CPPUNIT_ASSERT(bRef == b);
  711. }
  712. #endif
  713. #if wxWCHAR_T_IS_REAL_TYPE
  714. void UniCharTestCase::RefWideCharAssignmentOperator()
  715. {
  716. wxString dummyStr('0');
  717. wxUniCharRef bRef = dummyStr[0];
  718. wchar_t b = 2;
  719. bRef = b;
  720. CPPUNIT_ASSERT(bRef == b);
  721. }
  722. #endif
  723. void UniCharTestCase::RefCharParenOperator()
  724. {
  725. char aVal;
  726. char bVal = 'b';
  727. wxString testStr(bVal);
  728. wxUniCharRef bRef = testStr[0];
  729. aVal = (char) bRef;
  730. CPPUNIT_ASSERT(aVal == bVal);
  731. }
  732. void UniCharTestCase::RefUnsignedCharParenOperator()
  733. {
  734. unsigned char aVal;
  735. unsigned char bVal = 'b';
  736. wxString testStr = wxString::Format(wxT("%u"), bVal);
  737. wxUniCharRef bRef = testStr[0];
  738. aVal = (unsigned char) bRef;
  739. CPPUNIT_ASSERT(aVal == bVal);
  740. }
  741. void UniCharTestCase::RefShortParenOperator()
  742. {
  743. short aVal;
  744. short bVal = 2;
  745. wxUniChar b(bVal);
  746. wxString dummyStr("0");
  747. wxUniCharRef bRef = dummyStr[0];
  748. bRef = b;
  749. aVal = (short) bRef;
  750. CPPUNIT_ASSERT(aVal == bVal);
  751. }
  752. void UniCharTestCase::RefUnsignedShortParenOperator()
  753. {
  754. unsigned short aVal;
  755. unsigned short bVal = 2;
  756. wxUniChar b(bVal);
  757. wxString dummyStr("0");
  758. wxUniCharRef bRef = dummyStr[0];
  759. bRef = b;
  760. aVal = (unsigned short) bRef;
  761. CPPUNIT_ASSERT(aVal == bVal);
  762. }
  763. void UniCharTestCase::RefIntParenOperator()
  764. {
  765. int aVal;
  766. int bVal = 2;
  767. wxUniChar b(bVal);
  768. wxString dummyStr("0");
  769. wxUniCharRef bRef = dummyStr[0];
  770. bRef = b;
  771. aVal = (int) bRef;
  772. CPPUNIT_ASSERT(aVal == bVal);
  773. }
  774. void UniCharTestCase::RefUnsignedIntParenOperator()
  775. {
  776. unsigned int aVal;
  777. unsigned int bVal = 2;
  778. wxUniChar b(bVal);
  779. wxString dummyStr("0");
  780. wxUniCharRef bRef = dummyStr[0];
  781. bRef = b;
  782. aVal = (unsigned int) bRef;
  783. CPPUNIT_ASSERT(aVal == bVal);
  784. }
  785. void UniCharTestCase::RefLongParenOperator()
  786. {
  787. long aVal;
  788. long bVal = 2;
  789. wxUniChar b(bVal);
  790. wxString dummyStr("0");
  791. wxUniCharRef bRef = dummyStr[0];
  792. bRef = b;
  793. aVal = (long) bRef;
  794. CPPUNIT_ASSERT(aVal == bVal);
  795. }
  796. void UniCharTestCase::RefUnsignedLongParenOperator()
  797. {
  798. unsigned long aVal;
  799. unsigned long bVal = 2;
  800. wxUniChar b(bVal);
  801. wxString dummyStr("0");
  802. wxUniCharRef bRef = dummyStr[0];
  803. bRef = b;
  804. aVal = (unsigned long) bRef;
  805. CPPUNIT_ASSERT(aVal == bVal);
  806. }
  807. #ifdef wxHAS_LONG_LONG_T_DIFFERENT_FROM_LONG
  808. void UniCharTestCase::RefwxLongLongParenOperator()
  809. {
  810. wxLongLong_t aVal;
  811. wxLongLong_t bVal = 2;
  812. wxUniChar b(bVal);
  813. wxString dummyStr("0");
  814. wxUniCharRef bRef = dummyStr[0];
  815. bRef = b;
  816. aVal = (wxLongLong_t) bRef;
  817. CPPUNIT_ASSERT(aVal == bVal);
  818. }
  819. void UniCharTestCase::RefwxULongLongParenOperator()
  820. {
  821. wxULongLong_t aVal;
  822. wxULongLong_t bVal = 2;
  823. wxUniChar b(bVal);
  824. wxString dummyStr("0");
  825. wxUniCharRef bRef = dummyStr[0];
  826. bRef = b;
  827. aVal = (wxULongLong_t) bRef;
  828. CPPUNIT_ASSERT(aVal == bVal);
  829. }
  830. #endif
  831. #if wxWCHAR_T_IS_REAL_TYPE
  832. void UniCharTestCase::RefWideCharParenOperator()
  833. {
  834. wchar_t aVal;
  835. wchar_t bVal = 2;
  836. wxUniChar b(bVal);
  837. wxString dummyStr("0");
  838. wxUniCharRef bRef = dummyStr[0];
  839. bRef = b;
  840. aVal = (wxLongLong_t) bRef;
  841. CPPUNIT_ASSERT(aVal == bVal);
  842. }
  843. #endif
  844. #define wxUNICHARREF_TEST_INT_COMPARE \
  845. wxUniChar a(aVal); \
  846. wxString dummyStr("0"); \
  847. wxUniCharRef aRef = dummyStr[0]; \
  848. aRef = a; \
  849. CPPUNIT_ASSERT( aRef == aVal ); \
  850. CPPUNIT_ASSERT( aRef != bVal ); \
  851. CPPUNIT_ASSERT( aRef < bVal ); \
  852. CPPUNIT_ASSERT( aRef <= bVal ); \
  853. CPPUNIT_ASSERT( aRef > cVal ); \
  854. CPPUNIT_ASSERT( aRef >= cVal );
  855. void UniCharTestCase::RefShortCompare()
  856. {
  857. short aVal = 2;
  858. short bVal = 3;
  859. short cVal = 1;
  860. wxUNICHARREF_TEST_INT_COMPARE
  861. }
  862. void UniCharTestCase::RefUnsignedShortCompare()
  863. {
  864. unsigned short aVal = 2;
  865. unsigned short bVal = 3;
  866. unsigned short cVal = 1;
  867. wxUNICHARREF_TEST_INT_COMPARE
  868. }
  869. void UniCharTestCase::RefIntCompare()
  870. {
  871. int aVal = 2;
  872. int bVal = 3;
  873. int cVal = 1;
  874. wxUNICHARREF_TEST_INT_COMPARE
  875. }
  876. void UniCharTestCase::RefUnsignedIntCompare()
  877. {
  878. unsigned int aVal = 2;
  879. unsigned int bVal = 3;
  880. unsigned int cVal = 1;
  881. wxUNICHARREF_TEST_INT_COMPARE
  882. }
  883. void UniCharTestCase::RefLongCompare()
  884. {
  885. long aVal = 2;
  886. long bVal = 3;
  887. long cVal = 1;
  888. wxUNICHARREF_TEST_INT_COMPARE
  889. }
  890. void UniCharTestCase::RefUnsignedLongCompare()
  891. {
  892. unsigned long aVal = 2;
  893. unsigned long bVal = 3;
  894. unsigned long cVal = 1;
  895. wxUNICHARREF_TEST_INT_COMPARE
  896. }
  897. #ifdef wxHAS_LONG_LONG_T_DIFFERENT_FROM_LONG
  898. void UniCharTestCase::RefwxLongLongCompare()
  899. {
  900. wxLongLong_t aVal = 2;
  901. wxLongLong_t bVal = 3;
  902. wxLongLong_t cVal = 1;
  903. wxUNICHARREF_TEST_INT_COMPARE
  904. }
  905. void UniCharTestCase::RefwxULongLongCompare()
  906. {
  907. wxULongLong_t aVal = 2;
  908. wxULongLong_t bVal = 3;
  909. wxULongLong_t cVal = 1;
  910. wxUNICHARREF_TEST_INT_COMPARE
  911. }
  912. #endif
  913. #if wxWCHAR_T_IS_REAL_TYPE
  914. void UniCharTestCase::RefWideCharCompare()
  915. {
  916. wchar_t aVal = 2;
  917. wchar_t bVal = 3;
  918. wchar_t cVal = 1;
  919. wxUNICHARREF_TEST_INT_COMPARE
  920. }
  921. #endif