From 7629b6ef5e0ba7dc6cda92cd47870cf8bec9af6f Mon Sep 17 00:00:00 2001
From: faiface <faiface@ksp.sk>
Date: Sun, 2 Jul 2017 19:22:40 +0200
Subject: [PATCH] add imdraw benchmarks

---
 imdraw/imdraw_test.go | 96 +++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 96 insertions(+)
 create mode 100644 imdraw/imdraw_test.go

diff --git a/imdraw/imdraw_test.go b/imdraw/imdraw_test.go
new file mode 100644
index 0000000..5d390af
--- /dev/null
+++ b/imdraw/imdraw_test.go
@@ -0,0 +1,96 @@
+package imdraw_test
+
+import (
+	"fmt"
+	"math/rand"
+	"testing"
+
+	"github.com/faiface/pixel"
+	"github.com/faiface/pixel/imdraw"
+)
+
+func BenchmarkPush(b *testing.B) {
+	imd := imdraw.New(nil)
+	for i := 0; i < b.N; i++ {
+		imd.Push(pixel.V(123.1, 99.4))
+	}
+}
+
+func pointLists(counts ...int) [][]pixel.Vec {
+	lists := make([][]pixel.Vec, len(counts))
+	for i := range lists {
+		lists[i] = make([]pixel.Vec, counts[i])
+		for j := range lists[i] {
+			lists[i][j] = pixel.V(
+				rand.Float64()*5000-2500,
+				rand.Float64()*5000-2500,
+			)
+		}
+	}
+	return lists
+}
+
+func BenchmarkLine(b *testing.B) {
+	lists := pointLists(2, 5, 10, 100, 1000)
+	for _, pts := range lists {
+		b.Run(fmt.Sprintf("%d", len(pts)), func(b *testing.B) {
+			imd := imdraw.New(nil)
+			for i := 0; i < b.N; i++ {
+				imd.Push(pts...)
+				imd.Line(1)
+			}
+		})
+	}
+}
+
+func BenchmarkRectangle(b *testing.B) {
+	lists := pointLists(2, 10, 100, 1000)
+	for _, pts := range lists {
+		b.Run(fmt.Sprintf("%d", len(pts)), func(b *testing.B) {
+			imd := imdraw.New(nil)
+			for i := 0; i < b.N; i++ {
+				imd.Push(pts...)
+				imd.Rectangle(0)
+			}
+		})
+	}
+}
+
+func BenchmarkPolygon(b *testing.B) {
+	lists := pointLists(3, 10, 100, 1000)
+	for _, pts := range lists {
+		b.Run(fmt.Sprintf("%d", len(pts)), func(b *testing.B) {
+			imd := imdraw.New(nil)
+			for i := 0; i < b.N; i++ {
+				imd.Push(pts...)
+				imd.Polygon(0)
+			}
+		})
+	}
+}
+
+func BenchmarkEllipseFill(b *testing.B) {
+	lists := pointLists(1, 10, 100, 1000)
+	for _, pts := range lists {
+		b.Run(fmt.Sprintf("%d", len(pts)), func(b *testing.B) {
+			imd := imdraw.New(nil)
+			for i := 0; i < b.N; i++ {
+				imd.Push(pts...)
+				imd.Ellipse(pixel.V(50, 100), 0)
+			}
+		})
+	}
+}
+
+func BenchmarkEllipseOutline(b *testing.B) {
+	lists := pointLists(1, 10, 100, 1000)
+	for _, pts := range lists {
+		b.Run(fmt.Sprintf("%d", len(pts)), func(b *testing.B) {
+			imd := imdraw.New(nil)
+			for i := 0; i < b.N; i++ {
+				imd.Push(pts...)
+				imd.Ellipse(pixel.V(50, 100), 1)
+			}
+		})
+	}
+}
-- 
GitLab