public void SimpleCalculation()
        {
            const int NUM   = 100;
            const int TOTAL = (NUM + 1) * NUM / 2;

            var sum = new int[NUM];

            var list = new List <ITopologicalNode>(NUM);

            for (var i = 1; i <= NUM; i++)
            {
                var task = new DemoTask(i, n => sum[n - 1] = n);
                list.Add(task);
            }

            var provider = default(TopologicalTaskProvider);

            Assert.DoesNotThrow(() => provider = new TopologicalTaskProvider(list));

            var scheduler = SchedulerFactory.Create(provider);

            scheduler.Run();

            Assert.AreEqual(sum.Sum(), TOTAL);
        }
        public void ComplexCalculation()
        {
            const int NUM   = 100;
            const int TOTAL = (NUM + 1) * NUM / 2;
            const int LINKS = 500;

            var sum = new int[NUM];

            var list = new List <ITopologicalNode>(NUM);

            for (var i = 1; i <= NUM; i++)
            {
                var task = new DemoTask(i, n =>
                {
                    Thread.Sleep(100);
                    sum[n - 1] = n;
                });
                list.Add(task);
            }

            var rnd = new Random();

            for (var i = 0; i < LINKS; i++)
            {
                var to   = rnd.Next(1, NUM);
                var from = rnd.Next(0, to - 1);

                if (list[to].Sources.Contains(list[from]))
                {
                    continue;
                }

                list[to].Sources.Add(list[from]);
            }

            Shuffle(list);

            var provider = default(TopologicalTaskProvider);

            Assert.DoesNotThrow(() => provider = new TopologicalTaskProvider(list));

            var scheduler = SchedulerFactory.Create(provider);

            scheduler.Run();

            Assert.AreEqual(sum.Sum(), TOTAL);
        }
        public void TopologicalSort()
        {
            TopologicalTaskProvider provider = null;

            Assert.DoesNotThrow(() => provider = new TopologicalTaskProvider(SimpleNodes));

            var obj = provider.GetType()
                      .GetField("_indexedNodes", BindingFlags.NonPublic | BindingFlags.Instance)
                      .GetValue(provider) as Array;

            Assert.AreEqual(obj.Length, 4);
            var objs = obj.Cast <object>()
                       .Select(o => o.GetType().GetField("Node").GetValue(o) as DemoTask).ToArray();

            Assert.AreEqual(objs[0].Id, 1);
            Assert.AreEqual(objs[1].Id, 4);
            Assert.AreEqual(objs[2].Id, 2);
            Assert.AreEqual(objs[3].Id, 3);
        }
示例#4
0
        public static void RunAsync()
        {
            if (_graph is null)
            {
                return;
            }

            var provider  = new TopologicalTaskProvider(_graph.Nodes);
            var scheduler = SchedulerFactory.Create(provider);

            Instances.ActiveCanvas.Document.DestroyAttributeCache();

            var sw = new System.Diagnostics.Stopwatch();

            sw.Start();
            scheduler.Run();
            sw.Stop();
            System.Windows.Forms.MessageBox.Show(sw.ElapsedMilliseconds.ToString());

            Instances.ActiveCanvas.Invalidate();
        }