示例#1
0
        static void Main(string[] args)
        {
            IList <IBlock> blocks = new List <IBlock>();

            blocks.Add(new Block("Нижегородский", "Автозаводская"));
            blocks.Add(new Block("Южнопортовый", "Печатники"));
            blocks.Add(new Block("Текстильщики", "Нижегородский"));
            blocks.Add(new Block("Печатники", "Текстильщики"));

            //Дубликат
            //blocks.Add(new Block("Текстильщики", "Нижегородский"));
            //blocks.Add(new Block("Печатники", "Текстильщики"));

            //Цикл
            //blocks.Add(new Block("Автозаводская", "Южнопортовый"));

            IBlocksSorter blockSorter  = new BlockSorter();
            var           sortedBlocks = blockSorter.Sort(blocks);

            foreach (IBlock block in sortedBlocks)
            {
                Console.WriteLine(block.ToString());
            }

            Console.ReadKey();
        }
示例#2
0
        public void EmptyBlocksListTest()
        {
            IList <IBlock> blocks = new List <IBlock>();

            IBlocksSorter blockSorter = new BlockSorter();

            Assert.AreEqual(0, blockSorter.Sort(blocks).Count);
        }
示例#3
0
        public void BlocksListIsNullTest()
        {
            IList <IBlock> blocks = null;

            IBlocksSorter blockSorter = new BlockSorter();

            Assert.ThrowsException <ArgumentNullException>(() => blockSorter.Sort(blocks));
        }
示例#4
0
        public void BlocksListWithCycleTest()
        {
            IList <IBlock> blocks = new List <IBlock>();

            blocks.Add(new Block("Нижегородский", "Автозаводская"));
            blocks.Add(new Block("Южнопортовый", "Печатники"));
            blocks.Add(new Block("Текстильщики", "Нижегородский"));
            blocks.Add(new Block("Печатники", "Текстильщики"));

            // Цикл
            blocks.Add(new Block("Автозаводская", "Южнопортовый"));

            IBlocksSorter blockSorter = new BlockSorter();

            Assert.ThrowsException <ArgumentException>(() => blockSorter.Sort(blocks));
        }
示例#5
0
        public void SimpleTest()
        {
            IList <IBlock> blocks = new List <IBlock>();

            blocks.Add(new Block("Нижегородский", "Автозаводская"));
            blocks.Add(new Block("Южнопортовый", "Печатники"));
            blocks.Add(new Block("Текстильщики", "Нижегородский"));
            blocks.Add(new Block("Печатники", "Текстильщики"));

            IList <IBlock> sortedBlocks = new List <IBlock>();

            sortedBlocks.Add(new Block("Южнопортовый", "Печатники"));
            sortedBlocks.Add(new Block("Печатники", "Текстильщики"));
            sortedBlocks.Add(new Block("Текстильщики", "Нижегородский"));
            sortedBlocks.Add(new Block("Нижегородский", "Автозаводская"));

            IBlocksSorter blockSorter    = new BlockSorter();
            var           returnedBlocks = blockSorter.Sort(blocks);

            TestEquation(sortedBlocks, returnedBlocks);
        }
示例#6
0
        public override Method VisitMethod(Method method)
        {
            // body might not have been materialized, so make sure we do that first!
            Block body = method.Body;

            if (method == null)
            {
                return(null);
            }
            BlockSorter blockSorter  = new BlockSorter();
            BlockList   sortedBlocks = blockSorter.SortedBlocks;

            this.SucessorBlock      = blockSorter.SuccessorBlock;
            this.StackLocalsAtEntry = new TrivialHashtable();
            this.localsStack        = new LocalsStack();
            ExceptionHandlerList ehandlers = method.ExceptionHandlers;

            for (int i = 0, n = ehandlers == null ? 0 : ehandlers.Count; i < n; i++)
            {
                ExceptionHandler ehandler = ehandlers[i];
                if (ehandler == null)
                {
                    continue;
                }
                Block handlerStart = ehandler.HandlerStartBlock;
                if (handlerStart == null)
                {
                    continue;
                }
                LocalsStack lstack = new LocalsStack();
                this.StackLocalsAtEntry[handlerStart.UniqueKey] = lstack;
                if (ehandler.HandlerType == NodeType.Catch)
                {
                    lstack.exceptionHandlerType = CoreSystemTypes.Object;
                    if (ehandler.FilterType != null)
                    {
                        lstack.exceptionHandlerType = ehandler.FilterType;
                    }
                }
                else if (ehandler.HandlerType == NodeType.Filter)
                {
                    lstack.exceptionHandlerType = CoreSystemTypes.Object;
                    if (ehandler.FilterExpression != null)
                    {
                        lstack = new LocalsStack();
                        lstack.exceptionHandlerType = CoreSystemTypes.Object;
                        this.StackLocalsAtEntry[ehandler.FilterExpression.UniqueKey] = lstack;
                    }
                }
            }
            blockSorter.VisitMethodBody(body);
            for (int i = 0, n = sortedBlocks.Count; i < n; i++)
            {
                Block b = sortedBlocks[i];
                if (b == null)
                {
                    Debug.Assert(false); continue;
                }
                this.VisitBlock(b);
            }
            return(method);
        }
    public override Method VisitMethod(Method method){
      // body might not have been materialized, so make sure we do that first!
      Block body = method.Body;

      if (method == null) return null;
      BlockSorter blockSorter = new BlockSorter();
      BlockList sortedBlocks = blockSorter.SortedBlocks;
      this.SucessorBlock = blockSorter.SuccessorBlock;
      this.StackLocalsAtEntry = new TrivialHashtable();
      this.localsStack = new LocalsStack();
      ExceptionHandlerList ehandlers = method.ExceptionHandlers;
      for (int i = 0, n = ehandlers == null ? 0 : ehandlers.Count; i < n; i++){
        ExceptionHandler ehandler = ehandlers[i];
        if (ehandler == null) continue;
        Block handlerStart = ehandler.HandlerStartBlock;
        if (handlerStart == null) continue;
        LocalsStack lstack = new LocalsStack();
        this.StackLocalsAtEntry[handlerStart.UniqueKey] = lstack;
        if (ehandler.HandlerType == NodeType.Catch) {
          lstack.exceptionHandlerType = CoreSystemTypes.Object;
          if (ehandler.FilterType != null) lstack.exceptionHandlerType = ehandler.FilterType;
        } else if (ehandler.HandlerType == NodeType.Filter) {
          lstack.exceptionHandlerType = CoreSystemTypes.Object;
          if (ehandler.FilterExpression != null) {
            lstack = new LocalsStack();
            lstack.exceptionHandlerType = CoreSystemTypes.Object;
            this.StackLocalsAtEntry[ehandler.FilterExpression.UniqueKey] = lstack;
          }
        }
      }
      blockSorter.VisitMethodBody(body);
      for (int i = 0, n = sortedBlocks.Count; i < n; i++) {
        Block b = sortedBlocks[i];
        if (b == null) { Debug.Assert(false); continue; }
        this.VisitBlock(b);
      }
      return method;
    }