Exemplo n.º 1
0
        public override string Accept(DArray type)
        {
            var x = new StringBuilder();

            Append(type.Datas, x);
            return(x.ToString());
        }
Exemplo n.º 2
0
        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>");
        }
Exemplo n.º 3
0
        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());
        }
Exemplo n.º 4
0
        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);
            }
        }
Exemplo n.º 5
0
        /// <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;
        }
Exemplo n.º 6
0
        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);
            }
        }
Exemplo n.º 7
0
        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.");
        }
Exemplo n.º 8
0
        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);
            }
        }
Exemplo n.º 9
0
        //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);
        }
Exemplo n.º 10
0
 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);
     }
 }
Exemplo n.º 11
0
        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() + "  ");
            }
        }
Exemplo n.º 12
0
        /// <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);
                }
            }
        }
Exemplo n.º 13
0
        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());
        }
Exemplo n.º 15
0
        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);
        }
Exemplo n.º 16
0
        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();
            }
        }
Exemplo n.º 17
0
        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);
        }
Exemplo n.º 18
0
 public void Accept(DArray type, StringBuilder line)
 {
     line.Append('{');
     foreach (var d in type.Datas)
     {
         d.Apply(this, line);
         line.Append(',');
     }
     line.Append('}');
 }
Exemplo n.º 19
0
        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();
        }
Exemplo n.º 20
0
        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);
        }
Exemplo n.º 21
0
        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);
        }
Exemplo n.º 22
0
        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));
        }
Exemplo n.º 23
0
        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].");
        }
Exemplo n.º 24
0
        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]));
            }
        }
Exemplo n.º 25
0
        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());
        }
Exemplo n.º 26
0
        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].");
        }
Exemplo n.º 27
0
        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());
        }
Exemplo n.º 28
0
        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]));
            }
        }
Exemplo n.º 29
0
        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]));
            }
        }
Exemplo n.º 30
0
        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]));
            }
        }
Exemplo n.º 31
0
        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)
            {
            }
        }
Exemplo n.º 32
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));
        }
Exemplo n.º 33
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));
        }
Exemplo n.º 34
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[].");
        }
Exemplo n.º 35
0
        //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);
        }
Exemplo n.º 36
0
        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]);
            }
        }
Exemplo n.º 37
0
 static void Main(string[] args)
 {
     DArray dArray = new DArray();
     dArray.Add(" 毒 ").Add(" 逆 ").Add(" 天 ").Add(" 到 ").Add(" 此 ").Add(" 一 ").Add(" 游 ").Output();
     Console.ReadKey();
 }
Exemplo n.º 38
0
 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();
     }
 }
Exemplo n.º 39
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[].");
        }
Exemplo n.º 40
0
        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)
            {
            }
        }
Exemplo n.º 41
0
 public void Accept(DArray type, StringBuilder x)
 {
     Append(type.Datas, x);
 }
Exemplo n.º 42
0
        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]));
            }
        }
Exemplo n.º 43
0
        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);
            }
        }
Exemplo n.º 44
0
        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]));
            }
        }
Exemplo n.º 45
0
        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));
        }
Exemplo n.º 46
0
        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]);
            }
        }
Exemplo n.º 47
0
        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);
            }
        }
Exemplo n.º 48
0
        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.");
        }
Exemplo n.º 49
0
        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);
            }
        }