using System.Collections.Generic; using System.Linq; using Masuit.Tools.Models; using Xunit; namespace Masuit.Tools.Abstractions.Test.Tree; public class TreeTest { [Fact] public void Can_BuildTree() { // arrange var list = new List() { new MyClass { Name = "Root", Id = 1 }, new MyClass { Name = "Root", Id = 20000 } }; for (int i = 2; i < 1500; i++) { list.Add(new MyClass { Name = $"这是第{i}个子节点", Id = i, ParentId = (i - 1) }); } for (int i = 20001; i < 40000; i++) { list.Add(new MyClass { Name = $"这是第{i}个子节点", Id = i, ParentId = (i - 1) }); } // act var tree = list.ToTree(); // assert Assert.Equal(tree[0].Children.FirstOrDefault().Children.FirstOrDefault().Children.FirstOrDefault().Children.FirstOrDefault().Children.FirstOrDefault().Children.FirstOrDefault().Children.FirstOrDefault().Id, 8); Assert.Equal(tree.Count, 2); Assert.Equal(tree[0].AllChildren().Count, 1498); } [Fact] public void Can_BuildTree2() { // arrange var list = new List() { new MyClass2 { Name = "Root", Id = "1" }, new MyClass2 { Name = "Root", Id = "2000" } }; for (int i = 2; i < 1500; i++) { list.Add(new MyClass2 { Name = $"这是第{i}个子节点", Id = i.ToString(), ParentId = (i - 1).ToString() }); } for (int i = 2001; i < 4000; i++) { list.Add(new MyClass2 { Name = $"这是第{i}个子节点", Id = i.ToString(), ParentId = (i - 1).ToString() }); } // act var tree = list.ToTree(); // assert Assert.Equal(tree[0].Children.FirstOrDefault().Children.FirstOrDefault().Children.FirstOrDefault().Children.FirstOrDefault().Children.FirstOrDefault().Children.FirstOrDefault().Children.FirstOrDefault().Id, "8"); Assert.Equal(tree.Count, 2); Assert.Equal(tree[0].AllChildren().Count, 1498); } } internal class MyClass : ITree, ITreeEntity { /// /// 父节点 /// public MyClass Parent { get; set; } /// /// 子级 /// public ICollection Children { get; set; } /// /// 名字 /// public string Name { get; set; } /// /// 主键id /// public int Id { get; set; } /// /// 父级id /// public int? ParentId { get; set; } } internal class MyClass2 : ITree, ITreeEntity { /// /// 父节点 /// public MyClass2 Parent { get; set; } /// /// 子级 /// public ICollection Children { get; set; } /// /// 名字 /// public string Name { get; set; } /// /// 主键id /// public string Id { get; set; } /// /// 父级id /// public string ParentId { get; set; } }