Browse Source

fixed bug in topological sort and startet to write tests for it.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@27 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Andrea Paatz 21 years ago
parent
commit
dc18a6e9eb
  1. 45
      src/Main/Core/Project/Src/AddInTree/AddInTreeNode.cs
  2. 4
      src/Main/Core/Test/ICSharpCode.Core.Tests.csproj
  3. 30
      src/Main/Core/Test/TopologicalSortTest.cs
  4. 2
      src/Main/StartUp/Project/StartUp.csproj
  5. 76
      src/SharpDevelop.sln

45
src/Main/Core/Project/Src/AddInTree/AddInTreeNode.cs

@ -48,56 +48,55 @@ namespace ICSharpCode.Core @@ -48,56 +48,55 @@ namespace ICSharpCode.Core
// }
// }
class SortCodons
public class TopologicalSort
{
List<Codon> codons;
bool[] visited;
List<Codon> sortedCodons;
Dictionary<string, int> indexOfName;
AddInTreeNode node;
public SortCodons(AddInTreeNode node)
public TopologicalSort(List<Codon> codons)
{
this.node = node;
visited = new bool[node.codons.Count];
sortedCodons = new List<Codon>(node.codons.Count);
indexOfName = new Dictionary<string, int>(node.codons.Count);
this.codons = codons;
visited = new bool[codons.Count];
sortedCodons = new List<Codon>(codons.Count);
indexOfName = new Dictionary<string, int>(codons.Count);
// initialize visited to false and fill the indexOfName dictionary
for (int i = 0; i < node.codons.Count; ++i) {
for (int i = 0; i < codons.Count; ++i) {
visited[i] = false;
indexOfName[node.codons[i].Id] = i;
indexOfName[codons[i].Id] = i;
}
}
void InsertEdges()
{
// add the InsertBefore to the corresponding InsertAfter
for (int i = 0; i < node.codons.Count; ++i) {
string before = node.codons[i].InsertBefore;
for (int i = 0; i < codons.Count; ++i) {
string before = codons[i].InsertBefore;
if (before != null && before != "") {
if (indexOfName.ContainsKey(before)) {
string after = node.codons[indexOfName[before]].InsertAfter;
string after = codons[indexOfName[before]].InsertAfter;
if (after == null || after == "") {
node.codons[indexOfName[before]].InsertAfter = node.codons[i].Id;
codons[indexOfName[before]].InsertAfter = codons[i].Id;
} else {
after += ',' + node.codons[i].Id;
codons[indexOfName[before]].InsertAfter = after + ',' + codons[i].Id;
}
} else {
Console.WriteLine("Codon ({0}) specified in the insertbefore of the {1} codon does not exist!", before, node.codons[i]);
Console.WriteLine("Codon ({0}) specified in the insertbefore of the {1} codon does not exist!", before, codons[i]);
}
}
}
}
public void Execute()
public List<Codon> Execute()
{
InsertEdges();
// Visit all codons
for (int i = 0; i < node.codons.Count; ++i) {
for (int i = 0; i < codons.Count; ++i) {
Visit(i);
}
node.codons = sortedCodons;
return sortedCodons;
}
void Visit(int codonIndex)
@ -105,7 +104,7 @@ namespace ICSharpCode.Core @@ -105,7 +104,7 @@ namespace ICSharpCode.Core
if (visited[codonIndex]) {
return;
}
string[] after = node.codons[codonIndex].InsertAfter.Split(new char[] {','});
string[] after = codons[codonIndex].InsertAfter.Split(new char[] {','});
foreach (string s in after) {
if (s == null || s.Length == 0) {
continue;
@ -113,10 +112,10 @@ namespace ICSharpCode.Core @@ -113,10 +112,10 @@ namespace ICSharpCode.Core
if (indexOfName.ContainsKey(s)) {
Visit(indexOfName[s]);
} else {
Console.WriteLine("Codon ({0}) specified in the insertafter of the {1} codon does not exist!", node.codons[codonIndex].InsertAfter, node.codons[codonIndex]);
Console.WriteLine("Codon ({0}) specified in the insertafter of the {1} codon does not exist!", codons[codonIndex].InsertAfter, codons[codonIndex]);
}
}
sortedCodons.Add(node.codons[codonIndex]);
sortedCodons.Add(codons[codonIndex]);
visited[codonIndex] = true;
}
}
@ -125,7 +124,7 @@ namespace ICSharpCode.Core @@ -125,7 +124,7 @@ namespace ICSharpCode.Core
{
ArrayList items = new ArrayList(codons.Count);
if (!isSorted) {
(new SortCodons(this)).Execute();
codons = (new TopologicalSort(codons)).Execute();
isSorted = true;
}
foreach (Codon codon in codons) {

4
src/Main/Core/Test/ICSharpCode.Core.Tests.csproj

@ -13,9 +13,6 @@ @@ -13,9 +13,6 @@
<NoConfig>False</NoConfig>
<RunPostBuildEvent>OnSuccessfulBuild</RunPostBuildEvent>
<OutputType>Library</OutputType>
<StartupObject />
<ApplicationIcon />
<Win32Resource />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>True</DebugSymbols>
@ -45,6 +42,7 @@ @@ -45,6 +42,7 @@
<Compile Include="AssemblyInfo.cs" />
<Compile Include="AddInTreeTests\AddInTreeLoadingTests.cs" />
<Compile Include="AddInTreeTests\ExtPathTests.cs" />
<Compile Include="TopologicalSortTest.cs" />
</ItemGroup>
<ItemGroup>
<Folder Include="AddInTreeTests\" />

30
src/Main/Core/Test/TopologicalSortTest.cs

@ -0,0 +1,30 @@ @@ -0,0 +1,30 @@
/*
* Created by SharpDevelop.
* User: Omnibrain
* Date: 21.12.2004
* Time: 18:59
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.Collections.Generic;
using System.IO;
using NUnit.Framework;
namespace ICSharpCode.Core.Tests.AddInTreeTests.Tests
{
[TestFixture]
public class TopologicalSortTest
{
[Test]
public void Test()
{
List<Codon> codons = new List<Codon>(5);
for (int i = 0; i < 5; ++i) {
codons[i] = new Codon(null, "codon" + i, null, null);
}
}
}
}

2
src/Main/StartUp/Project/StartUp.csproj

@ -68,4 +68,4 @@ @@ -68,4 +68,4 @@
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" />
</Project>
</Project>

76
src/SharpDevelop.sln

@ -1,5 +1,33 @@ @@ -1,5 +1,33 @@
Microsoft Visual Studio Solution File, Format Version 9.00
# SharpDevelop 2.0.0.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Main", "Main", "{5A3EBEBA-0560-41C1-966B-23F7D03A5486}"
ProjectSection(SolutionItems) = postProject
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core.Tests", "Main\Core\Test\ICSharpCode.Core.Tests.csproj", "{ad6faa08-d6f5-4dba-af85-f4da9f40c3b5}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StartUp", "Main\StartUp\Project\StartUp.csproj", "{1152B71B-3C05-4598-B20D-823B5D40559E}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core", "Main\Core\Project\ICSharpCode.Core.csproj", "{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop", "Main\Base\Project\ICSharpCode.SharpDevelop.csproj", "{2748AD25-9C63-4E12-877B-4DCE96FBED54}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Libraries", "Libraries", "{9421EDF4-9769-4BE9-B5A6-C87DE221D73C}"
ProjectSection(SolutionItems) = postProject
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "nunit.extensions.dll", "Tools\NUnit\src\NUnitFramework\extensions\nunit.extensions.dll.csproj", "{98B10E98-003C-45A0-9587-119142E39986}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NRefactory", "Libraries\NRefactory\Project\NRefactory.csproj", "{3A9AE6AA-BC07-4A2F-972C-581E3AE2F195}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.TextEditor", "Libraries\ICSharpCode.TextEditor\Project\ICSharpCode.TextEditor.csproj", "{2D18BE89-D210-49EB-A9DD-2246FBB3DF6D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WinFormsUI", "Libraries\DockPanel_Src\WinFormsUI\WinFormsUI.csproj", "{D3C782BA-178E-4235-A3BA-8C11DEBB6BEE}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "nunit.core.dll", "Tools\NUnit\src\NUnitFramework\core\nunit.core.dll.csproj", "{EBD43A7F-AFCA-4281-BB53-5CDD91F966A3}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "nunit.framework.dll", "Tools\NUnit\src\NUnitFramework\framework\nunit.framework.dll.csproj", "{83DD7E12-A705-4DBA-9D71-09C8973D9382}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AddIns", "AddIns", "{14A277EE-7DF1-4529-B639-7D1EF334C1C5}"
ProjectSection(SolutionItems) = postProject
EndProjectSection
@ -34,34 +62,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Backends", "Backends", "{FE @@ -34,34 +62,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Backends", "Backends", "{FE
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CSharpBinding", "AddIns\BackendBindings\CSharpBinding\Project\CSharpBinding.csproj", "{1F1AC7CD-D154-45BB-8EAF-804CA8055F5A}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Libraries", "Libraries", "{9421EDF4-9769-4BE9-B5A6-C87DE221D73C}"
ProjectSection(SolutionItems) = postProject
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "nunit.extensions.dll", "Tools\NUnit\src\NUnitFramework\extensions\nunit.extensions.dll.csproj", "{98B10E98-003C-45A0-9587-119142E39986}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NRefactory", "Libraries\NRefactory\Project\NRefactory.csproj", "{3A9AE6AA-BC07-4A2F-972C-581E3AE2F195}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.TextEditor", "Libraries\ICSharpCode.TextEditor\Project\ICSharpCode.TextEditor.csproj", "{2D18BE89-D210-49EB-A9DD-2246FBB3DF6D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WinFormsUI", "Libraries\DockPanel_Src\WinFormsUI\WinFormsUI.csproj", "{D3C782BA-178E-4235-A3BA-8C11DEBB6BEE}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "nunit.core.dll", "Tools\NUnit\src\NUnitFramework\core\nunit.core.dll.csproj", "{EBD43A7F-AFCA-4281-BB53-5CDD91F966A3}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "nunit.framework.dll", "Tools\NUnit\src\NUnitFramework\framework\nunit.framework.dll.csproj", "{83DD7E12-A705-4DBA-9D71-09C8973D9382}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Main", "Main", "{5A3EBEBA-0560-41C1-966B-23F7D03A5486}"
ProjectSection(SolutionItems) = postProject
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core.Tests", "Main\Core\Test\ICSharpCode.Core.Tests.csproj", "{ad6faa08-d6f5-4dba-af85-f4da9f40c3b5}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StartUp", "Main\StartUp\Project\StartUp.csproj", "{1152B71B-3C05-4598-B20D-823B5D40559E}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core", "Main\Core\Project\ICSharpCode.Core.csproj", "{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop", "Main\Base\Project\ICSharpCode.SharpDevelop.csproj", "{2748AD25-9C63-4E12-877B-4DCE96FBED54}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@ -135,6 +135,16 @@ Global @@ -135,6 +135,16 @@ Global
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{2748AD25-9C63-4E12-877B-4DCE96FBED54} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{1152B71B-3C05-4598-B20D-823B5D40559E} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{ad6faa08-d6f5-4dba-af85-f4da9f40c3b5} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{83DD7E12-A705-4DBA-9D71-09C8973D9382} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{EBD43A7F-AFCA-4281-BB53-5CDD91F966A3} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{D3C782BA-178E-4235-A3BA-8C11DEBB6BEE} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{2D18BE89-D210-49EB-A9DD-2246FBB3DF6D} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{3A9AE6AA-BC07-4A2F-972C-581E3AE2F195} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{98B10E98-003C-45A0-9587-119142E39986} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{4EA396ED-64AD-4AD0-A67A-AB363F3E0C79} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{CE5B42B7-6E8C-4385-9E97-F4023FC16BF2} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
@ -147,15 +157,5 @@ Global @@ -147,15 +157,5 @@ Global
{7D7E92DF-ACEB-4B69-92C8-8AC7A703CD57} = {4EA396ED-64AD-4AD0-A67A-AB363F3E0C79}
{CBC6C247-747B-4908-B09A-4D2E0F640B6B} = {4EA396ED-64AD-4AD0-A67A-AB363F3E0C79}
{1F1AC7CD-D154-45BB-8EAF-804CA8055F5A} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C}
{83DD7E12-A705-4DBA-9D71-09C8973D9382} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{EBD43A7F-AFCA-4281-BB53-5CDD91F966A3} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{D3C782BA-178E-4235-A3BA-8C11DEBB6BEE} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{2D18BE89-D210-49EB-A9DD-2246FBB3DF6D} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{3A9AE6AA-BC07-4A2F-972C-581E3AE2F195} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{98B10E98-003C-45A0-9587-119142E39986} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{2748AD25-9C63-4E12-877B-4DCE96FBED54} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{1152B71B-3C05-4598-B20D-823B5D40559E} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{ad6faa08-d6f5-4dba-af85-f4da9f40c3b5} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
EndGlobalSection
EndGlobal

Loading…
Cancel
Save