/
TreeTests.cs
78 lines (72 loc) · 2.07 KB
/
TreeTests.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
using NUnit.Framework;
using System;
using System.Diagnostics;
using System.Threading.Tasks;
namespace SearchTree
{
[TestFixture ()]
public class TreeTests
{
const int per_thread = 10000;
const int threads = 4;
const int DataSize = per_thread * threads;
Random random = new Random();
//utility methods
public void InParallel(int[] data, Action<int> lambda){
Assert.That(data.Length == DataSize);
Parallel.For(0, threads, (int thread_no) =>{
for(int i = 0; i < per_thread; i++)
lambda.Invoke(data[per_thread * thread_no + i]);
});
}
//Returns a new SearchTree and populates data param with the data used
public SearchTree buildTreeAndData(int[] data){
Assert.That(data.Length == DataSize);
var tree = new SearchTree();
var added = new System.Collections.Generic.HashSet<int>();
int data_index = 0;
while(added.Count < DataSize){
var val = random.Next(DataSize);
if(added.Add(val)){
data[data_index] = val;
data_index++;
}
}
InParallel(data, (int item) => {
Assert.That(tree.Insert(item), "Couldn't insert unique item " + item);
Assert.IsFalse(tree.Insert(item), "Inserted same item twice. item = " + item);
});
return tree;
}
[Test ()]
public void InsertTest ()
{
//these functions contain Assert. methods
var data = new int[DataSize];
var tree = buildTreeAndData(data);
}
[Test ()]
public void BuildAndDestroy()
{
var data = new int[DataSize];
var tree = buildTreeAndData(data);
//enter the destroy phase
InParallel(data, (int item) => {
Assert.That(tree.Remove(item), "Failed to remove " + item);
Assert.IsFalse(tree.Contains(item), "Found " + item + " after removal");
});
}
[Test ()]
public void RandomTest(){
var data = new int[DataSize];
var tree = buildTreeAndData(data);
InParallel(data, (int item) => {
Assert.That(tree.Contains(item), "Couldn't find " + item + " in random testing");
if(random.Next() % 2 == 0){
//remove
Assert.That(tree.Remove(item), "Failed to remove " + item + " in random testing");
}
});
}
}
}