X-Git-Url: http://git.euphorik.ch/?p=master-thesis.git;a=blobdiff_plain;f=Parasitemia%2FTests%2FParasitemiaCore.Benchmark%2FKdTreeBench.fs;fp=Parasitemia%2FTests%2FParasitemiaCore.Benchmark%2FKdTreeBench.fs;h=028939b3f5b47e32727fd6930761966808a22e91;hp=0000000000000000000000000000000000000000;hb=2e029053d283ce141ce9870336cb9574ea4a203a;hpb=8866c578f1210295bdcf04c8212eae81d52d630a diff --git a/Parasitemia/Tests/ParasitemiaCore.Benchmark/KdTreeBench.fs b/Parasitemia/Tests/ParasitemiaCore.Benchmark/KdTreeBench.fs new file mode 100644 index 0000000..028939b --- /dev/null +++ b/Parasitemia/Tests/ParasitemiaCore.Benchmark/KdTreeBench.fs @@ -0,0 +1,65 @@ +module ParasitemiaCore.KdTreeBench + +open System +open type System.Console + +open ParasitemiaCore.KdTree + +type Point (x : float32, y : float32) = + interface I2DCoords with + member this.X = x + member this.Y = y + + override this.ToString () = + sprintf "(%.1f, %.1f)" x y + +let bench1 () = + let min = -1_000. + let max = +1_000. + let windowSize = 10. + let nbPoints = 1_000_000 + let n = 1_000_000 + + let rng = Random 42 + let nextNumber (min : float) (max : float) (rng : Random) = + (rng.NextDouble () * (max + abs min)) + min |> float32 + + let points = + [ + for i = 1 to nbPoints do + let x = nextNumber min max rng + let y = nextNumber min max rng + Point (x, y) + ] + + let sw = System.Diagnostics.Stopwatch () + sw.Start () + + let tree = Tree.BuildTree points + + sw.Stop () + WriteLine (sprintf "Time to build = %A ms" sw.ElapsedMilliseconds) + + let rng = Random 42 + sw.Restart () + + let mutable nbFound = 0 + for i = 1 to n do + let minX = nextNumber min (max - windowSize) rng + let minY = nextNumber min (max - windowSize) rng + nbFound <- nbFound + (tree.SearchOld { minX = minX; maxX = minX + float32 windowSize; minY = minY; maxY = minY + float32 windowSize } |> List.length) + + sw.Stop () + WriteLine (sprintf "New: nb found: %i. Time to search = %A ms" nbFound sw.ElapsedMilliseconds) + + let rng = Random 42 + sw.Restart () + + let mutable nbFound = 0 + for i = 1 to n do + let minX = nextNumber min (max - windowSize) rng + let minY = nextNumber min (max - windowSize) rng + nbFound <- nbFound + (tree.Search { minX = minX; maxX = minX + float32 windowSize; minY = minY; maxY = minY + float32 windowSize }).Count + + sw.Stop () + WriteLine (sprintf "New: nb found: %i. Time to search = %A ms" nbFound sw.ElapsedMilliseconds) \ No newline at end of file