| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244 |
- using NUnit.Framework;
- using Ryujinx.Common.Collections;
- using System;
- using System.Collections.Generic;
- namespace Ryujinx.Tests.Collections
- {
- class TreeDictionaryTests
- {
- [Test]
- public void EnsureAddIntegrity()
- {
- TreeDictionary<int, int> dictionary = new TreeDictionary<int, int>();
- Assert.AreEqual(dictionary.Count, 0);
- dictionary.Add(2, 7);
- dictionary.Add(1, 4);
- dictionary.Add(10, 2);
- dictionary.Add(4, 1);
- dictionary.Add(3, 2);
- dictionary.Add(11, 2);
- dictionary.Add(5, 2);
- Assert.AreEqual(dictionary.Count, 7);
- List<KeyValuePair<int, int>> list = dictionary.AsLevelOrderList();
- /*
- * Tree Should Look as Follows After Rotations
- *
- * 2
- * 1 4
- * 3 10
- * 5 11
- *
- */
-
- Assert.AreEqual(list.Count, dictionary.Count);
- Assert.AreEqual(list[0].Key, 2);
- Assert.AreEqual(list[1].Key, 1);
- Assert.AreEqual(list[2].Key, 4);
- Assert.AreEqual(list[3].Key, 3);
- Assert.AreEqual(list[4].Key, 10);
- Assert.AreEqual(list[5].Key, 5);
- Assert.AreEqual(list[6].Key, 11);
- }
- [Test]
- public void EnsureRemoveIntegrity()
- {
- TreeDictionary<int, int> dictionary = new TreeDictionary<int, int>();
- Assert.AreEqual(dictionary.Count, 0);
- dictionary.Add(2, 7);
- dictionary.Add(1, 4);
- dictionary.Add(10, 2);
- dictionary.Add(4, 1);
- dictionary.Add(3, 2);
- dictionary.Add(11, 2);
- dictionary.Add(5, 2);
- dictionary.Add(7, 2);
- dictionary.Add(9, 2);
- dictionary.Add(8, 2);
- dictionary.Add(13, 2);
- dictionary.Add(24, 2);
- dictionary.Add(6, 2);
- Assert.AreEqual(dictionary.Count, 13);
- List<KeyValuePair<int, int>> list = dictionary.AsLevelOrderList();
- /*
- * Tree Should Look as Follows After Rotations
- *
- * 4
- * 2 10
- * 1 3 7 13
- * 5 9 11 24
- * 6 8
- */
- foreach (KeyValuePair<int, int> node in list)
- {
- Console.WriteLine($"{node.Key} -> {node.Value}");
- }
- Assert.AreEqual(list.Count, dictionary.Count);
- Assert.AreEqual(list[0].Key, 4);
- Assert.AreEqual(list[1].Key, 2);
- Assert.AreEqual(list[2].Key, 10);
- Assert.AreEqual(list[3].Key, 1);
- Assert.AreEqual(list[4].Key, 3);
- Assert.AreEqual(list[5].Key, 7);
- Assert.AreEqual(list[6].Key, 13);
- Assert.AreEqual(list[7].Key, 5);
- Assert.AreEqual(list[8].Key, 9);
- Assert.AreEqual(list[9].Key, 11);
- Assert.AreEqual(list[10].Key, 24);
- Assert.AreEqual(list[11].Key, 6);
- Assert.AreEqual(list[12].Key, 8);
- list.Clear();
- dictionary.Remove(7);
- /*
- * Tree Should Look as Follows After Removal
- *
- * 4
- * 2 10
- * 1 3 6 13
- * 5 9 11 24
- * 8
- */
- list = dictionary.AsLevelOrderList();
- foreach (KeyValuePair<int, int> node in list)
- {
- Console.WriteLine($"{node.Key} -> {node.Value}");
- }
- Assert.AreEqual(list[0].Key, 4);
- Assert.AreEqual(list[1].Key, 2);
- Assert.AreEqual(list[2].Key, 10);
- Assert.AreEqual(list[3].Key, 1);
- Assert.AreEqual(list[4].Key, 3);
- Assert.AreEqual(list[5].Key, 6);
- Assert.AreEqual(list[6].Key, 13);
- Assert.AreEqual(list[7].Key, 5);
- Assert.AreEqual(list[8].Key, 9);
- Assert.AreEqual(list[9].Key, 11);
- Assert.AreEqual(list[10].Key, 24);
- Assert.AreEqual(list[11].Key, 8);
- list.Clear();
- dictionary.Remove(10);
- list = dictionary.AsLevelOrderList();
- /*
- * Tree Should Look as Follows After Removal
- *
- * 4
- * 2 9
- * 1 3 6 13
- * 5 8 11 24
- *
- */
- foreach (KeyValuePair<int, int> node in list)
- {
- Console.WriteLine($"{node.Key} -> {node.Value}");
- }
- Assert.AreEqual(list[0].Key, 4);
- Assert.AreEqual(list[1].Key, 2);
- Assert.AreEqual(list[2].Key, 9);
- Assert.AreEqual(list[3].Key, 1);
- Assert.AreEqual(list[4].Key, 3);
- Assert.AreEqual(list[5].Key, 6);
- Assert.AreEqual(list[6].Key, 13);
- Assert.AreEqual(list[7].Key, 5);
- Assert.AreEqual(list[8].Key, 8);
- Assert.AreEqual(list[9].Key, 11);
- Assert.AreEqual(list[10].Key, 24);
- }
- [Test]
- public void EnsureOverwriteIntegrity()
- {
- TreeDictionary<int, int> dictionary = new TreeDictionary<int, int>();
- Assert.AreEqual(dictionary.Count, 0);
- dictionary.Add(2, 7);
- dictionary.Add(1, 4);
- dictionary.Add(10, 2);
- dictionary.Add(4, 1);
- dictionary.Add(3, 2);
- dictionary.Add(11, 2);
- dictionary.Add(5, 2);
- dictionary.Add(7, 2);
- dictionary.Add(9, 2);
- dictionary.Add(8, 2);
- dictionary.Add(13, 2);
- dictionary.Add(24, 2);
- dictionary.Add(6, 2);
- Assert.AreEqual(dictionary.Count, 13);
- List<KeyValuePair<int, int>> list = dictionary.AsLevelOrderList();
- foreach (KeyValuePair<int, int> node in list)
- {
- Console.WriteLine($"{node.Key} -> {node.Value}");
- }
- /*
- * Tree Should Look as Follows After Rotations
- *
- * 4
- * 2 10
- * 1 3 7 13
- * 5 9 11 24
- * 6 8
- */
- Assert.AreEqual(list.Count, dictionary.Count);
- Assert.AreEqual(list[0].Key, 4);
- Assert.AreEqual(list[1].Key, 2);
- Assert.AreEqual(list[2].Key, 10);
- Assert.AreEqual(list[3].Key, 1);
- Assert.AreEqual(list[4].Key, 3);
- Assert.AreEqual(list[5].Key, 7);
- Assert.AreEqual(list[6].Key, 13);
- Assert.AreEqual(list[7].Key, 5);
- Assert.AreEqual(list[8].Key, 9);
- Assert.AreEqual(list[9].Key, 11);
- Assert.AreEqual(list[10].Key, 24);
- Assert.AreEqual(list[11].Key, 6);
- Assert.AreEqual(list[12].Key, 8);
- Assert.AreEqual(list[4].Value, 2);
- dictionary.Add(3, 4);
- list = dictionary.AsLevelOrderList();
- Assert.AreEqual(list[4].Value, 4);
- // Assure that none of the nodes locations have been modified.
- Assert.AreEqual(list[0].Key, 4);
- Assert.AreEqual(list[1].Key, 2);
- Assert.AreEqual(list[2].Key, 10);
- Assert.AreEqual(list[3].Key, 1);
- Assert.AreEqual(list[4].Key, 3);
- Assert.AreEqual(list[5].Key, 7);
- Assert.AreEqual(list[6].Key, 13);
- Assert.AreEqual(list[7].Key, 5);
- Assert.AreEqual(list[8].Key, 9);
- Assert.AreEqual(list[9].Key, 11);
- Assert.AreEqual(list[10].Key, 24);
- Assert.AreEqual(list[11].Key, 6);
- Assert.AreEqual(list[12].Key, 8);
- }
- }
- }
|