From 05d12f52c42d9d75e7ee3f57c327938180f6b34b Mon Sep 17 00:00:00 2001 From: Greg Burri Date: Sat, 4 Nov 2017 09:34:01 +0100 Subject: [PATCH] Add a benchmark test for KdTree (WIP). --- .gitignore | 6 ++++ .../{KdTree.fs => KdTreeTests.fs} | 31 +++++++++++++++++-- .../ParasitemiaCore.Tests.fsproj | 2 +- 3 files changed, 36 insertions(+), 3 deletions(-) create mode 100644 .gitignore rename Parasitemia/Tests/ParasitemiaCore.Tests/{KdTree.fs => KdTreeTests.fs} (67%) diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4a6c7e8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +bin/ +obj/ +packages/ +.vs +*.exe +*.suo \ No newline at end of file diff --git a/Parasitemia/Tests/ParasitemiaCore.Tests/KdTree.fs b/Parasitemia/Tests/ParasitemiaCore.Tests/KdTreeTests.fs similarity index 67% rename from Parasitemia/Tests/ParasitemiaCore.Tests/KdTree.fs rename to Parasitemia/Tests/ParasitemiaCore.Tests/KdTreeTests.fs index 9181c26..929dd9e 100644 --- a/Parasitemia/Tests/ParasitemiaCore.Tests/KdTree.fs +++ b/Parasitemia/Tests/ParasitemiaCore.Tests/KdTreeTests.fs @@ -17,7 +17,7 @@ type KdTreeTests (output : ITestOutputHelper) = // TODO: test with identical X or Y coords [] - member this.test () = + member this.``Test`` () = let pts = [ Point (1.0f, 1.0f) @@ -42,7 +42,7 @@ type KdTreeTests (output : ITestOutputHelper) = output.WriteLine (sprintf "s3: %A" s3) [] - member this.test2 () = + member this.``Test 2`` () = let pts = [ Point (1.0f, 1.0f) @@ -66,6 +66,33 @@ type KdTreeTests (output : ITestOutputHelper) = let s4 = tree.Search { minX = 0.0f; maxX = 2.0f; minY = 0.0f; maxY = 4.0f } output.WriteLine (sprintf "s4: %A" s4) + [] + member this.``Benchmark`` () = + let min = -1_000. + let max = +1_000. + let windowSize = 10. + + let rng = System.Random 42 + let nextNumber (min : float) (max : float) = + (rng.NextDouble () * (max + abs min)) + min |> float32 + + let points = + [ + for i = 1 to 200_000 do + let x = nextNumber min max + let y = nextNumber min max + yield Point (x, y) + ] + + let tree = Tree.BuildTree points + + let mutable nb = 0 + for i = 1 to 1_000 do + let minX = nextNumber min (max - windowSize) + let minY = nextNumber min (max - windowSize) + nb <- nb + (tree.Search { minX = minX; maxX = minX + float32 windowSize; minY = minY; maxY = minY + float32 windowSize } |> List.length) + + output.WriteLine (sprintf "nb: %A" nb) diff --git a/Parasitemia/Tests/ParasitemiaCore.Tests/ParasitemiaCore.Tests.fsproj b/Parasitemia/Tests/ParasitemiaCore.Tests/ParasitemiaCore.Tests.fsproj index 75c810e..3b3cf37 100644 --- a/Parasitemia/Tests/ParasitemiaCore.Tests/ParasitemiaCore.Tests.fsproj +++ b/Parasitemia/Tests/ParasitemiaCore.Tests/ParasitemiaCore.Tests.fsproj @@ -51,7 +51,7 @@ - + -- 2.43.0