X-Git-Url: http://git.euphorik.ch/?a=blobdiff_plain;f=Parasitemia%2FTests%2FParasitemiaCore.Tests%2FKdTree.fs;fp=Parasitemia%2FTests%2FParasitemiaCore.Tests%2FKdTree.fs;h=9c9d859d9b9772d17141725da8373af6c913606f;hb=aeb0583fa94d4c8cef1f8b53559ecac76bc1a191;hp=0000000000000000000000000000000000000000;hpb=829c86a5f0f165438da8f8da2e072889065a4df1;p=master-thesis.git diff --git a/Parasitemia/Tests/ParasitemiaCore.Tests/KdTree.fs b/Parasitemia/Tests/ParasitemiaCore.Tests/KdTree.fs new file mode 100644 index 0000000..9c9d859 --- /dev/null +++ b/Parasitemia/Tests/ParasitemiaCore.Tests/KdTree.fs @@ -0,0 +1,71 @@ +namespace ParasitemiaCore.Tests + +open Xunit +open Xunit.Abstractions + +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 + +type KdTreeTests (output : ITestOutputHelper) = + + // TODO: test with identical X or Y coords + [] + member this.test () = + let pts = + [ + Point(1.0f, 1.0f) + Point(2.0f, 2.0f) + Point(1.5f, 3.6f) + Point(3.0f, 3.2f) + Point(4.0f, 4.0f) + Point(3.5f, 1.5f) + Point(2.5f, 0.5f) + ] + + let tree = Tree.BuildTree pts + output.WriteLine (sprintf "Tree: %A" tree) + + let s1 = tree.Search { minX = 0.0f; maxX = 5.0f; minY = 0.0f; maxY = 5.0f } // All points. + output.WriteLine (sprintf "s1: %A" s1) + + let s2 = tree.Search { minX = 2.8f; maxX = 4.5f; minY = 3.0f; maxY = 4.5f } + output.WriteLine (sprintf "s2: %A" s2) + + let s3 = tree.Search { minX = 2.0f; maxX = 2.0f; minY = 2.0f; maxY = 2.0f } + output.WriteLine (sprintf "s3: %A" s3) + + [] + member this.test2 () = + let pts = + [ + Point(1.0f, 1.0f) + Point(1.0f, 2.0f) + Point(1.0f, 3.0f) + ] + + let tree = Tree.BuildTree pts + output.WriteLine (sprintf "Tree: %A" tree) + + let s1 = tree.Search { minX = 1.0f; maxX = 1.0f; minY = 1.0f; maxY = 1.0f } + output.WriteLine (sprintf "s1: %A" s1) + + let s2 = tree.Search { minX = 1.0f; maxX = 1.0f; minY = 2.0f; maxY = 2.0f } + output.WriteLine (sprintf "s2: %A" s2) + + // This case result is wrong: FIXME + let s3 = tree.Search { minX = 1.0f; maxX = 1.0f; minY = 3.0f; maxY = 3.0f } + output.WriteLine (sprintf "s3: %A" s3) + + let s4 = tree.Search { minX = 0.0f; maxX = 2.0f; minY = 0.0f; maxY = 4.0f } + output.WriteLine (sprintf "s4: %A" s4) + + + +