Define Emgu as a nuget reference for the project WPF
[master-thesis.git] / Parasitemia / Tests / ParasitemiaCore.Tests / KdTree.fs
diff --git a/Parasitemia/Tests/ParasitemiaCore.Tests/KdTree.fs b/Parasitemia/Tests/ParasitemiaCore.Tests/KdTree.fs
new file mode 100644 (file)
index 0000000..9c9d859
--- /dev/null
@@ -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
+    [<Fact>]
+    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)
+
+    [<Fact>]
+    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)
+
+
+
+