Add the old search for kdTree + benchmark project
[master-thesis.git] / Parasitemia / Tests / ParasitemiaCore.Benchmark / Program.fs
1 // Learn more about F# at http://docs.microsoft.com/dotnet/fsharp
2
3 open System
4 open type System.Console
5
6 open ParasitemiaCore.KdTree
7
8 type Point (x : float32, y : float32) =
9 interface I2DCoords with
10 member this.X = x
11 member this.Y = y
12
13 override this.ToString () =
14 sprintf "(%.1f, %.1f)" x y
15
16 let kdTree () =
17 let min = -1_000.
18 let max = +1_000.
19 let windowSize = 10.
20 let nbPoints = 1_000_000
21 let n = 1_000_000
22
23 let rng = Random 42
24 let nextNumber (min : float) (max : float) (rng : Random) =
25 (rng.NextDouble () * (max + abs min)) + min |> float32
26
27 let points =
28 [
29 for i = 1 to nbPoints do
30 let x = nextNumber min max rng
31 let y = nextNumber min max rng
32 Point (x, y)
33 ]
34
35 let sw = System.Diagnostics.Stopwatch ()
36 sw.Start ()
37
38 let tree = Tree.BuildTree points
39
40 sw.Stop ()
41 WriteLine (sprintf "Time to build = %A ms" sw.ElapsedMilliseconds)
42
43 let rng = Random 42
44 sw.Restart ()
45
46 let mutable nbFound = 0
47 for i = 1 to n do
48 let minX = nextNumber min (max - windowSize) rng
49 let minY = nextNumber min (max - windowSize) rng
50 nbFound <- nbFound + (tree.SearchOld { minX = minX; maxX = minX + float32 windowSize; minY = minY; maxY = minY + float32 windowSize } |> List.length)
51
52 sw.Stop ()
53 WriteLine (sprintf "New: nb found: %i. Time to search = %A ms" nbFound sw.ElapsedMilliseconds)
54
55 let rng = Random 42
56 sw.Restart ()
57
58 let mutable nbFound = 0
59 for i = 1 to n do
60 let minX = nextNumber min (max - windowSize) rng
61 let minY = nextNumber min (max - windowSize) rng
62 nbFound <- nbFound + (tree.Search { minX = minX; maxX = minX + float32 windowSize; minY = minY; maxY = minY + float32 windowSize }).Count
63
64 sw.Stop ()
65 WriteLine (sprintf "New: nb found: %i. Time to search = %A ms" nbFound sw.ElapsedMilliseconds)
66
67 [<EntryPoint>]
68 let main argv =
69 kdTree ()
70 0