X-Git-Url: http://git.euphorik.ch/?p=master-thesis.git;a=blobdiff_plain;f=Parasitemia%2FTests%2FParasitemiaCore.Benchmark%2FProgram.fs;fp=Parasitemia%2FTests%2FParasitemiaCore.Benchmark%2FProgram.fs;h=5022108eebde6aedda3b54bbd026af3ad74a429f;hp=0000000000000000000000000000000000000000;hb=6250f10c807301a760b8659f9c00ca6dbbd4c7b7;hpb=31078fdde95f1b239110dfe29998e9b03e3a9bea diff --git a/Parasitemia/Tests/ParasitemiaCore.Benchmark/Program.fs b/Parasitemia/Tests/ParasitemiaCore.Benchmark/Program.fs new file mode 100644 index 0000000..5022108 --- /dev/null +++ b/Parasitemia/Tests/ParasitemiaCore.Benchmark/Program.fs @@ -0,0 +1,70 @@ +// Learn more about F# at http://docs.microsoft.com/dotnet/fsharp + +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 kdTree () = + 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) + +[] +let main argv = + kdTree () + 0 \ No newline at end of file