Add an ellipse benchmark + unit test (WIP)
[master-thesis.git] / Parasitemia / Tests / ParasitemiaCore.Benchmark / EllipsesBench.fs
diff --git a/Parasitemia/Tests/ParasitemiaCore.Benchmark/EllipsesBench.fs b/Parasitemia/Tests/ParasitemiaCore.Benchmark/EllipsesBench.fs
new file mode 100644 (file)
index 0000000..33ce745
--- /dev/null
@@ -0,0 +1,42 @@
+module ParasitemiaCore.EllipsesBench
+
+open System
+open System.Diagnostics
+open type System.Console
+
+open ParasitemiaCore.Ellipse
+
+let rng = System.Random (42)
+
+let generateParameters () : float * float * float * float * float * float * float * float =
+    rng.NextDouble (),
+    rng.NextDouble (),
+    rng.NextDouble (),
+    rng.NextDouble (),
+    rng.NextDouble (),
+    rng.NextDouble (),
+    rng.NextDouble (),
+    rng.NextDouble ()
+
+let benchOld () =
+    let sw = Stopwatch ()
+    sw.Start ()
+
+    for i in 1 .. 500_000 do
+        let p1x, p1y, m1, p2x, p2y, m2, p3x, p3y = generateParameters ()
+        ellipse p1x p1y m1 p2x p2y m2 p3x p3y |> ignore
+
+    sw.Stop ()
+    WriteLine (sprintf "Old: time = %A ms" sw.ElapsedMilliseconds)
+
+
+let benchNew () =
+    let sw = Stopwatch ()
+    sw.Start ()
+
+    for i in 1 .. 500_000 do
+        let p1x, p1y, m1, p2x, p2y, m2, p3x, p3y = generateParameters ()
+        ellipse' p1x p1y m1 p2x p2y m2 p3x p3y |> ignore
+
+    sw.Stop ()
+    WriteLine (sprintf "New: time = %A ms" sw.ElapsedMilliseconds)
\ No newline at end of file