public IEnumerator <object[]> GetEnumerator() { foreach (var delimiter in TestConstants.Delimiters) { foreach (var amount in TestConstants.NumbersOfNodes) { var tree = new MarshalledBinarySearchTree <int>(delimiter); var dataItems = DataGenerator.RandomTreeData(amount); tree.AddRange(dataItems); var str = tree.Marshall(); if (string.IsNullOrEmpty(str)) { yield return(new object[] { delimiter, "abc" }); } else { // replace int with string var itemToReplace = dataItems.Where(x => !x.ToString().Contains(delimiter)).OrderBy(x => Guid.NewGuid()).FirstOrDefault(); yield return(new object[] { delimiter, str.Replace(itemToReplace.ToString(), "abc") }); // replace int with delimiter yield return(new object[] { delimiter, str.Replace(itemToReplace.ToString(), delimiter) }); } } } }
public void Given_CorrectString_UnmashalsTree(MarshalledBinarySearchTree <int> tree, string str) { // arrange var unmarshalledTree = new MarshalledBinarySearchTree <int>(tree.Delimiter); // act unmarshalledTree.Unmarshal(str); // assert Assert.True(tree.Equals(unmarshalledTree)); }
public void Given_IncorrectString_UnmarshalsIntoEmptyTree(string delimiter, string str) { // arrange var expectedTree = new MarshalledBinarySearchTree <int>(delimiter); var unmarshalledTree = new MarshalledBinarySearchTree <int>(delimiter); // act unmarshalledTree.Unmarshal(str); // assert Assert.True(expectedTree.Equals(unmarshalledTree)); }
public void Given_EmptyString_UnmarshalsTree(string delimiter) { // arrange var expectedTree = new MarshalledBinarySearchTree <int>(delimiter); var unmarshalledTree = new MarshalledBinarySearchTree <int>(delimiter); // act unmarshalledTree.Unmarshal(String.Empty); // assert Assert.True(expectedTree.Equals(unmarshalledTree)); }
public IEnumerator <object[]> GetEnumerator() { foreach (var delimiter in TestConstants.Delimiters) { foreach (var amount in TestConstants.NumbersOfNodes) { var tree = new MarshalledBinarySearchTree <int>(delimiter); tree.AddRange(DataGenerator.RandomTreeData(amount)); yield return(new object[] { tree, tree.Marshall() }); } } }
public static void Play() { // create tree var tree = new MarshalledBinarySearchTree <int>("_"); WriteLine(" # # # # "); WriteLine(" Marshaled BinarySearchTree created. Delimiter used: '_'"); WriteLine(" # # # # "); var converter = new TreeTypeConverter <int>(typeof(int)); // input type should be the same as tree has ShowMenuMarshaled(tree, converter);
public void Given_MbstWithNodes_Marshals(string delimiter, int numberOfNodes) { if (numberOfNodes < 0) { throw new ApplicationException("Number of nodes must be > 0"); } // arrange var tree = new MarshalledBinarySearchTree <int>(delimiter); var input = DataGenerator.RandomTreeData(numberOfNodes); tree.AddRange(input); // act var actual = tree.Marshall(); // assert var expected = String.Join(delimiter, tree.TraversePreOrder()); Assert.Equal(expected, actual); }
static void ShowMenuMarshaled(MarshalledBinarySearchTree <int> tree, TreeTypeConverter <int> converter) { WriteLine(); WriteLine("Marshaled Menu:"); WriteLine("0 : Create new"); WriteLine("1 : Add value"); WriteLine("2 : Remove value"); WriteLine("3 : Traverse: Pre-Order"); WriteLine("4 : Traverse: In-Order"); WriteLine("5 : Traverse: Post-Order"); WriteLine("6 : Fill: FullTreeData"); WriteLine("7 : Fill: RandomTreeData"); WriteLine("8 : Marshal"); WriteLine("9 : Unmarshal"); WriteLine("<any other> : Exit from MBST"); var read = ReadLine(); int value = default; string delimiter = string.Empty; bool exit = false; switch (read) { case "0": WriteLine("Enter value of a Delimiter, used for Marshaling:"); delimiter = ReadLine(); if (string.IsNullOrEmpty(delimiter) || delimiter.Length != 1) { WriteLine("Delimiter must contain exact 1 char, tree will not be created"); break; } WriteLine("Enter value of a future Root node or press Enter to create without Root:"); read = ReadLine(); if (delimiter == read) { WriteLine("Unable to create a tree with Delimiter equal to Root value"); break; } if (string.IsNullOrEmpty(read)) { tree = new MarshalledBinarySearchTree <int>(delimiter); WriteLine("Tree was created"); break; } if (!converter.TryParse(read, out value)) { WriteLine("Unable to convert input value, tree will not be created"); break; } else { tree = new MarshalledBinarySearchTree <int>(delimiter, value); break; } case "1": WriteLine("Enter value to add:"); read = ReadLine(); if (!converter.TryParse(read, out value)) { WriteLine("Unable to convert input value"); break; } tree.Add(value); break; case "2": WriteLine("Enter value to remove:"); read = ReadLine(); if (!converter.TryParse(read, out value)) { WriteLine("Unable to convert input value"); break; } tree.Remove(value); break; case "3": WriteLine(string.Join(" | ", tree.TraversePreOrder())); break; case "4": WriteLine(string.Join(" | ", tree.TraverseInOrder())); break; case "5": WriteLine(string.Join(" | ", tree.TraversePostOrder())); break; case "6": WriteLine("Enter value of a Delimiter, used for Marshaling:"); delimiter = ReadLine(); if (string.IsNullOrEmpty(delimiter) || delimiter.Length != 1) { WriteLine("Delimiter must contain exact 1 char, tree will not be created"); break; } tree = new MarshalledBinarySearchTree <int>(delimiter); var data1 = DataGenerator.FullTreeData().ToList(); if (data1.Any(item => item.ToString().Contains(delimiter))) { WriteLine("Data to be added contains value(s) that include Delimiter, not all nodes will be created"); data1 = data1.Where(item => !item.ToString().Contains(delimiter)).ToList(); } tree.AddRange(data1); break; case "7": WriteLine("Enter value of a Delimiter, used for Marshaling:"); delimiter = ReadLine(); if (string.IsNullOrEmpty(delimiter) || delimiter.Length != 1) { WriteLine("Delimiter must contain exact 1 char, tree will not be created"); break; } WriteLine($"Enter number of nodes, max is {DataGenerator.MaxRandomItemsCount} :"); read = ReadLine(); if (!int.TryParse(read, out int numberOfRoots)) { WriteLine("Unable to convert input value"); break; } if (numberOfRoots < 1) { WriteLine("Number of nodes must be greater than 0"); break; } tree = new MarshalledBinarySearchTree <int>(delimiter); var data2 = DataGenerator.RandomTreeData(numberOfRoots).ToList(); if (data2.Any(item => item.ToString().Contains(delimiter))) { WriteLine("Data to be added contains value(s) that include Delimiter, not all nodes will be created"); data2 = data2.Where(item => !item.ToString().Contains(delimiter)).ToList(); } tree.AddRange(data2); break; case "8": WriteLine("Marshaled tree:"); WriteLine(tree.Marshall()); break; case "9": WriteLine("Enter string to unmarshal:"); var unmarshalInput = ReadLine(); tree.Unmarshal(unmarshalInput); WriteLine("Tree loaded"); break; default: exit = true; break; } if (exit) { return; } ShowMenuMarshaled(tree, converter); }