Browse Source

Add test for SortByDependencies

pull/4016/head
Halil İbrahim Kalkan 6 years ago
parent
commit
766b194687
  1. 5
      framework/src/Volo.Abp.Core/System/Collections/Generic/AbpListExtensions.cs
  2. 34
      framework/test/Volo.Abp.Core.Tests/System/Collections/Generic/AbpListExtensions_Tests.cs

5
framework/src/Volo.Abp.Core/System/Collections/Generic/AbpListExtensions.cs

@ -180,7 +180,10 @@ namespace System.Collections.Generic
/// <typeparam name="T">The type of the members of values.</typeparam>
/// <param name="source">A list of objects to sort</param>
/// <param name="getDependencies">Function to resolve the dependencies</param>
/// <returns></returns>
/// <returns>
/// Returns a new list ordered by dependencies.
/// If A depends on B, then B will come before than A in the resulting list.
/// </returns>
public static List<T> SortByDependencies<T>(this IEnumerable<T> source, Func<T, IEnumerable<T>> getDependencies)
{
/* See: http://www.codeproject.com/Articles/869059/Topological-sorting-in-Csharp

34
framework/test/Volo.Abp.Core.Tests/System/Collections/Generic/AbpListExtensions_Tests.cs

@ -1,5 +1,6 @@
using System.Linq;
using Shouldly;
using Volo.Abp;
using Xunit;
namespace System.Collections.Generic
@ -171,5 +172,36 @@ namespace System.Collections.Generic
list[1].ShouldBe(42);
list[2].ShouldBe(3);
}
[Fact]
public void SortByDependencies()
{
var dependencies = new Dictionary<char, char[]>
{
{'A', new[] {'B', 'G'}},
{'B', new[] {'C', 'E'}},
{'C', new[] {'D'}},
{'D', new char[0]},
{'E', new[] {'C', 'F'}},
{'F', new[] {'C'}},
{'G', new[] {'F'}}
};
for (int i = 0; i < 3; i++)
{
var list = RandomHelper
.GenerateRandomizedList(new char[] {'A', 'B', 'C', 'D', 'E', 'F', 'G'});
list = list.SortByDependencies(c => dependencies[c]);
foreach (var dependency in dependencies)
{
foreach (var dependedValue in dependency.Value)
{
list.IndexOf(dependency.Key).ShouldBeGreaterThan(list.IndexOf(dependedValue));
}
}
}
}
}
}
}
Loading…
Cancel
Save