TreeTest.cs 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using Masuit.Tools.Models;
  4. using Xunit;
  5. namespace Masuit.Tools.Abstractions.Test.Tree;
  6. public class TreeTest
  7. {
  8. [Fact]
  9. public void Can_BuildTree()
  10. {
  11. // arrange
  12. var list = new List<MyClass>()
  13. {
  14. new MyClass
  15. {
  16. Name = "Root",
  17. Id = 1
  18. },
  19. new MyClass
  20. {
  21. Name = "Root",
  22. Id = 20000
  23. }
  24. };
  25. for (int i = 2; i < 1500; i++)
  26. {
  27. list.Add(new MyClass
  28. {
  29. Name = $"这是第{i}个子节点",
  30. Id = i,
  31. ParentId = (i - 1)
  32. });
  33. }
  34. for (int i = 20001; i < 40000; i++)
  35. {
  36. list.Add(new MyClass
  37. {
  38. Name = $"这是第{i}个子节点",
  39. Id = i,
  40. ParentId = (i - 1)
  41. });
  42. }
  43. // act
  44. var tree = list.ToTree();
  45. // assert
  46. Assert.Equal(tree[0].Children.FirstOrDefault().Children.FirstOrDefault().Children.FirstOrDefault().Children.FirstOrDefault().Children.FirstOrDefault().Children.FirstOrDefault().Children.FirstOrDefault().Id, 8);
  47. Assert.Equal(tree.Count, 2);
  48. Assert.Equal(tree[0].AllChildren().Count, 1498);
  49. }
  50. [Fact]
  51. public void Can_BuildTree2()
  52. {
  53. // arrange
  54. var list = new List<MyClass2>()
  55. {
  56. new MyClass2
  57. {
  58. Name = "Root",
  59. Id = "1"
  60. },
  61. new MyClass2
  62. {
  63. Name = "Root",
  64. Id = "2000"
  65. }
  66. };
  67. for (int i = 2; i < 1500; i++)
  68. {
  69. list.Add(new MyClass2
  70. {
  71. Name = $"这是第{i}个子节点",
  72. Id = i.ToString(),
  73. ParentId = (i - 1).ToString()
  74. });
  75. }
  76. for (int i = 2001; i < 4000; i++)
  77. {
  78. list.Add(new MyClass2
  79. {
  80. Name = $"这是第{i}个子节点",
  81. Id = i.ToString(),
  82. ParentId = (i - 1).ToString()
  83. });
  84. }
  85. // act
  86. var tree = list.ToTree();
  87. // assert
  88. Assert.Equal(tree[0].Children.FirstOrDefault().Children.FirstOrDefault().Children.FirstOrDefault().Children.FirstOrDefault().Children.FirstOrDefault().Children.FirstOrDefault().Children.FirstOrDefault().Id, "8");
  89. Assert.Equal(tree.Count, 2);
  90. Assert.Equal(tree[0].AllChildren().Count, 1498);
  91. }
  92. }
  93. internal class MyClass : ITree<MyClass>, ITreeEntity<MyClass, int>
  94. {
  95. /// <summary>
  96. /// 父节点
  97. /// </summary>
  98. public MyClass Parent { get; set; }
  99. /// <summary>
  100. /// 子级
  101. /// </summary>
  102. public ICollection<MyClass> Children { get; set; }
  103. /// <summary>
  104. /// 名字
  105. /// </summary>
  106. public string Name { get; set; }
  107. /// <summary>
  108. /// 主键id
  109. /// </summary>
  110. public int Id { get; set; }
  111. /// <summary>
  112. /// 父级id
  113. /// </summary>
  114. public int? ParentId { get; set; }
  115. }
  116. internal class MyClass2 : ITree<MyClass2>, ITreeEntity<MyClass2>
  117. {
  118. /// <summary>
  119. /// 父节点
  120. /// </summary>
  121. public MyClass2 Parent { get; set; }
  122. /// <summary>
  123. /// 子级
  124. /// </summary>
  125. public ICollection<MyClass2> Children { get; set; }
  126. /// <summary>
  127. /// 名字
  128. /// </summary>
  129. public string Name { get; set; }
  130. /// <summary>
  131. /// 主键id
  132. /// </summary>
  133. public string Id { get; set; }
  134. /// <summary>
  135. /// 父级id
  136. /// </summary>
  137. public string ParentId { get; set; }
  138. }