1
module ParasitemiaCore.KdTreeBench
4 open type System.Console
6 open ParasitemiaCore.KdTree
8 type Point (x
: float32
, y
: float32
) =
9 interface I2DCoords with
13 override this.ToString () =
14 sprintf
"(%.1f, %.1f)" x y
20 let nbPoints = 1_000_000
24 let nextNumber (min : float) (max : float) (rng : Random) =
25 (rng.NextDouble () * (max + abs
min)) + min |> float32
29 for i
= 1 to nbPoints do
30 let x = nextNumber min max rng
31 let y = nextNumber min max rng
35 let sw = System.Diagnostics.Stopwatch ()
38 let tree = Tree.BuildTree points
41 WriteLine (sprintf
"Time to build = %A ms" sw.ElapsedMilliseconds)
46 let mutable nbFound = 0
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
)
53 WriteLine (sprintf
"New: nb found: %i. Time to search = %A ms" nbFound sw.ElapsedMilliseconds)
58 let mutable nbFound = 0
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
65 WriteLine (sprintf
"New: nb found: %i. Time to search = %A ms" nbFound sw.ElapsedMilliseconds)