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(); }
public void EmptyBlocksListTest() { IList <IBlock> blocks = new List <IBlock>(); IBlocksSorter blockSorter = new BlockSorter(); Assert.AreEqual(0, blockSorter.Sort(blocks).Count); }
public void BlocksListIsNullTest() { IList <IBlock> blocks = null; IBlocksSorter blockSorter = new BlockSorter(); Assert.ThrowsException <ArgumentNullException>(() => blockSorter.Sort(blocks)); }
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)); }
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); }
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; }