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