1 //
2 // Copyright (c) 2010-2018 Antmicro
3 // Copyright (c) 2011-2015 Realtime Embedded
4 //
5 // This file is licensed under the MIT License.
6 // Full license text is available in 'licenses/MIT.txt'.
7 //
8 using Antmicro.Renode.Utilities.Collections;
9 using NUnit.Framework;
10 using System.Collections.Generic;
11 
12 namespace Antmicro.Renode.UnitTests.Collections
13 {
14 	[TestFixture]
15 	public class MultiTreeTests
16 	{
17 		[Test]
ShouldTraverseSimpleTree()18 		public void ShouldTraverseSimpleTree()
19 		{
20 			var tree = new MultiTree<int, string>(1);
21 			tree.AddChild(2);
22 			tree.AddChild(3);
23 			CollectionAssert.AreEquivalent(new [] { 1, 2, 3 }, tree);
24 		}
25 
26 		[Test]
ShouldTraverseAnotherSimpleTree()27 		public void ShouldTraverseAnotherSimpleTree()
28 		{
29 			var tree = new MultiTree<int, string>(1);
30 			var twoNode = tree.AddChild(2);
31 			twoNode.AddChild(3);
32 			twoNode.AddChild(4);
33 			tree.AddChild(5);
34 			CollectionAssert.AreEquivalent(new [] { 1, 2, 3, 4, 5 }, tree);
35 		}
36 
37 		[Test]
ShouldTraverseMultiTree()38 		public void ShouldTraverseMultiTree()
39 		{
40 			var tree = new MultiTree<int, string>(1);
41 			var twoNode = tree.AddChild(2);
42 			twoNode.AddChild(3);
43 			tree.AddChild(3);
44 			CollectionAssert.AreEquivalent(new [] { 1, 2, 3, 3 }, tree);
45 		}
46 
47 		[Test]
ShouldCreateOneNodeForTheSameValue()48 		public void ShouldCreateOneNodeForTheSameValue()
49 		{
50 			var tree = new MultiTree<int, string>(1);
51 			var twoNode = tree.AddChild(2);
52 			var threeNode = twoNode.AddChild(3);
53 			var anotherTreeNode = tree.AddChild(3);
54 			Assert.AreSame(threeNode, anotherTreeNode);
55 		}
56 
57 		[Test]
ShouldFindRoot()58 		public void ShouldFindRoot()
59 		{
60 			var tree = new MultiTree<int, string>(1);
61 			Assert.AreEqual(1, tree.GetNode(1).Value);
62 		}
63 
64 		[Test]
ShouldRemoveSubtree()65 		public void ShouldRemoveSubtree()
66 		{
67 			var tree = new MultiTree<int, string>(1);
68 			var twoNode = tree.AddChild(2);
69 			twoNode.AddChild(3);
70 			twoNode.AddChild(4);
71 			tree.AddChild(5);
72 			tree.RemoveChild(2);
73 			CollectionAssert.AreEquivalent(new [] { 1, 5 }, tree);
74 		}
75 
76 		[Test]
ShouldRemoveSubtreeFromDictionary()77 		public void ShouldRemoveSubtreeFromDictionary()
78 		{
79 			var tree = new MultiTree<int, string>(1);
80 			var twoNode = tree.AddChild(2);
81 			twoNode.AddChild(3);
82 			twoNode.AddChild(4);
83 			tree.AddChild(5);
84 			tree.RemoveChild(2);
85 			Assert.Throws(typeof(KeyNotFoundException), () => tree.GetNode(2));
86 			Assert.Throws(typeof(KeyNotFoundException), () => tree.GetNode(3));
87 			Assert.Throws(typeof(KeyNotFoundException), () => tree.GetNode(4));
88 			tree.GetNode(5);
89 		}
90 	}
91 }
92 
93