public void TestBalancingAnTreeAfterGarbageCollecting() { var frequences = new[] { 1, 2, 3, 400, 700, 600, 70, 68, 67, 59, 56, 55, 58, 57, 56, 63 }; //частоты заданы с таким расчетом, чтобы редкие занимали нижние этажи float exp; var root = new Func <CacheNode <int, double> >(() => BuildAndBalanceTree(frequences, out exp, 2))(); Collect(); Collect(); Collect(); Collect(); Collect(); int depth = 0; var maxDepth = Enumerable.Range(0, frequences.Count()).Max(a => { root.FindNode(a, 1, out depth); return(depth); }); var deletedNode = root.FindNode(0, 1, out depth); Assert.AreEqual(0, deletedNode); deletedNode = root.FindNode(1, 1, out depth); Assert.AreEqual(0, deletedNode); deletedNode = root.FindNode(2, 1, out depth); Assert.AreEqual(0, deletedNode); deletedNode = root.FindNode(3, 1, out depth); Assert.AreNotEqual(0, deletedNode); }
public void TestTreeDepthLimitAfterBalance() { const int count = 30; const int maxAllowedDepth = 5; float d; int p = 0; var tree = new Func <CacheNode <int, double> >( () => BuildAndBalanceTree(Enumerable.Range(0, count).ToArray(), out d, maxAllowedDepth))(); //тоже мусор не всегд собирается for (int i = 0; i < count; i++) { Collect(); } var maxDepth = Enumerable.Range(0, count).Max(a => { int depth; tree.FindNode(a, 1, out depth); return(depth); }); Assert.IsTrue(maxDepth <= maxAllowedDepth); }
public void TestBalancingAnTreeAfterGarbageCollecting() { var frequences = new[] {1, 2, 3, 400, 700, 600, 70, 68, 67, 59, 56, 55, 58, 57, 56, 63}; //частоты заданы с таким расчетом, чтобы редкие занимали нижние этажи float exp; var root = new Func<CacheNode<int, double>>(() => BuildAndBalanceTree(frequences, out exp, 2))(); Collect(); Collect(); Collect(); Collect(); Collect(); int depth = 0; var maxDepth = Enumerable.Range(0, frequences.Count()).Max(a => { root.FindNode(a, 1, out depth); return depth; }); var deletedNode = root.FindNode(0, 1, out depth); Assert.AreEqual(0, deletedNode); deletedNode = root.FindNode(1, 1, out depth); Assert.AreEqual(0, deletedNode); deletedNode = root.FindNode(2, 1, out depth); Assert.AreEqual(0, deletedNode); deletedNode = root.FindNode(3, 1, out depth); Assert.AreNotEqual(0, deletedNode); }
public void TestTreeDepthLimitAfterBalance() { const int count = 30; const int maxAllowedDepth = 5; float d; int p = 0; var tree = new Func<CacheNode<int, double>>( () => BuildAndBalanceTree(Enumerable.Range(0, count).ToArray(), out d, maxAllowedDepth))(); //тоже мусор не всегд собирается for (int i = 0; i < count; i++) { Collect(); } var maxDepth = Enumerable.Range(0, count).Max(a => { int depth; tree.FindNode(a, 1, out depth); return depth; }); Assert.IsTrue(maxDepth <= maxAllowedDepth); }