Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Сортируем?

22.11.17 13:34
Re: Сортируем?
 
Murr патриот
Murr
в ответ moose 22.11.17 00:06

вы что - действительно не видите, что ваш compare() - полная чушь?

-----

Чушь - не компаре - оно нормальное.

А вот - данные - это реальная "чушь" - они не полные.

А при неполных данных нет возможности однозначно определить -1, 0, +1.

Для полноты данных надо добавлять в ProjectReferences ссылки на ВСЕ (включая косвенно затрагиваемые) проекты от которых зависит данный. Мне это делать не хочется и потому Я сортирую то что есть и так как могу. Двойной прогон "стандартной" сортировки дает желаемый результат... хотя пузырьком прошло бы и за раз...


Вот тесты - погоняй:


using System;

using System.IO;

using System.Collections.Generic;

using System.Collections.ObjectModel;

using Microsoft.VisualStudio.TestTools.UnitTesting;

using Data.CCScript.Comparer;

namespace Data.CCScript.Comparer.Tests

{

[TestClass]

public class Comparer_tests

{

[TestMethod]

public void Comparer_ProjectList()

{

ProjectList = new Dictionary<string, TProject>();

Assert.IsNotNull(ProjectList);

Assert.IsTrue(ProjectList.Count == 0);

FillProjectList();

Assert.IsTrue(ProjectList.Count > 0);

int dependant = 0;

foreach (var kvp in ProjectList)

{

dependant += kvp.Value.ProjectReferences.Count;

}

Assert.IsTrue(dependant == 0);

SetDependentProject();

dependant = 0;

foreach (var kvp in ProjectList)

{

dependant += kvp.Value.ProjectReferences.Count;

}

Assert.IsTrue(dependant != 0);

}

[TestMethod]

public void Comparer_ValidateComparisson()

{

ProjectList = new Dictionary<string, TProject>();

FillProjectList();

SetDependentProject();

IComparer<TProject> comparer = new TProjectOrderComparer();

TProject p1;

TProject p2;

p1 = ProjectList["GPS.Order.ColumnsDefs"];

p2 = ProjectList["GPS.Order.ColumnsDefs"];

Assert.AreEqual(0, comparer.Compare(p1, p2));

p1 = ProjectList["CareyGlass.Interfaces"];

p2 = ProjectList["GPS.Order.ColumnsDefs"];

Assert.AreEqual(1, comparer.Compare(p1, p2));

p1 = ProjectList["CareyGlass.Interfaces"];

p2 = ProjectList["GPS.Order.ColumnsDefs.Tests"];

Assert.AreEqual(1, comparer.Compare(p1, p2));

p1 = ProjectList["CareyGlass.Interfaces"];

p2 = ProjectList["GPS.Order.Factory"];

Assert.AreEqual(-1, comparer.Compare(p1, p2));

}

[TestMethod]

public void Comparer_TStore()

{

TStore store = new TStore();

ProjectList = new Dictionary<string, TProject>();

FillProjectList();

SetDependentProject();

foreach (var kvp in ProjectList)

{

store.Add(kvp.Value);

}

int n = 1;

foreach(TProject p in store)

{

p.Priority = n++;

}

if (File.Exists("Data.txt"))

File.Delete("Data.txt");

using (StreamWriter sw = new StreamWriter("Data.txt"))

{

foreach (TProject p in store)

{

sw.WriteLine("Project {0} {1} {2}", p.Priority, p.Guid, p.Name);

}

sw.Flush();

}

}

#region Support

static Dictionary<String, TProject> ProjectList = new Dictionary<string, TProject>();

static TProject GetProject(string pProjectName)

{

TProject project = ProjectList[pProjectName];

return project;

}

void SetDependentProject()

{

foreach (var kvp in ProjectList)

{

TProject project = kvp.Value;

switch (project.Name)

{

case "GPS.Order.ColumnsDefs":

break;

case "CareyGlass.Interfaces":

break;

case "GPS.Order.Factory":

project.ProjectReferences.Add(GetProject("CareyGlass.Interfaces"));

break;

case "GPS.Order.Invariant":

project.ProjectReferences.Add(GetProject("CareyGlass.Interfaces"));

project.ProjectReferences.Add(GetProject("GPS.Order.ColumnsDefs"));

project.ProjectReferences.Add(GetProject("GPS.Order.Factory"));

break;

case "GPS.Order.v06":

project.ProjectReferences.Add(GetProject("CareyGlass.Interfaces"));

project.ProjectReferences.Add(GetProject("GPS.Order.ColumnsDefs"));

project.ProjectReferences.Add(GetProject("GPS.Order.Factory"));

project.ProjectReferences.Add(GetProject("GPS.Order.Invariant"));

break;

case "CareyGlass.DefaultsStorage":

project.ProjectReferences.Add(GetProject("CareyGlass.Interfaces"));

project.ProjectReferences.Add(GetProject("GPS.Order.Factory"));

project.ProjectReferences.Add(GetProject("GPS.Order.Invariant"));

project.ProjectReferences.Add(GetProject("GPS.Order.Serializer"));

project.ProjectReferences.Add(GetProject("GPS.Order.v06"));

project.ProjectReferences.Add(GetProject("GPS.Order.v07"));

project.ProjectReferences.Add(GetProject("GPS.Order.v11"));

project.ProjectReferences.Add(GetProject("GPS.Order.ColumnsDefs"));

break;

case "GPS.Order.v06.Tests":

project.ProjectReferences.Add(GetProject("CareyGlass.Interfaces"));

project.ProjectReferences.Add(GetProject("CareyGlass.DefaultsStorage"));

project.ProjectReferences.Add(GetProject("GPS.Order.ColumnsDefs"));

project.ProjectReferences.Add(GetProject("GPS.Order.Invariant"));

project.ProjectReferences.Add(GetProject("GPS.Order.v06"));

break;

case "GPS.Order.v11.Tests":

project.ProjectReferences.Add(GetProject("CareyGlass.Interfaces"));

project.ProjectReferences.Add(GetProject("CareyGlass.DefaultsStorage"));

project.ProjectReferences.Add(GetProject("GPS.Order.ColumnsDefs"));

project.ProjectReferences.Add(GetProject("GPS.Order.Invariant"));

project.ProjectReferences.Add(GetProject("GPS.Order.v11"));

break;

case "Gps.Order.SW":

project.ProjectReferences.Add(GetProject("CareyGlass.Interfaces"));

project.ProjectReferences.Add(GetProject("GPS.Order.ColumnsDefs"));

project.ProjectReferences.Add(GetProject("GPS.Order.Factory"));

project.ProjectReferences.Add(GetProject("GPS.Order.Invariant"));

break;

case "Gps.Order.SW.Tests":

project.ProjectReferences.Add(GetProject("CareyGlass.Interfaces"));

project.ProjectReferences.Add(GetProject("CareyGlass.DefaultsStorage"));

project.ProjectReferences.Add(GetProject("GPS.Order.ColumnsDefs"));

project.ProjectReferences.Add(GetProject("GPS.Order.Invariant"));

project.ProjectReferences.Add(GetProject("Gps.Order.SW"));

break;

case "GPS.Order.v07":

project.ProjectReferences.Add(GetProject("CareyGlass.Interfaces"));

project.ProjectReferences.Add(GetProject("GPS.Order.ColumnsDefs"));

project.ProjectReferences.Add(GetProject("GPS.Order.Factory"));

project.ProjectReferences.Add(GetProject("GPS.Order.Invariant"));

break;

case "GPS.Order.Serializer":

project.ProjectReferences.Add(GetProject("CareyGlass.Interfaces"));

project.ProjectReferences.Add(GetProject("GPS.Order.ColumnsDefs"));

project.ProjectReferences.Add(GetProject("GPS.Order.Factory"));

project.ProjectReferences.Add(GetProject("GPS.Order.Invariant"));

break;

case "GPS.Order.v11":

project.ProjectReferences.Add(GetProject("CareyGlass.Interfaces"));

project.ProjectReferences.Add(GetProject("GPS.Order.ColumnsDefs"));

project.ProjectReferences.Add(GetProject("GPS.Order.Factory"));

project.ProjectReferences.Add(GetProject("GPS.Order.Invariant"));

break;

case "GPS.Order.Serializer.Tests":

project.ProjectReferences.Add(GetProject("CareyGlass.Interfaces"));

project.ProjectReferences.Add(GetProject("GPS.Order.Factory"));

project.ProjectReferences.Add(GetProject("GPS.Order.Serializer"));

project.ProjectReferences.Add(GetProject("GPS.Order.Invariant"));

project.ProjectReferences.Add(GetProject("Gps.Order.SW"));

project.ProjectReferences.Add(GetProject("GPS.Order.v06"));

project.ProjectReferences.Add(GetProject("GPS.Order.v07"));

project.ProjectReferences.Add(GetProject("GPS.Order.v11"));

break;

case "GPS.Order.ColumnsDefs.Tests":

project.ProjectReferences.Add(GetProject("GPS.Order.ColumnsDefs"));

project.ProjectReferences.Add(GetProject("GPS.Order.Invariant"));

break;

case "GPS.Order.Invariant.Tests":

project.ProjectReferences.Add(GetProject("CareyGlass.Interfaces"));

project.ProjectReferences.Add(GetProject("GPS.Order.Invariant"));

project.ProjectReferences.Add(GetProject("GPS.Order.v07"));

break;

case "GPS.Order.v07.Tests":

project.ProjectReferences.Add(GetProject("CareyGlass.Interfaces"));

project.ProjectReferences.Add(GetProject("CareyGlass.DefaultsStorage"));

project.ProjectReferences.Add(GetProject("GPS.Order.ColumnsDefs"));

project.ProjectReferences.Add(GetProject("GPS.Order.Invariant"));

project.ProjectReferences.Add(GetProject("GPS.Order.v07"));

project.ProjectReferences.Add(GetProject("GPS.Order.Factory"));

break;

}

}

}

static void FillProjectList()

{

ProjectList.Add("GPS.Order.ColumnsDefs", new TProject("GPS.Order.ColumnsDefs", "462d0d6a-6d3a-42cc-8e5f-4cadb5380f6f"));

ProjectList.Add("CareyGlass.Interfaces", new TProject("CareyGlass.Interfaces", "a0a574f4-33dc-4312-8ba7-0abd09cd7323"));

ProjectList.Add("GPS.Order.Factory", new TProject("GPS.Order.Factory", "f3cd6b63-0312-4708-9c99-18232a20d21e"));

ProjectList.Add("GPS.Order.Invariant", new TProject("GPS.Order.Invariant", "f0b39b3d-ebc0-46cb-b4b5-d60fbcaafcc0"));

ProjectList.Add("GPS.Order.v06", new TProject("GPS.Order.v06", "a11d5c1b-6bc5-4392-87d3-2596a7a780f8"));

ProjectList.Add("CareyGlass.DefaultsStorage", new TProject("CareyGlass.DefaultsStorage", "97c05e9b-0b5f-4bb0-952d-c90e4ddee9c3"));

ProjectList.Add("GPS.Order.v06.Tests", new TProject("GPS.Order.v06.Tests", "72c4aab0-c484-439b-b622-9ffac1a0f817"));

ProjectList.Add("GPS.Order.v11.Tests", new TProject("GPS.Order.v11.Tests", "2fe5d102-8f68-46f2-a435-365e9758bd9d"));

ProjectList.Add("Gps.Order.SW", new TProject("Gps.Order.SW", "146b475b-a666-4d4e-ab6e-740704978793"));

ProjectList.Add("Gps.Order.SW.Tests", new TProject("Gps.Order.SW.Tests", "5c529deb-fde0-4d0b-ad4e-db8d3cae5045"));

ProjectList.Add("GPS.Order.v07", new TProject("GPS.Order.v07", "ad138182-ff46-4a3c-9420-81a57c04fc67"));

ProjectList.Add("GPS.Order.Serializer", new TProject("GPS.Order.Serializer", "f162b1c8-5455-42bd-8170-754aaa625aa7"));

ProjectList.Add("GPS.Order.v11", new TProject("GPS.Order.v11", "4545a189-d0b4-4930-9a1e-f49819b3e0d8"));

ProjectList.Add("GPS.Order.Serializer.Tests", new TProject("GPS.Order.Serializer.Tests", "337f9247-cdc4-43a1-963d-75bd259dc12e"));

ProjectList.Add("GPS.Order.ColumnsDefs.Tests", new TProject("GPS.Order.ColumnsDefs.Tests", "2c7be719-5b63-4281-93d9-e7aec1d4a167"));

ProjectList.Add("GPS.Order.Invariant.Tests", new TProject("GPS.Order.Invariant.Tests", "2630aa24-ec74-45a3-8d6b-23b63a78a371"));

ProjectList.Add("GPS.Order.v07.Tests", new TProject("GPS.Order.v07.Tests", "3d41e3b7-8ab3-4143-b12f-6efef8663aec"));

}

#endregion

}

}

 

Перейти на