public override string Accept(DArray type) { var x = new StringBuilder(); Append(type.Datas, x); return(x.ToString()); }
private void Format(DArray array) { int columnCount = array.Columns.Count; string colspan = columnCount > 1 ? $" colspan='{columnCount}'" : string.Empty; Write("<table>"); Write("<tr>"); Write($"<td{colspan} class='type'>"); Write(array.TypeHeader); Write("</td>"); Write("</tr>"); WriteColumnHeaders(array.Columns); foreach (var item in array.Items) { Write("<tr>"); WriteArrayItem((dynamic)item, array.Columns, colspan); Write("</tr>"); } Write("</table>"); }
public void Creates_array_of_complex() { Complex2[] complexes = { new Complex2 { N1 = "Hello", N2 = "World" }, new Complex2 { N1 = "Hallo", N2 = "Welt" }, }; var result = _reflector.GetDObject(complexes, 5); var expected = new DArray(); var dcomplex1 = new DComplex("MiP.ObjectDump.Tests.Reflection.ReflectorTests+Complex2", null); var dcomplex2 = new DComplex("MiP.ObjectDump.Tests.Reflection.ReflectorTests+Complex2", null); dcomplex1.AddProperty("N1", new DValue("Hello")); dcomplex1.AddProperty("N2", new DValue("World")); dcomplex2.AddProperty("N1", new DValue("Hallo")); dcomplex2.AddProperty("N2", new DValue("Welt")); expected.Add(dcomplex1); expected.Add(dcomplex2); expected.TypeHeader = "Complex2[] (2 items)"; expected.AddColumns(new[] { "N1", "N2" }); result.Should().BeEquivalentTo(expected, o => o.WithStrictOrdering().IncludingAllRuntimeProperties()); }
static void CountTestSub(bool trackFree) { var expectedCount = 0; var d = new DArray <object>(trackFree); for (var i = 0; i < 1000; i++) { if ((i % 3) == 0) { d[i] = new object(); expectedCount++; Assert.AreEqual(expectedCount, d.Count, "TrackFree = " + trackFree); } } for (var i = 0; i < d.Length; i++) { if ((i % 2) == 0 && d[i] != null) { Assert.IsNotNull(d[i]); d.RemoveAt(i); expectedCount--; Assert.IsNull(d[i]); Assert.AreEqual(expectedCount, d.Count, "TrackFree = " + trackFree); } } for (var i = 0; i < 50; i++) { d.Add(new object()); expectedCount++; Assert.AreEqual(expectedCount, d.Count, "TrackFree = " + trackFree); } }
/// <summary> /// Initializes a new instance of the <see cref="World"/> class. /// </summary> /// <param name="parent">Server this world is part of.</param> /// <exception cref="ArgumentNullException"><paramref name="parent" /> is <c>null</c>.</exception> /// <exception cref="ArgumentException">The unarmed weapon ID is not a valid item template ID.</exception> public World(Server parent) { if (parent == null) { throw new ArgumentNullException("parent"); } _respawnTaskList = new RespawnTaskList(this); // Store the parent _server = parent; // Create some objects _guildMemberPerformer = new GuildMemberPerformer(DbController, FindUser); // Create the unarmed weapon var unarmedWeaponID = ServerSettings.Default.UnarmedItemTemplateID; var unarmedWeaponTemplate = _itemTemplateManager[unarmedWeaponID]; if (unarmedWeaponTemplate == null) { const string errmsg = "Unable to create unarmed weapon - couldn't find item template with ID `{0}`."; if (log.IsFatalEnabled) { log.FatalFormat(errmsg, unarmedWeaponID); } throw new ArgumentException(string.Format(errmsg, unarmedWeaponID)); } _unarmedWeapon = new ItemEntity(unarmedWeaponTemplate, 1); // Load the maps var mapFiles = MapBase.GetMapFiles(ContentPaths.Build); _maps = new DArray <Map>(mapFiles.Count() + 10); foreach (var mapFile in mapFiles) { MapID mapID; if (!MapBase.TryGetIndexFromPath(mapFile, out mapID)) { const string errmsg = "Failed to get the ID of map file `{0}`."; if (log.IsFatalEnabled) { log.FatalFormat(errmsg, mapFile); } throw new ArgumentException(string.Format(errmsg, mapFile)); } var m = new Map(mapID, this); _maps[(int)mapID] = m; m.Load(); } // Trim down the maps array under the assumption we won't be adding more maps _maps.Trim(); // Add some event hooks BanningManager.Instance.AccountBanned -= BanningManager_AccountBanned; BanningManager.Instance.AccountBanned += BanningManager_AccountBanned; }
static void TrimTestSub(bool trackFree) { const int size = 1000; var objs = new object[size]; for (var i = 0; i < size / 2; i++) { if ((i % 3) == 0) { objs[i] = i.ToString(); } } var d = new DArray <object>(size, trackFree); for (var i = 0; i < size; i++) { if (objs[i] != null) { d[i] = objs[i]; } } d.Trim(); // Make sure our data has not changed for (var i = 0; i < size; i++) { if (objs[i] != null) { Assert.AreSame(objs[i], d[i], "TrackFree = " + trackFree); } } // Make sure the null slots are still null for (var i = 0; i < d.Length; i++) { Assert.AreSame(objs[i], d[i], "TrackFree = " + trackFree); } // Make sure that inserts first fill up the gaps, THEN expand var startLen = d.Length; var gaps = startLen - d.Count; for (var i = 0; i < gaps; i++) { d.Insert(new object()); } Assert.AreEqual(startLen, d.Length, "TrackFree = " + trackFree); // Make sure we start expanding now for (var i = 0; i < 10; i++) { var before = d.Length; d.Insert(new object()); Assert.AreEqual(before + 1, d.Length, "TrackFree = " + trackFree); } }
static void EnumerateValueTypeTestSub(bool trackFree) { const int size = 100; var objs = new int[size]; for (var i = 0; i < size; i++) { objs[i] = i * 4; } var d = new DArray <int>(size * 2, trackFree); for (var i = 0; i < size; i++) { d[i] = objs[i]; } foreach (var obj in d) { var i = d.IndexOf(obj); Assert.AreEqual(objs[i], obj); Assert.AreEqual(objs[i], d[i]); objs[i] = -1; } var remainingObjs = objs.Where(obj => obj != -1).Count(); Assert.AreEqual(0, remainingObjs, "One or more items failed to be enumerated since all enumerated " + "items should be equal to -1."); }
static void RemoveInsertTestSub(bool trackFree) { var d = new DArray <object>(trackFree); for (var i = 0; i < 10; i++) { d[i] = new object(); } d.RemoveAt(0); d.RemoveAt(5); d.RemoveAt(6); d.RemoveAt(9); var usedIndices = new List <int>(); for (var i = 0; i < 7; i++) { usedIndices.Add(d.Insert(new object())); } var expected = new int[] { 0, 5, 6, 9, 10, 11, 12 }; Assert.AreEqual(usedIndices.Count(), expected.Length); foreach (var i in usedIndices) { Assert.IsTrue(expected.Contains(i), "TrackFree = " + trackFree); } }
//ECMA-262 section 15.2.3.14 void keys(ref mdr.CallFrame callFrame) { Debug.WriteLine("calling JSObject.keys"); var O = callFrame.Arg0.AsDObject(); if (O == null) { Trace.Fail("TypeError"); } var retArray = new DArray(O.Map.Property.Index + 1); var i = 0; for (var m = O.Map; m.Property.Name != null; m = m.Parent) { if (!m.Property.IsNotEnumerable && !m.Property.IsInherited && (m.Property.IsDataDescriptor || m.Property.IsAccessorDescriptor)) { retArray.Elements[i++].Set(m.Property.Name); } } retArray.Length = i; //Debug.Assert(i == retArray.Length, "Array not populated correctly!"); callFrame.Return.Set(retArray); }
public int Accept(DArray data, TType type, Title x) { if (x.SelfMultiRows) { int oldStartRow = _startRowIndex; int totalRow = 0; try { var elementType = data.Type.ElementType; foreach (var ele in data.Datas) { totalRow += ele.Apply(this, elementType, x); _startRowIndex = oldStartRow + totalRow; } return(totalRow); } finally { _startRowIndex = oldStartRow; } } else { SetTitleValue(x, data.Apply(ToExcelStringVisitor.Ins, type.GetTag("sep"))); return(1); } }
static void Main(string[] args) { DArray<int> da = new DArray<int>(10); int N; Console.WriteLine("N = "); N = int.Parse(Console.ReadLine()); int count = 0;//满足条件的整数个数 for (int i = 2; i <= N; i++) { if (da.Size == count) { da.ReSize(da.Size + 10); } if (i % 5 == 0 || i % 7 == 0) { da[count] = i; count++; } } for (int i = 0; i < count; i++) { Console.Write(da[i].ToString() + " "); } }
/// <summary> /// Handles when a <see cref="GrhData"/> is added to the <see cref="GrhData"/>s DArray. /// </summary> /// <param name="sender">The sender.</param> /// <param name="e">The <see cref="NetGore.Collections.DArrayEventArgs{T}"/> instance containing the event data.</param> static void AddHandler(DArray <GrhData> sender, DArrayEventArgs <GrhData> e) { Debug.Assert(e.Index != GrhIndex.Invalid); var gd = e.Item; if (gd == null) { Debug.Fail("gd is null."); return; } // Set the categorization event so we can keep up with any changes to the categorization. gd.CategorizationChanged -= ChangeCategorizationHandler; gd.CategorizationChanged += ChangeCategorizationHandler; AddToDictionary(gd); if (Added != null) { Added.Raise(gd, EventArgs.Empty); } if (!_isLoading) { if (AddedNew != null) { AddedNew.Raise(gd, EventArgs.Empty); } } }
public static void Load(ContentPaths contentPath, IContentManager cm) { if (IsLoaded) { return; } _isLoaded = true; var path = GetGrhDataFilePath(contentPath); if (cm == null) { throw new ArgumentNullException("cm"); } if (!File.Exists(path)) { throw new FileNotFoundException("GrhData data file not found.", path); } _isLoading = true; try { // Create the GrhData DArray if (_grhDatas == null) { _grhDatas = new DArray <GrhData>(256); } else { _grhDatas.Clear(); } _catDic.Clear(); _grhDatas.ItemAdded -= AddHandler; _grhDatas.ItemAdded += AddHandler; _grhDatas.ItemRemoved -= RemoveHandler; _grhDatas.ItemRemoved += RemoveHandler; // Read and add the GrhDatas in order by their type var reader = GenericValueReader.CreateFromFile(path, _rootNodeName); LoadGrhDatas(reader, _nonAnimatedGrhDatasNodeName, x => StationaryGrhData.Read(x, cm)); LoadGrhDatas(reader, _animatedGrhDatasNodeName, AnimatedGrhData.Read); LoadGrhDatas(reader, _autoAnimatedGrhDatasNodeName, x => AutomaticAnimatedGrhData.Read(x, cm)); // Trim down the GrhData array, mainly for the client since it will never add/remove any GrhDatas // while in the Client, and the Client is what counts, baby! _grhDatas.Trim(); } finally { _isLoading = false; } }
IMessageProcessor[] BuildMessageProcessors(object source) { const BindingFlags bindFlags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.InvokeMethod | BindingFlags.Static; var mpdType = typeof(MessageProcessorHandler); var atbType = typeof(MessageHandlerAttribute); var voidType = typeof(void); var tmpProcessors = new DArray <IMessageProcessor>(); // Search through all types in the Assembly var assemb = Assembly.GetAssembly(source.GetType()); foreach (var type in assemb.GetTypes()) { // Search through every method in the class foreach (var method in type.GetMethods(bindFlags)) { // Only accept a method if it returns a void if (method.ReturnType != voidType) { continue; } // Get all of the MessageAttributes for the method (should only be one) var atbs = (MessageHandlerAttribute[])method.GetCustomAttributes(atbType, true); if (atbs.Length > 1) { const string errmsg = "Multiple MessageHandlerAttributes found for method `{0}`."; Debug.Fail(string.Format(errmsg, method.Name)); throw new ArgumentException(string.Format(errmsg, method.Name), "source"); } // Create the message processor for the method foreach (var atb in atbs) { if (tmpProcessors.CanGet(atb.MsgID) && tmpProcessors[atb.MsgID] != null) { const string errmsg = "A MessageHandlerAttribute with ID `{0}` already exists. Methods in question: {1} and {2}"; Debug.Fail(string.Format(errmsg, atb.MsgID, tmpProcessors[atb.MsgID].Call.Method, method)); throw new DuplicateKeyException(string.Format(errmsg, atb.MsgID, tmpProcessors[atb.MsgID].Call.Method, method)); } var del = (MessageProcessorHandler)Delegate.CreateDelegate(mpdType, source, method); Debug.Assert(del != null); var msgProcessor = CreateMessageProcessor(atb, del); tmpProcessors.Insert(atb.MsgID, msgProcessor); } } } return(tmpProcessors.ToArray()); }
static void AddTestSub(bool trackFree) { var o1 = new object(); var o2 = new object(); var d = new DArray<object>(trackFree) { o1, o2 }; Assert.IsTrue(d.Contains(o1), "TrackFree = " + trackFree); Assert.IsTrue(d.Contains(o2), "TrackFree = " + trackFree); Assert.AreEqual(2, d.Length, "TrackFree = " + trackFree); }
static void LengthTestSub(bool trackFree) { var d = new DArray <object>(trackFree); for (var i = 0; i < 1000; i++) { Assert.AreEqual(i, d.Length, "TrackFree = " + trackFree); d[i] = new object(); } }
static void AddValueTypeTestSub(bool trackFree) { const int o1 = new int(); const int o2 = new int(); var d = new DArray<object>(trackFree) { o1, o2 }; Assert.IsTrue(d.Contains(o1), "TrackFree = " + trackFree); Assert.IsTrue(d.Contains(o2), "TrackFree = " + trackFree); Assert.AreEqual(2, d.Length, "TrackFree = " + trackFree); }
public void Accept(DArray type, StringBuilder line) { line.Append('{'); foreach (var d in type.Datas) { d.Apply(this, line); line.Append(','); } line.Append('}'); }
IMessageProcessor[] BuildMessageProcessors(object source) { const BindingFlags bindFlags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.InvokeMethod | BindingFlags.Static; var mpdType = typeof(MessageProcessorHandler); var atbType = typeof(MessageHandlerAttribute); var voidType = typeof(void); var tmpProcessors = new DArray<IMessageProcessor>(); // Search through all types in the Assembly var assemb = Assembly.GetAssembly(source.GetType()); foreach (var type in assemb.GetTypes()) { // Search through every method in the class foreach (var method in type.GetMethods(bindFlags)) { // Only accept a method if it returns a void if (method.ReturnType != voidType) continue; // Get all of the MessageAttributes for the method (should only be one) var atbs = (MessageHandlerAttribute[])method.GetCustomAttributes(atbType, true); if (atbs.Length > 1) { const string errmsg = "Multiple MessageHandlerAttributes found for method `{0}`."; Debug.Fail(string.Format(errmsg, method.Name)); throw new ArgumentException(string.Format(errmsg, method.Name), "source"); } // Create the message processor for the method foreach (var atb in atbs) { if (tmpProcessors.CanGet(atb.MsgID) && tmpProcessors[atb.MsgID] != null) { const string errmsg = "A MessageHandlerAttribute with ID `{0}` already exists. Methods in question: {1} and {2}"; Debug.Fail(string.Format(errmsg, atb.MsgID, tmpProcessors[atb.MsgID].Call.Method, method)); throw new DuplicateKeyException(string.Format(errmsg, atb.MsgID, tmpProcessors[atb.MsgID].Call.Method, method)); } var del = (MessageProcessorHandler)Delegate.CreateDelegate(mpdType, source, method); Debug.Assert(del != null); var msgProcessor = CreateMessageProcessor(atb, del); tmpProcessors.Insert(atb.MsgID, msgProcessor); } } } return tmpProcessors.ToArray(); }
static void AddTestSub(bool trackFree) { var o1 = new object(); var o2 = new object(); var d = new DArray <object>(trackFree) { o1, o2 }; Assert.IsTrue(d.Contains(o1), "TrackFree = " + trackFree); Assert.IsTrue(d.Contains(o2), "TrackFree = " + trackFree); Assert.AreEqual(2, d.Length, "TrackFree = " + trackFree); }
static void AddValueTypeTestSub(bool trackFree) { const int o1 = new int(); const int o2 = new int(); var d = new DArray <object>(trackFree) { o1, o2 }; Assert.IsTrue(d.Contains(o1), "TrackFree = " + trackFree); Assert.IsTrue(d.Contains(o2), "TrackFree = " + trackFree); Assert.AreEqual(2, d.Length, "TrackFree = " + trackFree); }
static void RemoveTestSub(bool trackFree) { var d = new DArray <object>(trackFree); for (var i = 0; i < 10; i++) { d[i] = new object(); } var o = d[5]; Assert.IsTrue(d.Remove(o)); Assert.IsFalse(d.Contains(o)); }
static void CanGetAndIndexRangeTestSub(bool trackFree) { var d = new DArray<object>(trackFree); d[0] = new object(); var o = d[0]; Assert.IsFalse(d.CanGet(-1)); Assert.Throws<ArgumentOutOfRangeException>(() => o = d[-1], "Failed to generate ArgumentOutOfRangeException for d[-1]."); Assert.IsFalse(d.CanGet(1)); Assert.Throws<ArgumentOutOfRangeException>(() => o = d[-1], "Failed to generate ArgumentOutOfRangeException for d[1]."); }
static void ContainsTestSub(bool trackFree) { const int size = 10; var d = new DArray<object>(trackFree); for (var i = 0; i < size; i++) { d[i] = new object(); } for (var i = 0; i < size; i++) { Assert.IsTrue(d.Contains(d[i])); } }
public void Creates_array_of_strings() { var result = _reflector.GetDObject(new string[] { "One", "Two", "Three" }, 5); DArray expected = new DArray { TypeHeader = "String[] (3 items)" }; expected.Add(new DValue("One")); expected.Add(new DValue("Two")); expected.Add(new DValue("Three")); result.Should().BeEquivalentTo(expected, o => o.WithStrictOrdering().IncludingAllRuntimeProperties()); }
static void CanGetAndIndexRangeTestSub(bool trackFree) { var d = new DArray <object>(trackFree); d[0] = new object(); var o = d[0]; Assert.IsFalse(d.CanGet(-1)); Assert.Throws <ArgumentOutOfRangeException>(() => o = d[-1], "Failed to generate ArgumentOutOfRangeException for d[-1]."); Assert.IsFalse(d.CanGet(1)); Assert.Throws <ArgumentOutOfRangeException>(() => o = d[-1], "Failed to generate ArgumentOutOfRangeException for d[1]."); }
public void Creates_array_of_ints() { var result = _reflector.GetDObject(new int[] { 1, 2, 3 }, 5); DArray expected = new DArray { TypeHeader = "Int32[] (3 items)" }; expected.Add(new DValue("1")); expected.Add(new DValue("2")); expected.Add(new DValue("3")); result.Should().BeEquivalentTo(expected, o => o.WithStrictOrdering().IncludingAllRuntimeProperties()); }
static void IndexOfValueTypeTestSub(bool trackFree) { const int size = 50; var d = new DArray <int>(trackFree); for (var i = 0; i < size; i++) { d[i] = i * 4; } for (var i = 0; i < size; i++) { Assert.AreEqual(i, d.IndexOf(d[i])); } }
static void ContainsTestSub(bool trackFree) { const int size = 10; var d = new DArray <object>(trackFree); for (var i = 0; i < size; i++) { d[i] = new object(); } for (var i = 0; i < size; i++) { Assert.IsTrue(d.Contains(d[i])); } }
static void IndexOfTestSub(bool trackFree) { const int size = 50; var d = new DArray <object>(trackFree); for (var i = 0; i < size; i++) { d[i] = new object(); } for (var i = 0; i < size; i++) { Assert.AreEqual(i, d.IndexOf(d[i])); } }
static void EnumerateVersionTestSub(bool trackFree) { var d = new DArray <object>(50, trackFree) { new object(), new object() }; try { foreach (var obj in d) { d[10] = new object(); } Assert.Fail("Failed to generate InvalidOperationException."); } catch (InvalidOperationException) { } try { foreach (var obj in d) { d.RemoveAt(0); } Assert.Fail("Failed to generate InvalidOperationException."); } catch (InvalidOperationException) { } try { foreach (var obj in d) { d[0] = new object(); } Assert.Fail("Failed to generate InvalidOperationException."); } catch (InvalidOperationException) { } }
static void ClearTestSub(bool trackFree) { const int size = 50; var d = new DArray<object>(trackFree); for (var i = 0; i < size; i++) { d[i] = new object(); } d.Clear(); Assert.AreEqual(0, d.Length); Assert.AreEqual(0, d.Count); object o; Assert.Throws<ArgumentOutOfRangeException>(() => o = d[0], "Failed to generate IndexOutOfRangeException for d[0]."); Assert.IsFalse(d.CanGet(0)); }
static void ClearTestSub(bool trackFree) { const int size = 50; var d = new DArray <object>(trackFree); for (var i = 0; i < size; i++) { d[i] = new object(); } d.Clear(); Assert.AreEqual(0, d.Length); Assert.AreEqual(0, d.Count); object o; Assert.Throws <ArgumentOutOfRangeException>(() => o = d[0], "Failed to generate IndexOutOfRangeException for d[0]."); Assert.IsFalse(d.CanGet(0)); }
static void EnumerateTestSub(bool trackFree) { const int size = 100; var objs = new object[size]; for (var i = 0; i < size; i++) { if ((i % 2) == 0) { objs[i] = new object(); } } var d = new DArray <object>(size * 2, trackFree); for (var i = 0; i < size; i++) { if (objs[i] != null) { d[i] = objs[i]; } } foreach (var obj in d) { var i = d.IndexOf(obj); Assert.IsNotNull(obj); Assert.AreSame(objs[i], obj); Assert.AreSame(objs[i], d[i]); objs[i] = null; } var remainingObjs = objs.Where(obj => obj != null).Count(); Assert.AreEqual(0, remainingObjs, "One or more items failed to be enumerated since all enumerated " + "items should have been removed from objs[]."); }
//ECMA-262 section 15.2.3.4 void getOwnPropertyNames(ref mdr.CallFrame callFrame) { Debug.WriteLine("calling JSObject.getOwnPropertyNames"); var O = callFrame.Arg0.AsDObject(); if (O == null) { Trace.Fail("TypeError"); } var retArray = new DArray(O.Map.Property.Index + 1); var i = 0; for (var m = O.Map; m.Property.Name != null; m = m.Parent) { retArray.Elements[i++].Set(m.Property.Name); } retArray.Length = i; //Debug.Assert(i == retArray.Length, "Array not populated correctly!"); callFrame.Return.Set(retArray); }
static void GetSetTestSub(bool trackFree) { const int size = 1000; var objs = new object[size]; for (var i = 0; i < size; i++) { objs[i] = new object(); } var d = new DArray <object>(trackFree); for (var i = 0; i < 1000; i++) { d[i] = objs[i]; } for (var i = 0; i < 1000; i++) { Assert.AreSame(objs[i], d[i]); } }
static void Main(string[] args) { DArray dArray = new DArray(); dArray.Add(" 毒 ").Add(" 逆 ").Add(" 天 ").Add(" 到 ").Add(" 此 ").Add(" 一 ").Add(" 游 ").Output(); Console.ReadKey(); }
static void LengthTestSub(bool trackFree) { var d = new DArray<object>(trackFree); for (var i = 0; i < 1000; i++) { Assert.AreEqual(i, d.Length, "TrackFree = " + trackFree); d[i] = new object(); } }
static void EnumerateTestSub(bool trackFree) { const int size = 100; var objs = new object[size]; for (var i = 0; i < size; i++) { if ((i % 2) == 0) objs[i] = new object(); } var d = new DArray<object>(size * 2, trackFree); for (var i = 0; i < size; i++) { if (objs[i] != null) d[i] = objs[i]; } foreach (var obj in d) { var i = d.IndexOf(obj); Assert.IsNotNull(obj); Assert.AreSame(objs[i], obj); Assert.AreSame(objs[i], d[i]); objs[i] = null; } var remainingObjs = objs.Where(obj => obj != null).Count(); Assert.AreEqual(0, remainingObjs, "One or more items failed to be enumerated since all enumerated " + "items should have been removed from objs[]."); }
static void EnumerateVersionTestSub(bool trackFree) { var d = new DArray<object>(50, trackFree) { new object(), new object() }; try { foreach (var obj in d) { d[10] = new object(); } Assert.Fail("Failed to generate InvalidOperationException."); } catch (InvalidOperationException) { } try { foreach (var obj in d) { d.RemoveAt(0); } Assert.Fail("Failed to generate InvalidOperationException."); } catch (InvalidOperationException) { } try { foreach (var obj in d) { d[0] = new object(); } Assert.Fail("Failed to generate InvalidOperationException."); } catch (InvalidOperationException) { } }
public void Accept(DArray type, StringBuilder x) { Append(type.Datas, x); }
static void IndexOfValueTypeTestSub(bool trackFree) { const int size = 50; var d = new DArray<int>(trackFree); for (var i = 0; i < size; i++) { d[i] = i * 4; } for (var i = 0; i < size; i++) { Assert.AreEqual(i, d.IndexOf(d[i])); } }
static void TrimTestSub(bool trackFree) { const int size = 1000; var objs = new object[size]; for (var i = 0; i < size / 2; i++) { if ((i % 3) == 0) objs[i] = i.ToString(); } var d = new DArray<object>(size, trackFree); for (var i = 0; i < size; i++) { if (objs[i] != null) d[i] = objs[i]; } d.Trim(); // Make sure our data has not changed for (var i = 0; i < size; i++) { if (objs[i] != null) Assert.AreSame(objs[i], d[i], "TrackFree = " + trackFree); } // Make sure the null slots are still null for (var i = 0; i < d.Length; i++) { Assert.AreSame(objs[i], d[i], "TrackFree = " + trackFree); } // Make sure that inserts first fill up the gaps, THEN expand var startLen = d.Length; var gaps = startLen - d.Count; for (var i = 0; i < gaps; i++) { d.Insert(new object()); } Assert.AreEqual(startLen, d.Length, "TrackFree = " + trackFree); // Make sure we start expanding now for (var i = 0; i < 10; i++) { var before = d.Length; d.Insert(new object()); Assert.AreEqual(before + 1, d.Length, "TrackFree = " + trackFree); } }
static void IndexOfTestSub(bool trackFree) { const int size = 50; var d = new DArray<object>(trackFree); for (var i = 0; i < size; i++) { d[i] = new object(); } for (var i = 0; i < size; i++) { Assert.AreEqual(i, d.IndexOf(d[i])); } }
static void RemoveTestSub(bool trackFree) { var d = new DArray<object>(trackFree); for (var i = 0; i < 10; i++) { d[i] = new object(); } var o = d[5]; Assert.IsTrue(d.Remove(o)); Assert.IsFalse(d.Contains(o)); }
static void GetSetTestSub(bool trackFree) { const int size = 1000; var objs = new object[size]; for (var i = 0; i < size; i++) { objs[i] = new object(); } var d = new DArray<object>(trackFree); for (var i = 0; i < 1000; i++) { d[i] = objs[i]; } for (var i = 0; i < 1000; i++) { Assert.AreSame(objs[i], d[i]); } }
static void RemoveInsertTestSub(bool trackFree) { var d = new DArray<object>(trackFree); for (var i = 0; i < 10; i++) { d[i] = new object(); } d.RemoveAt(0); d.RemoveAt(5); d.RemoveAt(6); d.RemoveAt(9); var usedIndices = new List<int>(); for (var i = 0; i < 7; i++) { usedIndices.Add(d.Insert(new object())); } var expected = new int[] { 0, 5, 6, 9, 10, 11, 12 }; Assert.AreEqual(usedIndices.Count(), expected.Length); foreach (var i in usedIndices) { Assert.IsTrue(expected.Contains(i), "TrackFree = " + trackFree); } }
static void EnumerateValueTypeTestSub(bool trackFree) { const int size = 100; var objs = new int[size]; for (var i = 0; i < size; i++) { objs[i] = i * 4; } var d = new DArray<int>(size * 2, trackFree); for (var i = 0; i < size; i++) { d[i] = objs[i]; } foreach (var obj in d) { var i = d.IndexOf(obj); Assert.AreEqual(objs[i], obj); Assert.AreEqual(objs[i], d[i]); objs[i] = -1; } var remainingObjs = objs.Where(obj => obj != -1).Count(); Assert.AreEqual(0, remainingObjs, "One or more items failed to be enumerated since all enumerated " + "items should be equal to -1."); }
static void CountTestSub(bool trackFree) { var expectedCount = 0; var d = new DArray<object>(trackFree); for (var i = 0; i < 1000; i++) { if ((i % 3) == 0) { d[i] = new object(); expectedCount++; Assert.AreEqual(expectedCount, d.Count, "TrackFree = " + trackFree); } } for (var i = 0; i < d.Length; i++) { if ((i % 2) == 0 && d[i] != null) { Assert.IsNotNull(d[i]); d.RemoveAt(i); expectedCount--; Assert.IsNull(d[i]); Assert.AreEqual(expectedCount, d.Count, "TrackFree = " + trackFree); } } for (var i = 0; i < 50; i++) { d.Add(new object()); expectedCount++; Assert.AreEqual(expectedCount, d.Count, "TrackFree = " + trackFree); } }