//------------------------------------------------------------------------------ // // This code was generated by a tool. // // TextTransform Samples/Packages/com.unity.collections/Unity.Collections.Tests/FixedStringSizedTests.tt // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // //------------------------------------------------------------------------------ #if !UNITY_DOTSRUNTIME using System; using NUnit.Framework; using Unity.Collections; using Unity.Collections.Tests; #if !UNITY_DOTSRUNTIME // DOTS-Runtime doesn't support UnityEngine using UnityEngine; #endif namespace FixedStringTests { internal class FixedStringSizedTests { #if !UNITY_DOTSRUNTIME // DOTS-Runtime doesn't support UnityEngine class ScriptableObjectFixedString32Bytes : UnityEngine.ScriptableObject { public FixedString32Bytes String; } [Test] public void FixedString32BytesSerializes() { var a = UnityEngine.ScriptableObject.CreateInstance(); a.String = "Hello World"; var b = UnityEngine.Object.Instantiate(a); Assert.AreEqual(a.String, b.String); } #endif [TestCase("ooooooooooooooooooooooooooooo", FormatError.None, TestName="FixedString32AtMaximumSizeWorks_Almost")] [TestCase("oooooooooooooooooooooooooooooo", FormatError.Overflow, TestName="FixedString32AtMaximumSizeWorks_Over")] public void FixedString32BytesAtMaximumSizeWorks(String a, FormatError expectedError) { FixedString32Bytes aa = default; aa.Junk(); var error = aa.Append(a); Assert.AreEqual(expectedError, error); if (expectedError == FormatError.None) aa.AssertNullTerminated(); else Assert.AreEqual(0, aa.Length); } [Test] public unsafe void FixedString32BytesToFixedList() { FixedString32Bytes a = default; a.Junk(); a.Append("0123"); ref var aList = ref a.AsFixedList(); Assert.IsFalse(aList.IsEmpty); Assert.AreEqual(4, aList.Length); Assert.AreEqual(a.Capacity + 1, aList.Capacity); Assert.AreEqual('0', aList[0]); Assert.AreEqual('1', aList[1]); Assert.AreEqual('2', aList[2]); Assert.AreEqual('3', aList[3]); aList.Add((byte)'4'); Assert.AreEqual("01234", a); // because we modified it as a FixedList, it will not be null terminated! Assert.AreNotEqual(0, a.GetUnsafePtr()[a.Length]); } [TestCase("red")] [TestCase("紅色", TestName="{m}(Chinese-Red)")] [TestCase("George Washington")] [TestCase("村上春樹", TestName="{m}(HarukiMurakami)")] public unsafe void FixedString32BytesEqualsStringNoGC(string a) { FixedString32Bytes b = a; GCAllocRecorder.ValidateNoGCAllocs(() => { b.Equals(a); }); } [TestCase("red")] [TestCase("紅色", TestName="{m}(Chinese-Red)")] [TestCase("George Washington")] [TestCase("村上春樹", TestName="{m}(HarukiMurakami)")] public void FixedString32BytesToFixedString64Works(String a) { var b = new FixedString32Bytes(a); var c = new FixedString64Bytes(b); String d = c.ToString(); Assert.AreEqual(a, d); } [TestCase("red")] [TestCase("紅色", TestName="{m}(Chinese-Red)")] [TestCase("George Washington")] [TestCase("村上春樹", TestName="{m}(HarukiMurakami)")] public void FixedString32BytesToFixedString128Works(String a) { var b = new FixedString32Bytes(a); var c = new FixedString128Bytes(b); String d = c.ToString(); Assert.AreEqual(a, d); } [TestCase("red")] [TestCase("紅色", TestName="{m}(Chinese-Red)")] [TestCase("George Washington")] [TestCase("村上春樹", TestName="{m}(HarukiMurakami)")] public void FixedString32BytesToFixedString512Works(String a) { var b = new FixedString32Bytes(a); var c = new FixedString512Bytes(b); String d = c.ToString(); Assert.AreEqual(a, d); } [TestCase("red")] [TestCase("紅色", TestName="{m}(Chinese-Red)")] [TestCase("George Washington")] [TestCase("村上春樹", TestName="{m}(HarukiMurakami)")] public void FixedString32BytesToFixedString4096Works(String a) { var b = new FixedString32Bytes(a); var c = new FixedString4096Bytes(b); String d = c.ToString(); Assert.AreEqual(a, d); } #if !UNITY_DOTSRUNTIME // DOTS-Runtime doesn't support UnityEngine class ScriptableObjectFixedString64Bytes : UnityEngine.ScriptableObject { public FixedString64Bytes String; } [Test] public void FixedString64BytesSerializes() { var a = UnityEngine.ScriptableObject.CreateInstance(); a.String = "Hello World"; var b = UnityEngine.Object.Instantiate(a); Assert.AreEqual(a.String, b.String); } #endif [TestCase("ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", FormatError.None, TestName="FixedString64AtMaximumSizeWorks_Almost")] [TestCase("oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", FormatError.Overflow, TestName="FixedString64AtMaximumSizeWorks_Over")] public void FixedString64BytesAtMaximumSizeWorks(String a, FormatError expectedError) { FixedString64Bytes aa = default; aa.Junk(); var error = aa.Append(a); Assert.AreEqual(expectedError, error); if (expectedError == FormatError.None) aa.AssertNullTerminated(); else Assert.AreEqual(0, aa.Length); } [Test] public unsafe void FixedString64BytesToFixedList() { FixedString64Bytes a = default; a.Junk(); a.Append("0123"); ref var aList = ref a.AsFixedList(); Assert.IsFalse(aList.IsEmpty); Assert.AreEqual(4, aList.Length); Assert.AreEqual(a.Capacity + 1, aList.Capacity); Assert.AreEqual('0', aList[0]); Assert.AreEqual('1', aList[1]); Assert.AreEqual('2', aList[2]); Assert.AreEqual('3', aList[3]); aList.Add((byte)'4'); Assert.AreEqual("01234", a); // because we modified it as a FixedList, it will not be null terminated! Assert.AreNotEqual(0, a.GetUnsafePtr()[a.Length]); } [TestCase("red")] [TestCase("紅色", TestName="{m}(Chinese-Red)")] [TestCase("George Washington")] [TestCase("村上春樹", TestName="{m}(HarukiMurakami)")] public unsafe void FixedString64BytesEqualsStringNoGC(string a) { FixedString64Bytes b = a; GCAllocRecorder.ValidateNoGCAllocs(() => { b.Equals(a); }); } [TestCase("red")] [TestCase("紅色", TestName="{m}(Chinese-Red)")] [TestCase("George Washington")] [TestCase("村上春樹", TestName="{m}(HarukiMurakami)")] public void FixedString64BytesToFixedString32Works(String a) { var b = new FixedString64Bytes(a); var c = new FixedString32Bytes(b); String d = c.ToString(); Assert.AreEqual(a, d); } [TestCase("red")] [TestCase("紅色", TestName="{m}(Chinese-Red)")] [TestCase("George Washington")] [TestCase("村上春樹", TestName="{m}(HarukiMurakami)")] public void FixedString64BytesToFixedString128Works(String a) { var b = new FixedString64Bytes(a); var c = new FixedString128Bytes(b); String d = c.ToString(); Assert.AreEqual(a, d); } [TestCase("red")] [TestCase("紅色", TestName="{m}(Chinese-Red)")] [TestCase("George Washington")] [TestCase("村上春樹", TestName="{m}(HarukiMurakami)")] public void FixedString64BytesToFixedString512Works(String a) { var b = new FixedString64Bytes(a); var c = new FixedString512Bytes(b); String d = c.ToString(); Assert.AreEqual(a, d); } [TestCase("red")] [TestCase("紅色", TestName="{m}(Chinese-Red)")] [TestCase("George Washington")] [TestCase("村上春樹", TestName="{m}(HarukiMurakami)")] public void FixedString64BytesToFixedString4096Works(String a) { var b = new FixedString64Bytes(a); var c = new FixedString4096Bytes(b); String d = c.ToString(); Assert.AreEqual(a, d); } #if !UNITY_DOTSRUNTIME // DOTS-Runtime doesn't support UnityEngine class ScriptableObjectFixedString128Bytes : UnityEngine.ScriptableObject { public FixedString128Bytes String; } [Test] public void FixedString128BytesSerializes() { var a = UnityEngine.ScriptableObject.CreateInstance(); a.String = "Hello World"; var b = UnityEngine.Object.Instantiate(a); Assert.AreEqual(a.String, b.String); } #endif [TestCase("ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", FormatError.None, TestName="FixedString128AtMaximumSizeWorks_Almost")] [TestCase("oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", FormatError.Overflow, TestName="FixedString128AtMaximumSizeWorks_Over")] public void FixedString128BytesAtMaximumSizeWorks(String a, FormatError expectedError) { FixedString128Bytes aa = default; aa.Junk(); var error = aa.Append(a); Assert.AreEqual(expectedError, error); if (expectedError == FormatError.None) aa.AssertNullTerminated(); else Assert.AreEqual(0, aa.Length); } [Test] public unsafe void FixedString128BytesToFixedList() { FixedString128Bytes a = default; a.Junk(); a.Append("0123"); ref var aList = ref a.AsFixedList(); Assert.IsFalse(aList.IsEmpty); Assert.AreEqual(4, aList.Length); Assert.AreEqual(a.Capacity + 1, aList.Capacity); Assert.AreEqual('0', aList[0]); Assert.AreEqual('1', aList[1]); Assert.AreEqual('2', aList[2]); Assert.AreEqual('3', aList[3]); aList.Add((byte)'4'); Assert.AreEqual("01234", a); // because we modified it as a FixedList, it will not be null terminated! Assert.AreNotEqual(0, a.GetUnsafePtr()[a.Length]); } [TestCase("red")] [TestCase("紅色", TestName="{m}(Chinese-Red)")] [TestCase("George Washington")] [TestCase("村上春樹", TestName="{m}(HarukiMurakami)")] public unsafe void FixedString128BytesEqualsStringNoGC(string a) { FixedString128Bytes b = a; GCAllocRecorder.ValidateNoGCAllocs(() => { b.Equals(a); }); } [TestCase("red")] [TestCase("紅色", TestName="{m}(Chinese-Red)")] [TestCase("George Washington")] [TestCase("村上春樹", TestName="{m}(HarukiMurakami)")] public void FixedString128BytesToFixedString32Works(String a) { var b = new FixedString128Bytes(a); var c = new FixedString32Bytes(b); String d = c.ToString(); Assert.AreEqual(a, d); } [TestCase("red")] [TestCase("紅色", TestName="{m}(Chinese-Red)")] [TestCase("George Washington")] [TestCase("村上春樹", TestName="{m}(HarukiMurakami)")] public void FixedString128BytesToFixedString64Works(String a) { var b = new FixedString128Bytes(a); var c = new FixedString64Bytes(b); String d = c.ToString(); Assert.AreEqual(a, d); } [TestCase("red")] [TestCase("紅色", TestName="{m}(Chinese-Red)")] [TestCase("George Washington")] [TestCase("村上春樹", TestName="{m}(HarukiMurakami)")] public void FixedString128BytesToFixedString512Works(String a) { var b = new FixedString128Bytes(a); var c = new FixedString512Bytes(b); String d = c.ToString(); Assert.AreEqual(a, d); } [TestCase("red")] [TestCase("紅色", TestName="{m}(Chinese-Red)")] [TestCase("George Washington")] [TestCase("村上春樹", TestName="{m}(HarukiMurakami)")] public void FixedString128BytesToFixedString4096Works(String a) { var b = new FixedString128Bytes(a); var c = new FixedString4096Bytes(b); String d = c.ToString(); Assert.AreEqual(a, d); } #if !UNITY_DOTSRUNTIME // DOTS-Runtime doesn't support UnityEngine class ScriptableObjectFixedString512Bytes : UnityEngine.ScriptableObject { public FixedString512Bytes String; } [Test] public void FixedString512BytesSerializes() { var a = UnityEngine.ScriptableObject.CreateInstance(); a.String = "Hello World"; var b = UnityEngine.Object.Instantiate(a); Assert.AreEqual(a.String, b.String); } #endif [TestCase("ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", FormatError.None, TestName="FixedString512AtMaximumSizeWorks_Almost")] [TestCase("oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", FormatError.Overflow, TestName="FixedString512AtMaximumSizeWorks_Over")] public void FixedString512BytesAtMaximumSizeWorks(String a, FormatError expectedError) { FixedString512Bytes aa = default; aa.Junk(); var error = aa.Append(a); Assert.AreEqual(expectedError, error); if (expectedError == FormatError.None) aa.AssertNullTerminated(); else Assert.AreEqual(0, aa.Length); } [Test] public unsafe void FixedString512BytesToFixedList() { FixedString512Bytes a = default; a.Junk(); a.Append("0123"); ref var aList = ref a.AsFixedList(); Assert.IsFalse(aList.IsEmpty); Assert.AreEqual(4, aList.Length); Assert.AreEqual(a.Capacity + 1, aList.Capacity); Assert.AreEqual('0', aList[0]); Assert.AreEqual('1', aList[1]); Assert.AreEqual('2', aList[2]); Assert.AreEqual('3', aList[3]); aList.Add((byte)'4'); Assert.AreEqual("01234", a); // because we modified it as a FixedList, it will not be null terminated! Assert.AreNotEqual(0, a.GetUnsafePtr()[a.Length]); } [TestCase("red")] [TestCase("紅色", TestName="{m}(Chinese-Red)")] [TestCase("George Washington")] [TestCase("村上春樹", TestName="{m}(HarukiMurakami)")] public unsafe void FixedString512BytesEqualsStringNoGC(string a) { FixedString512Bytes b = a; GCAllocRecorder.ValidateNoGCAllocs(() => { b.Equals(a); }); } [TestCase("red")] [TestCase("紅色", TestName="{m}(Chinese-Red)")] [TestCase("George Washington")] [TestCase("村上春樹", TestName="{m}(HarukiMurakami)")] public void FixedString512BytesToFixedString32Works(String a) { var b = new FixedString512Bytes(a); var c = new FixedString32Bytes(b); String d = c.ToString(); Assert.AreEqual(a, d); } [TestCase("red")] [TestCase("紅色", TestName="{m}(Chinese-Red)")] [TestCase("George Washington")] [TestCase("村上春樹", TestName="{m}(HarukiMurakami)")] public void FixedString512BytesToFixedString64Works(String a) { var b = new FixedString512Bytes(a); var c = new FixedString64Bytes(b); String d = c.ToString(); Assert.AreEqual(a, d); } [TestCase("red")] [TestCase("紅色", TestName="{m}(Chinese-Red)")] [TestCase("George Washington")] [TestCase("村上春樹", TestName="{m}(HarukiMurakami)")] public void FixedString512BytesToFixedString128Works(String a) { var b = new FixedString512Bytes(a); var c = new FixedString128Bytes(b); String d = c.ToString(); Assert.AreEqual(a, d); } [TestCase("red")] [TestCase("紅色", TestName="{m}(Chinese-Red)")] [TestCase("George Washington")] [TestCase("村上春樹", TestName="{m}(HarukiMurakami)")] public void FixedString512BytesToFixedString4096Works(String a) { var b = new FixedString512Bytes(a); var c = new FixedString4096Bytes(b); String d = c.ToString(); Assert.AreEqual(a, d); } #if !UNITY_DOTSRUNTIME // DOTS-Runtime doesn't support UnityEngine class ScriptableObjectFixedString4096Bytes : UnityEngine.ScriptableObject { public FixedString4096Bytes String; } [Test] public void FixedString4096BytesSerializes() { var a = UnityEngine.ScriptableObject.CreateInstance(); a.String = "Hello World"; var b = UnityEngine.Object.Instantiate(a); Assert.AreEqual(a.String, b.String); } #endif [TestCase("ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", FormatError.None, TestName="FixedString4096AtMaximumSizeWorks_Almost")] [TestCase("oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", FormatError.Overflow, TestName="FixedString4096AtMaximumSizeWorks_Over")] public void FixedString4096BytesAtMaximumSizeWorks(String a, FormatError expectedError) { FixedString4096Bytes aa = default; aa.Junk(); var error = aa.Append(a); Assert.AreEqual(expectedError, error); if (expectedError == FormatError.None) aa.AssertNullTerminated(); else Assert.AreEqual(0, aa.Length); } [Test] public unsafe void FixedString4096BytesToFixedList() { FixedString4096Bytes a = default; a.Junk(); a.Append("0123"); ref var aList = ref a.AsFixedList(); Assert.IsFalse(aList.IsEmpty); Assert.AreEqual(4, aList.Length); Assert.AreEqual(a.Capacity + 1, aList.Capacity); Assert.AreEqual('0', aList[0]); Assert.AreEqual('1', aList[1]); Assert.AreEqual('2', aList[2]); Assert.AreEqual('3', aList[3]); aList.Add((byte)'4'); Assert.AreEqual("01234", a); // because we modified it as a FixedList, it will not be null terminated! Assert.AreNotEqual(0, a.GetUnsafePtr()[a.Length]); } [TestCase("red")] [TestCase("紅色", TestName="{m}(Chinese-Red)")] [TestCase("George Washington")] [TestCase("村上春樹", TestName="{m}(HarukiMurakami)")] public unsafe void FixedString4096BytesEqualsStringNoGC(string a) { FixedString4096Bytes b = a; GCAllocRecorder.ValidateNoGCAllocs(() => { b.Equals(a); }); } [TestCase("red")] [TestCase("紅色", TestName="{m}(Chinese-Red)")] [TestCase("George Washington")] [TestCase("村上春樹", TestName="{m}(HarukiMurakami)")] public void FixedString4096BytesToFixedString32Works(String a) { var b = new FixedString4096Bytes(a); var c = new FixedString32Bytes(b); String d = c.ToString(); Assert.AreEqual(a, d); } [TestCase("red")] [TestCase("紅色", TestName="{m}(Chinese-Red)")] [TestCase("George Washington")] [TestCase("村上春樹", TestName="{m}(HarukiMurakami)")] public void FixedString4096BytesToFixedString64Works(String a) { var b = new FixedString4096Bytes(a); var c = new FixedString64Bytes(b); String d = c.ToString(); Assert.AreEqual(a, d); } [TestCase("red")] [TestCase("紅色", TestName="{m}(Chinese-Red)")] [TestCase("George Washington")] [TestCase("村上春樹", TestName="{m}(HarukiMurakami)")] public void FixedString4096BytesToFixedString128Works(String a) { var b = new FixedString4096Bytes(a); var c = new FixedString128Bytes(b); String d = c.ToString(); Assert.AreEqual(a, d); } [TestCase("red")] [TestCase("紅色", TestName="{m}(Chinese-Red)")] [TestCase("George Washington")] [TestCase("村上春樹", TestName="{m}(HarukiMurakami)")] public void FixedString4096BytesToFixedString512Works(String a) { var b = new FixedString4096Bytes(a); var c = new FixedString512Bytes(b); String d = c.ToString(); Assert.AreEqual(a, d); } } } #endif