No Description
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

FixedStringSizedTests.gen.cs 29KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591
  1. 
  2. //------------------------------------------------------------------------------
  3. // <auto-generated>
  4. // This code was generated by a tool.
  5. //
  6. // TextTransform Samples/Packages/com.unity.collections/Unity.Collections.Tests/FixedStringSizedTests.tt
  7. //
  8. // Changes to this file may cause incorrect behavior and will be lost if
  9. // the code is regenerated.
  10. // </auto-generated>
  11. //------------------------------------------------------------------------------
  12. #if !UNITY_DOTSRUNTIME
  13. using System;
  14. using NUnit.Framework;
  15. using Unity.Collections;
  16. using Unity.Collections.Tests;
  17. #if !UNITY_DOTSRUNTIME // DOTS-Runtime doesn't support UnityEngine
  18. using UnityEngine;
  19. #endif
  20. namespace FixedStringTests
  21. {
  22. internal class FixedStringSizedTests
  23. {
  24. #if !UNITY_DOTSRUNTIME // DOTS-Runtime doesn't support UnityEngine
  25. class ScriptableObjectFixedString32Bytes : UnityEngine.ScriptableObject
  26. {
  27. public FixedString32Bytes String;
  28. }
  29. [Test]
  30. public void FixedString32BytesSerializes()
  31. {
  32. var a = UnityEngine.ScriptableObject.CreateInstance<ScriptableObjectFixedString32Bytes>();
  33. a.String = "Hello World";
  34. var b = UnityEngine.Object.Instantiate(a);
  35. Assert.AreEqual(a.String, b.String);
  36. }
  37. #endif
  38. [TestCase("ooooooooooooooooooooooooooooo", FormatError.None, TestName="FixedString32AtMaximumSizeWorks_Almost")]
  39. [TestCase("oooooooooooooooooooooooooooooo", FormatError.Overflow, TestName="FixedString32AtMaximumSizeWorks_Over")]
  40. public void FixedString32BytesAtMaximumSizeWorks(String a, FormatError expectedError)
  41. {
  42. FixedString32Bytes aa = default;
  43. aa.Junk();
  44. var error = aa.Append(a);
  45. Assert.AreEqual(expectedError, error);
  46. if (expectedError == FormatError.None)
  47. aa.AssertNullTerminated();
  48. else
  49. Assert.AreEqual(0, aa.Length);
  50. }
  51. [Test]
  52. public unsafe void FixedString32BytesToFixedList()
  53. {
  54. FixedString32Bytes a = default;
  55. a.Junk();
  56. a.Append("0123");
  57. ref var aList = ref a.AsFixedList();
  58. Assert.IsFalse(aList.IsEmpty);
  59. Assert.AreEqual(4, aList.Length);
  60. Assert.AreEqual(a.Capacity + 1, aList.Capacity);
  61. Assert.AreEqual('0', aList[0]);
  62. Assert.AreEqual('1', aList[1]);
  63. Assert.AreEqual('2', aList[2]);
  64. Assert.AreEqual('3', aList[3]);
  65. aList.Add((byte)'4');
  66. Assert.AreEqual("01234", a);
  67. // because we modified it as a FixedList, it will not be null terminated!
  68. Assert.AreNotEqual(0, a.GetUnsafePtr()[a.Length]);
  69. }
  70. [TestCase("red")]
  71. [TestCase("紅色", TestName="{m}(Chinese-Red)")]
  72. [TestCase("George Washington")]
  73. [TestCase("村上春樹", TestName="{m}(HarukiMurakami)")]
  74. public unsafe void FixedString32BytesEqualsStringNoGC(string a)
  75. {
  76. FixedString32Bytes b = a;
  77. GCAllocRecorder.ValidateNoGCAllocs(() =>
  78. {
  79. b.Equals(a);
  80. });
  81. }
  82. [TestCase("red")]
  83. [TestCase("紅色", TestName="{m}(Chinese-Red)")]
  84. [TestCase("George Washington")]
  85. [TestCase("村上春樹", TestName="{m}(HarukiMurakami)")]
  86. public void FixedString32BytesToFixedString64Works(String a)
  87. {
  88. var b = new FixedString32Bytes(a);
  89. var c = new FixedString64Bytes(b);
  90. String d = c.ToString();
  91. Assert.AreEqual(a, d);
  92. }
  93. [TestCase("red")]
  94. [TestCase("紅色", TestName="{m}(Chinese-Red)")]
  95. [TestCase("George Washington")]
  96. [TestCase("村上春樹", TestName="{m}(HarukiMurakami)")]
  97. public void FixedString32BytesToFixedString128Works(String a)
  98. {
  99. var b = new FixedString32Bytes(a);
  100. var c = new FixedString128Bytes(b);
  101. String d = c.ToString();
  102. Assert.AreEqual(a, d);
  103. }
  104. [TestCase("red")]
  105. [TestCase("紅色", TestName="{m}(Chinese-Red)")]
  106. [TestCase("George Washington")]
  107. [TestCase("村上春樹", TestName="{m}(HarukiMurakami)")]
  108. public void FixedString32BytesToFixedString512Works(String a)
  109. {
  110. var b = new FixedString32Bytes(a);
  111. var c = new FixedString512Bytes(b);
  112. String d = c.ToString();
  113. Assert.AreEqual(a, d);
  114. }
  115. [TestCase("red")]
  116. [TestCase("紅色", TestName="{m}(Chinese-Red)")]
  117. [TestCase("George Washington")]
  118. [TestCase("村上春樹", TestName="{m}(HarukiMurakami)")]
  119. public void FixedString32BytesToFixedString4096Works(String a)
  120. {
  121. var b = new FixedString32Bytes(a);
  122. var c = new FixedString4096Bytes(b);
  123. String d = c.ToString();
  124. Assert.AreEqual(a, d);
  125. }
  126. #if !UNITY_DOTSRUNTIME // DOTS-Runtime doesn't support UnityEngine
  127. class ScriptableObjectFixedString64Bytes : UnityEngine.ScriptableObject
  128. {
  129. public FixedString64Bytes String;
  130. }
  131. [Test]
  132. public void FixedString64BytesSerializes()
  133. {
  134. var a = UnityEngine.ScriptableObject.CreateInstance<ScriptableObjectFixedString64Bytes>();
  135. a.String = "Hello World";
  136. var b = UnityEngine.Object.Instantiate(a);
  137. Assert.AreEqual(a.String, b.String);
  138. }
  139. #endif
  140. [TestCase("ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", FormatError.None, TestName="FixedString64AtMaximumSizeWorks_Almost")]
  141. [TestCase("oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", FormatError.Overflow, TestName="FixedString64AtMaximumSizeWorks_Over")]
  142. public void FixedString64BytesAtMaximumSizeWorks(String a, FormatError expectedError)
  143. {
  144. FixedString64Bytes aa = default;
  145. aa.Junk();
  146. var error = aa.Append(a);
  147. Assert.AreEqual(expectedError, error);
  148. if (expectedError == FormatError.None)
  149. aa.AssertNullTerminated();
  150. else
  151. Assert.AreEqual(0, aa.Length);
  152. }
  153. [Test]
  154. public unsafe void FixedString64BytesToFixedList()
  155. {
  156. FixedString64Bytes a = default;
  157. a.Junk();
  158. a.Append("0123");
  159. ref var aList = ref a.AsFixedList();
  160. Assert.IsFalse(aList.IsEmpty);
  161. Assert.AreEqual(4, aList.Length);
  162. Assert.AreEqual(a.Capacity + 1, aList.Capacity);
  163. Assert.AreEqual('0', aList[0]);
  164. Assert.AreEqual('1', aList[1]);
  165. Assert.AreEqual('2', aList[2]);
  166. Assert.AreEqual('3', aList[3]);
  167. aList.Add((byte)'4');
  168. Assert.AreEqual("01234", a);
  169. // because we modified it as a FixedList, it will not be null terminated!
  170. Assert.AreNotEqual(0, a.GetUnsafePtr()[a.Length]);
  171. }
  172. [TestCase("red")]
  173. [TestCase("紅色", TestName="{m}(Chinese-Red)")]
  174. [TestCase("George Washington")]
  175. [TestCase("村上春樹", TestName="{m}(HarukiMurakami)")]
  176. public unsafe void FixedString64BytesEqualsStringNoGC(string a)
  177. {
  178. FixedString64Bytes b = a;
  179. GCAllocRecorder.ValidateNoGCAllocs(() =>
  180. {
  181. b.Equals(a);
  182. });
  183. }
  184. [TestCase("red")]
  185. [TestCase("紅色", TestName="{m}(Chinese-Red)")]
  186. [TestCase("George Washington")]
  187. [TestCase("村上春樹", TestName="{m}(HarukiMurakami)")]
  188. public void FixedString64BytesToFixedString32Works(String a)
  189. {
  190. var b = new FixedString64Bytes(a);
  191. var c = new FixedString32Bytes(b);
  192. String d = c.ToString();
  193. Assert.AreEqual(a, d);
  194. }
  195. [TestCase("red")]
  196. [TestCase("紅色", TestName="{m}(Chinese-Red)")]
  197. [TestCase("George Washington")]
  198. [TestCase("村上春樹", TestName="{m}(HarukiMurakami)")]
  199. public void FixedString64BytesToFixedString128Works(String a)
  200. {
  201. var b = new FixedString64Bytes(a);
  202. var c = new FixedString128Bytes(b);
  203. String d = c.ToString();
  204. Assert.AreEqual(a, d);
  205. }
  206. [TestCase("red")]
  207. [TestCase("紅色", TestName="{m}(Chinese-Red)")]
  208. [TestCase("George Washington")]
  209. [TestCase("村上春樹", TestName="{m}(HarukiMurakami)")]
  210. public void FixedString64BytesToFixedString512Works(String a)
  211. {
  212. var b = new FixedString64Bytes(a);
  213. var c = new FixedString512Bytes(b);
  214. String d = c.ToString();
  215. Assert.AreEqual(a, d);
  216. }
  217. [TestCase("red")]
  218. [TestCase("紅色", TestName="{m}(Chinese-Red)")]
  219. [TestCase("George Washington")]
  220. [TestCase("村上春樹", TestName="{m}(HarukiMurakami)")]
  221. public void FixedString64BytesToFixedString4096Works(String a)
  222. {
  223. var b = new FixedString64Bytes(a);
  224. var c = new FixedString4096Bytes(b);
  225. String d = c.ToString();
  226. Assert.AreEqual(a, d);
  227. }
  228. #if !UNITY_DOTSRUNTIME // DOTS-Runtime doesn't support UnityEngine
  229. class ScriptableObjectFixedString128Bytes : UnityEngine.ScriptableObject
  230. {
  231. public FixedString128Bytes String;
  232. }
  233. [Test]
  234. public void FixedString128BytesSerializes()
  235. {
  236. var a = UnityEngine.ScriptableObject.CreateInstance<ScriptableObjectFixedString128Bytes>();
  237. a.String = "Hello World";
  238. var b = UnityEngine.Object.Instantiate(a);
  239. Assert.AreEqual(a.String, b.String);
  240. }
  241. #endif
  242. [TestCase("ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", FormatError.None, TestName="FixedString128AtMaximumSizeWorks_Almost")]
  243. [TestCase("oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", FormatError.Overflow, TestName="FixedString128AtMaximumSizeWorks_Over")]
  244. public void FixedString128BytesAtMaximumSizeWorks(String a, FormatError expectedError)
  245. {
  246. FixedString128Bytes aa = default;
  247. aa.Junk();
  248. var error = aa.Append(a);
  249. Assert.AreEqual(expectedError, error);
  250. if (expectedError == FormatError.None)
  251. aa.AssertNullTerminated();
  252. else
  253. Assert.AreEqual(0, aa.Length);
  254. }
  255. [Test]
  256. public unsafe void FixedString128BytesToFixedList()
  257. {
  258. FixedString128Bytes a = default;
  259. a.Junk();
  260. a.Append("0123");
  261. ref var aList = ref a.AsFixedList();
  262. Assert.IsFalse(aList.IsEmpty);
  263. Assert.AreEqual(4, aList.Length);
  264. Assert.AreEqual(a.Capacity + 1, aList.Capacity);
  265. Assert.AreEqual('0', aList[0]);
  266. Assert.AreEqual('1', aList[1]);
  267. Assert.AreEqual('2', aList[2]);
  268. Assert.AreEqual('3', aList[3]);
  269. aList.Add((byte)'4');
  270. Assert.AreEqual("01234", a);
  271. // because we modified it as a FixedList, it will not be null terminated!
  272. Assert.AreNotEqual(0, a.GetUnsafePtr()[a.Length]);
  273. }
  274. [TestCase("red")]
  275. [TestCase("紅色", TestName="{m}(Chinese-Red)")]
  276. [TestCase("George Washington")]
  277. [TestCase("村上春樹", TestName="{m}(HarukiMurakami)")]
  278. public unsafe void FixedString128BytesEqualsStringNoGC(string a)
  279. {
  280. FixedString128Bytes b = a;
  281. GCAllocRecorder.ValidateNoGCAllocs(() =>
  282. {
  283. b.Equals(a);
  284. });
  285. }
  286. [TestCase("red")]
  287. [TestCase("紅色", TestName="{m}(Chinese-Red)")]
  288. [TestCase("George Washington")]
  289. [TestCase("村上春樹", TestName="{m}(HarukiMurakami)")]
  290. public void FixedString128BytesToFixedString32Works(String a)
  291. {
  292. var b = new FixedString128Bytes(a);
  293. var c = new FixedString32Bytes(b);
  294. String d = c.ToString();
  295. Assert.AreEqual(a, d);
  296. }
  297. [TestCase("red")]
  298. [TestCase("紅色", TestName="{m}(Chinese-Red)")]
  299. [TestCase("George Washington")]
  300. [TestCase("村上春樹", TestName="{m}(HarukiMurakami)")]
  301. public void FixedString128BytesToFixedString64Works(String a)
  302. {
  303. var b = new FixedString128Bytes(a);
  304. var c = new FixedString64Bytes(b);
  305. String d = c.ToString();
  306. Assert.AreEqual(a, d);
  307. }
  308. [TestCase("red")]
  309. [TestCase("紅色", TestName="{m}(Chinese-Red)")]
  310. [TestCase("George Washington")]
  311. [TestCase("村上春樹", TestName="{m}(HarukiMurakami)")]
  312. public void FixedString128BytesToFixedString512Works(String a)
  313. {
  314. var b = new FixedString128Bytes(a);
  315. var c = new FixedString512Bytes(b);
  316. String d = c.ToString();
  317. Assert.AreEqual(a, d);
  318. }
  319. [TestCase("red")]
  320. [TestCase("紅色", TestName="{m}(Chinese-Red)")]
  321. [TestCase("George Washington")]
  322. [TestCase("村上春樹", TestName="{m}(HarukiMurakami)")]
  323. public void FixedString128BytesToFixedString4096Works(String a)
  324. {
  325. var b = new FixedString128Bytes(a);
  326. var c = new FixedString4096Bytes(b);
  327. String d = c.ToString();
  328. Assert.AreEqual(a, d);
  329. }
  330. #if !UNITY_DOTSRUNTIME // DOTS-Runtime doesn't support UnityEngine
  331. class ScriptableObjectFixedString512Bytes : UnityEngine.ScriptableObject
  332. {
  333. public FixedString512Bytes String;
  334. }
  335. [Test]
  336. public void FixedString512BytesSerializes()
  337. {
  338. var a = UnityEngine.ScriptableObject.CreateInstance<ScriptableObjectFixedString512Bytes>();
  339. a.String = "Hello World";
  340. var b = UnityEngine.Object.Instantiate(a);
  341. Assert.AreEqual(a.String, b.String);
  342. }
  343. #endif
  344. [TestCase("ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", FormatError.None, TestName="FixedString512AtMaximumSizeWorks_Almost")]
  345. [TestCase("oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", FormatError.Overflow, TestName="FixedString512AtMaximumSizeWorks_Over")]
  346. public void FixedString512BytesAtMaximumSizeWorks(String a, FormatError expectedError)
  347. {
  348. FixedString512Bytes aa = default;
  349. aa.Junk();
  350. var error = aa.Append(a);
  351. Assert.AreEqual(expectedError, error);
  352. if (expectedError == FormatError.None)
  353. aa.AssertNullTerminated();
  354. else
  355. Assert.AreEqual(0, aa.Length);
  356. }
  357. [Test]
  358. public unsafe void FixedString512BytesToFixedList()
  359. {
  360. FixedString512Bytes a = default;
  361. a.Junk();
  362. a.Append("0123");
  363. ref var aList = ref a.AsFixedList();
  364. Assert.IsFalse(aList.IsEmpty);
  365. Assert.AreEqual(4, aList.Length);
  366. Assert.AreEqual(a.Capacity + 1, aList.Capacity);
  367. Assert.AreEqual('0', aList[0]);
  368. Assert.AreEqual('1', aList[1]);
  369. Assert.AreEqual('2', aList[2]);
  370. Assert.AreEqual('3', aList[3]);
  371. aList.Add((byte)'4');
  372. Assert.AreEqual("01234", a);
  373. // because we modified it as a FixedList, it will not be null terminated!
  374. Assert.AreNotEqual(0, a.GetUnsafePtr()[a.Length]);
  375. }
  376. [TestCase("red")]
  377. [TestCase("紅色", TestName="{m}(Chinese-Red)")]
  378. [TestCase("George Washington")]
  379. [TestCase("村上春樹", TestName="{m}(HarukiMurakami)")]
  380. public unsafe void FixedString512BytesEqualsStringNoGC(string a)
  381. {
  382. FixedString512Bytes b = a;
  383. GCAllocRecorder.ValidateNoGCAllocs(() =>
  384. {
  385. b.Equals(a);
  386. });
  387. }
  388. [TestCase("red")]
  389. [TestCase("紅色", TestName="{m}(Chinese-Red)")]
  390. [TestCase("George Washington")]
  391. [TestCase("村上春樹", TestName="{m}(HarukiMurakami)")]
  392. public void FixedString512BytesToFixedString32Works(String a)
  393. {
  394. var b = new FixedString512Bytes(a);
  395. var c = new FixedString32Bytes(b);
  396. String d = c.ToString();
  397. Assert.AreEqual(a, d);
  398. }
  399. [TestCase("red")]
  400. [TestCase("紅色", TestName="{m}(Chinese-Red)")]
  401. [TestCase("George Washington")]
  402. [TestCase("村上春樹", TestName="{m}(HarukiMurakami)")]
  403. public void FixedString512BytesToFixedString64Works(String a)
  404. {
  405. var b = new FixedString512Bytes(a);
  406. var c = new FixedString64Bytes(b);
  407. String d = c.ToString();
  408. Assert.AreEqual(a, d);
  409. }
  410. [TestCase("red")]
  411. [TestCase("紅色", TestName="{m}(Chinese-Red)")]
  412. [TestCase("George Washington")]
  413. [TestCase("村上春樹", TestName="{m}(HarukiMurakami)")]
  414. public void FixedString512BytesToFixedString128Works(String a)
  415. {
  416. var b = new FixedString512Bytes(a);
  417. var c = new FixedString128Bytes(b);
  418. String d = c.ToString();
  419. Assert.AreEqual(a, d);
  420. }
  421. [TestCase("red")]
  422. [TestCase("紅色", TestName="{m}(Chinese-Red)")]
  423. [TestCase("George Washington")]
  424. [TestCase("村上春樹", TestName="{m}(HarukiMurakami)")]
  425. public void FixedString512BytesToFixedString4096Works(String a)
  426. {
  427. var b = new FixedString512Bytes(a);
  428. var c = new FixedString4096Bytes(b);
  429. String d = c.ToString();
  430. Assert.AreEqual(a, d);
  431. }
  432. #if !UNITY_DOTSRUNTIME // DOTS-Runtime doesn't support UnityEngine
  433. class ScriptableObjectFixedString4096Bytes : UnityEngine.ScriptableObject
  434. {
  435. public FixedString4096Bytes String;
  436. }
  437. [Test]
  438. public void FixedString4096BytesSerializes()
  439. {
  440. var a = UnityEngine.ScriptableObject.CreateInstance<ScriptableObjectFixedString4096Bytes>();
  441. a.String = "Hello World";
  442. var b = UnityEngine.Object.Instantiate(a);
  443. Assert.AreEqual(a.String, b.String);
  444. }
  445. #endif
  446. [TestCase("ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", FormatError.None, TestName="FixedString4096AtMaximumSizeWorks_Almost")]
  447. [TestCase("oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", FormatError.Overflow, TestName="FixedString4096AtMaximumSizeWorks_Over")]
  448. public void FixedString4096BytesAtMaximumSizeWorks(String a, FormatError expectedError)
  449. {
  450. FixedString4096Bytes aa = default;
  451. aa.Junk();
  452. var error = aa.Append(a);
  453. Assert.AreEqual(expectedError, error);
  454. if (expectedError == FormatError.None)
  455. aa.AssertNullTerminated();
  456. else
  457. Assert.AreEqual(0, aa.Length);
  458. }
  459. [Test]
  460. public unsafe void FixedString4096BytesToFixedList()
  461. {
  462. FixedString4096Bytes a = default;
  463. a.Junk();
  464. a.Append("0123");
  465. ref var aList = ref a.AsFixedList();
  466. Assert.IsFalse(aList.IsEmpty);
  467. Assert.AreEqual(4, aList.Length);
  468. Assert.AreEqual(a.Capacity + 1, aList.Capacity);
  469. Assert.AreEqual('0', aList[0]);
  470. Assert.AreEqual('1', aList[1]);
  471. Assert.AreEqual('2', aList[2]);
  472. Assert.AreEqual('3', aList[3]);
  473. aList.Add((byte)'4');
  474. Assert.AreEqual("01234", a);
  475. // because we modified it as a FixedList, it will not be null terminated!
  476. Assert.AreNotEqual(0, a.GetUnsafePtr()[a.Length]);
  477. }
  478. [TestCase("red")]
  479. [TestCase("紅色", TestName="{m}(Chinese-Red)")]
  480. [TestCase("George Washington")]
  481. [TestCase("村上春樹", TestName="{m}(HarukiMurakami)")]
  482. public unsafe void FixedString4096BytesEqualsStringNoGC(string a)
  483. {
  484. FixedString4096Bytes b = a;
  485. GCAllocRecorder.ValidateNoGCAllocs(() =>
  486. {
  487. b.Equals(a);
  488. });
  489. }
  490. [TestCase("red")]
  491. [TestCase("紅色", TestName="{m}(Chinese-Red)")]
  492. [TestCase("George Washington")]
  493. [TestCase("村上春樹", TestName="{m}(HarukiMurakami)")]
  494. public void FixedString4096BytesToFixedString32Works(String a)
  495. {
  496. var b = new FixedString4096Bytes(a);
  497. var c = new FixedString32Bytes(b);
  498. String d = c.ToString();
  499. Assert.AreEqual(a, d);
  500. }
  501. [TestCase("red")]
  502. [TestCase("紅色", TestName="{m}(Chinese-Red)")]
  503. [TestCase("George Washington")]
  504. [TestCase("村上春樹", TestName="{m}(HarukiMurakami)")]
  505. public void FixedString4096BytesToFixedString64Works(String a)
  506. {
  507. var b = new FixedString4096Bytes(a);
  508. var c = new FixedString64Bytes(b);
  509. String d = c.ToString();
  510. Assert.AreEqual(a, d);
  511. }
  512. [TestCase("red")]
  513. [TestCase("紅色", TestName="{m}(Chinese-Red)")]
  514. [TestCase("George Washington")]
  515. [TestCase("村上春樹", TestName="{m}(HarukiMurakami)")]
  516. public void FixedString4096BytesToFixedString128Works(String a)
  517. {
  518. var b = new FixedString4096Bytes(a);
  519. var c = new FixedString128Bytes(b);
  520. String d = c.ToString();
  521. Assert.AreEqual(a, d);
  522. }
  523. [TestCase("red")]
  524. [TestCase("紅色", TestName="{m}(Chinese-Red)")]
  525. [TestCase("George Washington")]
  526. [TestCase("村上春樹", TestName="{m}(HarukiMurakami)")]
  527. public void FixedString4096BytesToFixedString512Works(String a)
  528. {
  529. var b = new FixedString4096Bytes(a);
  530. var c = new FixedString512Bytes(b);
  531. String d = c.ToString();
  532. Assert.AreEqual(a, d);
  533. }
  534. }
  535. }
  536. #endif